X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=perliol.h;h=47fe6fc679c69f9e9f87d1a80992d9263e8b5fd2;hb=9f9d9dc0a4872096e1675c61f2f645e451c07518;hp=487a7ff164cc5f5f8c067073d03417416b86a3dc;hpb=f62ce20a4126b1e303e2d4d0a5c1e049ef2cb0c2;p=p5sagit%2Fp5-mst-13.2.git diff --git a/perliol.h b/perliol.h index 487a7ff..47fe6fc 100644 --- a/perliol.h +++ b/perliol.h @@ -14,16 +14,18 @@ struct PerlIO_list_s { }; struct _PerlIO_funcs { + Size_t fsize; char *name; Size_t size; - IV kind; - IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg); + U32 kind; + IV (*Pushed) (pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab); IV (*Popped) (pTHX_ PerlIO *f); PerlIO *(*Open) (pTHX_ PerlIO_funcs *tab, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *old, int narg, SV **args); + IV (*Binmode)(pTHX_ PerlIO *f); SV *(*Getarg) (pTHX_ PerlIO *f, CLONE_PARAMS *param, int flags); IV (*Fileno) (pTHX_ PerlIO *f); PerlIO *(*Dup) (pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags); @@ -64,7 +66,7 @@ struct _PerlIO_funcs { struct _PerlIO { PerlIOl *next; /* Lower layer */ PerlIO_funcs *tab; /* Functions for this layer */ - IV flags; /* Various flags for state */ + U32 flags; /* Various flags for state */ }; /*--------------------------------------------------------------------------------------*/ @@ -86,10 +88,12 @@ struct _PerlIO { #define PERLIO_F_OPEN 0x00200000 #define PERLIO_F_FASTGETS 0x00400000 #define PERLIO_F_TTY 0x00800000 +#define PERLIO_F_NOTREG 0x01000000 #define PerlIOBase(f) (*(f)) #define PerlIOSelf(f,type) ((type *)PerlIOBase(f)) #define PerlIONext(f) (&(PerlIOBase(f)->next)) +#define PerlIOValid(f) ((f) && *(f)) /*--------------------------------------------------------------------------------------*/ /* Data exports - EXT rather than extern is needed for Cygwin */ @@ -122,8 +126,9 @@ extern SV *PerlIO_arg_fetch(PerlIO_list_t *av, IV n); extern IV PerlIOBase_fileno(pTHX_ PerlIO *f); extern PerlIO *PerlIOBase_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags); -extern IV PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg); +extern IV PerlIOBase_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab); extern IV PerlIOBase_popped(pTHX_ PerlIO *f); +extern IV PerlIOBase_binmode(pTHX_ PerlIO *f); extern SSize_t PerlIOBase_read(pTHX_ PerlIO *f, void *vbuf, Size_t count); extern SSize_t PerlIOBase_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count); @@ -153,12 +158,20 @@ typedef struct { IV oneword; /* Emergency buffer */ } PerlIOBuf; +extern int PerlIO_apply_layera(pTHX_ PerlIO *f, const char *mode, + PerlIO_list_t *layers, IV n, IV max); +extern int PerlIO_parse_layers(pTHX_ PerlIO_list_t *av, const char *names); +extern void PerlIO_list_free(pTHX_ PerlIO_list_t *list); +extern PerlIO_funcs *PerlIO_layer_fetch(pTHX_ PerlIO_list_t *av, IV n, PerlIO_funcs *def); + + extern SV *PerlIO_sv_dup(pTHX_ SV *arg, CLONE_PARAMS *param); extern PerlIO *PerlIOBuf_open(pTHX_ PerlIO_funcs *self, PerlIO_list_t *layers, IV n, const char *mode, int fd, int imode, int perm, PerlIO *old, int narg, SV **args); -extern IV PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg); +extern IV PerlIOBuf_pushed(pTHX_ PerlIO *f, const char *mode, SV *arg, PerlIO_funcs *tab); +extern IV PerlIOBuf_popped(pTHX_ PerlIO *f); extern PerlIO *PerlIOBuf_dup(pTHX_ PerlIO *f, PerlIO *o, CLONE_PARAMS *param, int flags); extern SSize_t PerlIOBuf_read(pTHX_ PerlIO *f, void *vbuf, Size_t count); extern SSize_t PerlIOBuf_unread(pTHX_ PerlIO *f, const void *vbuf, Size_t count);