xref: /openbsd/gnu/usr.bin/perl/perlio.h (revision 7bfa9f44)
179cd0b9aSmillert /*    perlio.h
279cd0b9aSmillert  *
3f64b279aSmillert  *    Copyright (C) 1996, 1997, 1999, 2000, 2001, 2002, 2003,
4*7bfa9f44Smillert  *    2004, 2005, 2006, 2007, by Larry Wall and others
579cd0b9aSmillert  *
679cd0b9aSmillert  *    You may distribute under the terms of either the GNU General Public
779cd0b9aSmillert  *    License or the Artistic License, as specified in the README file.
879cd0b9aSmillert  *
979cd0b9aSmillert  */
1079cd0b9aSmillert 
1179cd0b9aSmillert #ifndef _PERLIO_H
1279cd0b9aSmillert #define _PERLIO_H
1379cd0b9aSmillert /*
1479cd0b9aSmillert   Interface for perl to IO functions.
15f3142520Smillert   There is a hierarchy of Configure determined #define controls:
1679cd0b9aSmillert    USE_STDIO   - forces PerlIO_xxx() to be #define-d onto stdio functions.
1779cd0b9aSmillert                  This is used for x2p subdirectory and for conservative
1879cd0b9aSmillert                  builds - "just like perl5.00X used to be".
1979cd0b9aSmillert                  This dominates over the others.
2079cd0b9aSmillert 
2179cd0b9aSmillert    USE_PERLIO  - The primary Configure variable that enables PerlIO.
2279cd0b9aSmillert                  If USE_PERLIO is _NOT_ set
2379cd0b9aSmillert                    then USE_STDIO above will be set to be conservative.
2479cd0b9aSmillert                  If USE_PERLIO is set
2579cd0b9aSmillert                    then there are two modes determined by USE_SFIO:
2679cd0b9aSmillert 
2779cd0b9aSmillert    USE_SFIO    - If set causes PerlIO_xxx() to be #define-d onto sfio functions.
2879cd0b9aSmillert                  A backward compatability mode for some specialist applications.
2979cd0b9aSmillert 
3079cd0b9aSmillert                  If USE_SFIO is not set then PerlIO_xxx() are real functions
3179cd0b9aSmillert                  defined in perlio.c which implement extra functionality
3279cd0b9aSmillert                  required for utf8 support.
3379cd0b9aSmillert 
3479cd0b9aSmillert    One further note - the table-of-functions scheme controlled
3579cd0b9aSmillert    by PERL_IMPLICIT_SYS turns on USE_PERLIO so that iperlsys.h can
3679cd0b9aSmillert    #define PerlIO_xxx() to go via the function table, without having
3779cd0b9aSmillert    to #undef them from (say) stdio forms.
3879cd0b9aSmillert 
3979cd0b9aSmillert */
4079cd0b9aSmillert 
4179cd0b9aSmillert #if defined(PERL_IMPLICIT_SYS)
4279cd0b9aSmillert #ifndef USE_PERLIO
4379cd0b9aSmillert #ifndef NETWARE
4479cd0b9aSmillert /* # define USE_PERLIO */
4579cd0b9aSmillert #endif
4679cd0b9aSmillert #endif
4779cd0b9aSmillert #endif
4879cd0b9aSmillert 
4979cd0b9aSmillert #ifndef USE_PERLIO
5079cd0b9aSmillert # define USE_STDIO
5179cd0b9aSmillert #endif
5279cd0b9aSmillert 
5379cd0b9aSmillert #ifdef USE_STDIO
5479cd0b9aSmillert #  ifndef PERLIO_IS_STDIO
5579cd0b9aSmillert #      define PERLIO_IS_STDIO
5679cd0b9aSmillert #  endif
5779cd0b9aSmillert #endif
5879cd0b9aSmillert 
5979cd0b9aSmillert /* --------------------  End of Configure controls ---------------------------- */
6079cd0b9aSmillert 
6179cd0b9aSmillert /*
6279cd0b9aSmillert  * Although we may not want stdio to be used including <stdio.h> here
6379cd0b9aSmillert  * avoids issues where stdio.h has strange side effects
6479cd0b9aSmillert  */
6579cd0b9aSmillert #include <stdio.h>
6679cd0b9aSmillert 
6779cd0b9aSmillert #ifdef __BEOS__
6879cd0b9aSmillert int fseeko(FILE *stream, off_t offset, int whence);
6979cd0b9aSmillert off_t ftello(FILE *stream);
7079cd0b9aSmillert #endif
7179cd0b9aSmillert 
7279cd0b9aSmillert #if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64)
7379cd0b9aSmillert #define ftell ftello
7479cd0b9aSmillert #endif
7579cd0b9aSmillert 
7679cd0b9aSmillert #if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64)
7779cd0b9aSmillert #define fseek fseeko
7879cd0b9aSmillert #endif
7979cd0b9aSmillert 
8079cd0b9aSmillert /* BS2000 includes are sometimes a bit non standard :-( */
8179cd0b9aSmillert #if defined(POSIX_BC) && defined(O_BINARY) && !defined(O_TEXT)
8279cd0b9aSmillert #undef O_BINARY
8379cd0b9aSmillert #endif
8479cd0b9aSmillert 
8579cd0b9aSmillert #ifdef PERLIO_IS_STDIO
8679cd0b9aSmillert /* #define PerlIO_xxxx() as equivalent stdio function */
8779cd0b9aSmillert #include "perlsdio.h"
8879cd0b9aSmillert #else				/* PERLIO_IS_STDIO */
8979cd0b9aSmillert #ifdef USE_SFIO
9079cd0b9aSmillert /* #define PerlIO_xxxx() as equivalent sfio function */
9179cd0b9aSmillert #include "perlsfio.h"
9279cd0b9aSmillert #endif				/* USE_SFIO */
9379cd0b9aSmillert #endif				/* PERLIO_IS_STDIO */
9479cd0b9aSmillert 
9579cd0b9aSmillert #ifndef PerlIO
9679cd0b9aSmillert /* ----------- PerlIO implementation ---------- */
9779cd0b9aSmillert /* PerlIO not #define-d to something else - define the implementation */
9879cd0b9aSmillert 
9979cd0b9aSmillert typedef struct _PerlIO PerlIOl;
10079cd0b9aSmillert typedef struct _PerlIO_funcs PerlIO_funcs;
10179cd0b9aSmillert typedef PerlIOl *PerlIO;
10279cd0b9aSmillert #define PerlIO PerlIO
10379cd0b9aSmillert #define PERLIO_LAYERS 1
10479cd0b9aSmillert 
105ad15181aSmillert /* Making the big PerlIO_funcs vtables const is good (enables placing
106ad15181aSmillert  * them in the const section which is good for speed, security, and
107ad15181aSmillert  * embeddability) but this cannot be done by default because of
108ad15181aSmillert  * backward compatibility. */
109ad15181aSmillert #ifdef PERLIO_FUNCS_CONST
110ad15181aSmillert #define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
111ad15181aSmillert #define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
112ad15181aSmillert #else
113ad15181aSmillert #define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
114ad15181aSmillert #define PERLIO_FUNCS_CAST(funcs) (funcs)
115ad15181aSmillert #endif
116ad15181aSmillert 
117ad15181aSmillert PERL_EXPORT_C void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab);
118ad15181aSmillert PERL_EXPORT_C PerlIO_funcs *PerlIO_find_layer(pTHX_ const char *name,
119ad15181aSmillert                                               STRLEN len,
12079cd0b9aSmillert 				              int load);
121ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_push(pTHX_ PerlIO *f, PERLIO_FUNCS_DECL(*tab),
12279cd0b9aSmillert 			          const char *mode, SV *arg);
123ad15181aSmillert PERL_EXPORT_C void PerlIO_pop(pTHX_ PerlIO *f);
124ad15181aSmillert PERL_EXPORT_C AV* PerlIO_get_layers(pTHX_ PerlIO *f);
125ad15181aSmillert PERL_EXPORT_C void PerlIO_clone(pTHX_ PerlInterpreter *proto,
126ad15181aSmillert                                 CLONE_PARAMS *param);
12779cd0b9aSmillert 
12879cd0b9aSmillert #endif				/* PerlIO */
12979cd0b9aSmillert 
13079cd0b9aSmillert /* ----------- End of implementation choices  ---------- */
13179cd0b9aSmillert 
13279cd0b9aSmillert #ifndef PERLIO_IS_STDIO
13379cd0b9aSmillert /* Not using stdio _directly_ as PerlIO */
13479cd0b9aSmillert 
13579cd0b9aSmillert /* We now need to determine  what happens if source trys to use stdio.
13679cd0b9aSmillert  * There are three cases based on PERLIO_NOT_STDIO which XS code
13779cd0b9aSmillert  * can set how it wants.
13879cd0b9aSmillert  */
13979cd0b9aSmillert 
14079cd0b9aSmillert #ifdef PERL_CORE
14179cd0b9aSmillert /* Make a choice for perl core code
14279cd0b9aSmillert    - currently this is set to try and catch lingering raw stdio calls.
14379cd0b9aSmillert      This is a known issue with some non UNIX ports which still use
14479cd0b9aSmillert      "native" stdio features.
14579cd0b9aSmillert */
14679cd0b9aSmillert #ifndef PERLIO_NOT_STDIO
14779cd0b9aSmillert #define PERLIO_NOT_STDIO 1
14879cd0b9aSmillert #endif
14979cd0b9aSmillert #else
15079cd0b9aSmillert #ifndef PERLIO_NOT_STDIO
15179cd0b9aSmillert #define PERLIO_NOT_STDIO 0
15279cd0b9aSmillert #endif
15379cd0b9aSmillert #endif
15479cd0b9aSmillert 
15579cd0b9aSmillert #ifdef PERLIO_NOT_STDIO
15679cd0b9aSmillert #if PERLIO_NOT_STDIO
15779cd0b9aSmillert /*
15879cd0b9aSmillert  * PERLIO_NOT_STDIO #define'd as 1
15979cd0b9aSmillert  * Case 1: Strong denial of stdio - make all stdio calls (we can think of) errors
16079cd0b9aSmillert  */
16179cd0b9aSmillert #include "nostdio.h"
16279cd0b9aSmillert #else				/* if PERLIO_NOT_STDIO */
16379cd0b9aSmillert /*
16479cd0b9aSmillert  * PERLIO_NOT_STDIO #define'd as 0
16579cd0b9aSmillert  * Case 2: Declares that both PerlIO and stdio can be used
16679cd0b9aSmillert  */
16779cd0b9aSmillert #endif				/* if PERLIO_NOT_STDIO */
16879cd0b9aSmillert #else				/* ifdef PERLIO_NOT_STDIO */
16979cd0b9aSmillert /*
17079cd0b9aSmillert  * PERLIO_NOT_STDIO not defined
17179cd0b9aSmillert  * Case 3: Try and fake stdio calls as PerlIO calls
17279cd0b9aSmillert  */
17379cd0b9aSmillert #include "fakesdio.h"
17479cd0b9aSmillert #endif				/* ifndef PERLIO_NOT_STDIO */
17579cd0b9aSmillert #endif				/* PERLIO_IS_STDIO */
17679cd0b9aSmillert 
17779cd0b9aSmillert /* ----------- fill in things that have not got #define'd  ---------- */
17879cd0b9aSmillert 
17979cd0b9aSmillert #ifndef Fpos_t
18079cd0b9aSmillert #define Fpos_t Off_t
18179cd0b9aSmillert #endif
18279cd0b9aSmillert 
18379cd0b9aSmillert #ifndef EOF
18479cd0b9aSmillert #define EOF (-1)
18579cd0b9aSmillert #endif
18679cd0b9aSmillert 
18779cd0b9aSmillert /* This is to catch case with no stdio */
18879cd0b9aSmillert #ifndef BUFSIZ
18979cd0b9aSmillert #define BUFSIZ 1024
19079cd0b9aSmillert #endif
19179cd0b9aSmillert 
19279cd0b9aSmillert #ifndef SEEK_SET
19379cd0b9aSmillert #define SEEK_SET 0
19479cd0b9aSmillert #endif
19579cd0b9aSmillert 
19679cd0b9aSmillert #ifndef SEEK_CUR
19779cd0b9aSmillert #define SEEK_CUR 1
19879cd0b9aSmillert #endif
19979cd0b9aSmillert 
20079cd0b9aSmillert #ifndef SEEK_END
20179cd0b9aSmillert #define SEEK_END 2
20279cd0b9aSmillert #endif
20379cd0b9aSmillert 
20479cd0b9aSmillert #define PERLIO_DUP_CLONE	1
20579cd0b9aSmillert #define PERLIO_DUP_FD		2
20679cd0b9aSmillert 
20779cd0b9aSmillert /* --------------------- Now prototypes for functions --------------- */
20879cd0b9aSmillert 
20979cd0b9aSmillert START_EXTERN_C
210f64b279aSmillert #ifndef __attribute__format__
211ad15181aSmillert #  ifdef HASATTRIBUTE_FORMAT
212ad15181aSmillert #    define __attribute__format__(x,y,z) __attribute__((format(x,y,z)))
213f64b279aSmillert #  else
214f64b279aSmillert #    define __attribute__format__(x,y,z)
215f64b279aSmillert #  endif
216f64b279aSmillert #endif
21779cd0b9aSmillert #ifndef PerlIO_init
218ad15181aSmillert PERL_EXPORT_C void PerlIO_init(pTHX);
21979cd0b9aSmillert #endif
22079cd0b9aSmillert #ifndef PerlIO_stdoutf
221ad15181aSmillert PERL_EXPORT_C int PerlIO_stdoutf(const char *, ...)
222f64b279aSmillert     __attribute__format__(__printf__, 1, 2);
22379cd0b9aSmillert #endif
22479cd0b9aSmillert #ifndef PerlIO_puts
225ad15181aSmillert PERL_EXPORT_C int PerlIO_puts(PerlIO *, const char *);
22679cd0b9aSmillert #endif
22779cd0b9aSmillert #ifndef PerlIO_open
228ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_open(const char *, const char *);
22979cd0b9aSmillert #endif
23079cd0b9aSmillert #ifndef PerlIO_openn
231ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_openn(pTHX_ const char *layers, const char *mode,
23279cd0b9aSmillert 				   int fd, int imode, int perm, PerlIO *old,
23379cd0b9aSmillert 				   int narg, SV **arg);
23479cd0b9aSmillert #endif
23579cd0b9aSmillert #ifndef PerlIO_eof
236ad15181aSmillert PERL_EXPORT_C int PerlIO_eof(PerlIO *);
23779cd0b9aSmillert #endif
23879cd0b9aSmillert #ifndef PerlIO_error
239ad15181aSmillert PERL_EXPORT_C int PerlIO_error(PerlIO *);
24079cd0b9aSmillert #endif
24179cd0b9aSmillert #ifndef PerlIO_clearerr
242ad15181aSmillert PERL_EXPORT_C void PerlIO_clearerr(PerlIO *);
24379cd0b9aSmillert #endif
24479cd0b9aSmillert #ifndef PerlIO_getc
245ad15181aSmillert PERL_EXPORT_C int PerlIO_getc(PerlIO *);
24679cd0b9aSmillert #endif
24779cd0b9aSmillert #ifndef PerlIO_putc
248ad15181aSmillert PERL_EXPORT_C int PerlIO_putc(PerlIO *, int);
24979cd0b9aSmillert #endif
25079cd0b9aSmillert #ifndef PerlIO_ungetc
251ad15181aSmillert PERL_EXPORT_C int PerlIO_ungetc(PerlIO *, int);
25279cd0b9aSmillert #endif
25379cd0b9aSmillert #ifndef PerlIO_fdopen
254ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_fdopen(int, const char *);
25579cd0b9aSmillert #endif
25679cd0b9aSmillert #ifndef PerlIO_importFILE
257ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_importFILE(FILE *, const char *);
25879cd0b9aSmillert #endif
25979cd0b9aSmillert #ifndef PerlIO_exportFILE
260ad15181aSmillert PERL_EXPORT_C FILE *PerlIO_exportFILE(PerlIO *, const char *);
26179cd0b9aSmillert #endif
26279cd0b9aSmillert #ifndef PerlIO_findFILE
263ad15181aSmillert PERL_EXPORT_C FILE *PerlIO_findFILE(PerlIO *);
26479cd0b9aSmillert #endif
26579cd0b9aSmillert #ifndef PerlIO_releaseFILE
266ad15181aSmillert PERL_EXPORT_C void PerlIO_releaseFILE(PerlIO *, FILE *);
26779cd0b9aSmillert #endif
26879cd0b9aSmillert #ifndef PerlIO_read
269ad15181aSmillert PERL_EXPORT_C SSize_t PerlIO_read(PerlIO *, void *, Size_t);
27079cd0b9aSmillert #endif
27179cd0b9aSmillert #ifndef PerlIO_unread
272ad15181aSmillert PERL_EXPORT_C SSize_t PerlIO_unread(PerlIO *, const void *, Size_t);
27379cd0b9aSmillert #endif
27479cd0b9aSmillert #ifndef PerlIO_write
275ad15181aSmillert PERL_EXPORT_C SSize_t PerlIO_write(PerlIO *, const void *, Size_t);
27679cd0b9aSmillert #endif
27779cd0b9aSmillert #ifndef PerlIO_setlinebuf
278ad15181aSmillert PERL_EXPORT_C void PerlIO_setlinebuf(PerlIO *);
27979cd0b9aSmillert #endif
28079cd0b9aSmillert #ifndef PerlIO_printf
281ad15181aSmillert PERL_EXPORT_C int PerlIO_printf(PerlIO *, const char *, ...)
282f64b279aSmillert     __attribute__format__(__printf__, 2, 3);
28379cd0b9aSmillert #endif
28479cd0b9aSmillert #ifndef PerlIO_sprintf
285ad15181aSmillert PERL_EXPORT_C int PerlIO_sprintf(char *, int, const char *, ...)
286f64b279aSmillert     __attribute__format__(__printf__, 3, 4);
28779cd0b9aSmillert #endif
28879cd0b9aSmillert #ifndef PerlIO_vprintf
289ad15181aSmillert PERL_EXPORT_C int PerlIO_vprintf(PerlIO *, const char *, va_list);
29079cd0b9aSmillert #endif
29179cd0b9aSmillert #ifndef PerlIO_tell
292ad15181aSmillert PERL_EXPORT_C Off_t PerlIO_tell(PerlIO *);
29379cd0b9aSmillert #endif
29479cd0b9aSmillert #ifndef PerlIO_seek
295ad15181aSmillert PERL_EXPORT_C int PerlIO_seek(PerlIO *, Off_t, int);
29679cd0b9aSmillert #endif
29779cd0b9aSmillert #ifndef PerlIO_rewind
298ad15181aSmillert PERL_EXPORT_C void PerlIO_rewind(PerlIO *);
29979cd0b9aSmillert #endif
30079cd0b9aSmillert #ifndef PerlIO_has_base
301ad15181aSmillert PERL_EXPORT_C int PerlIO_has_base(PerlIO *);
30279cd0b9aSmillert #endif
30379cd0b9aSmillert #ifndef PerlIO_has_cntptr
304ad15181aSmillert PERL_EXPORT_C int PerlIO_has_cntptr(PerlIO *);
30579cd0b9aSmillert #endif
30679cd0b9aSmillert #ifndef PerlIO_fast_gets
307ad15181aSmillert PERL_EXPORT_C int PerlIO_fast_gets(PerlIO *);
30879cd0b9aSmillert #endif
30979cd0b9aSmillert #ifndef PerlIO_canset_cnt
310ad15181aSmillert PERL_EXPORT_C int PerlIO_canset_cnt(PerlIO *);
31179cd0b9aSmillert #endif
31279cd0b9aSmillert #ifndef PerlIO_get_ptr
313ad15181aSmillert PERL_EXPORT_C STDCHAR *PerlIO_get_ptr(PerlIO *);
31479cd0b9aSmillert #endif
31579cd0b9aSmillert #ifndef PerlIO_get_cnt
316ad15181aSmillert PERL_EXPORT_C int PerlIO_get_cnt(PerlIO *);
31779cd0b9aSmillert #endif
31879cd0b9aSmillert #ifndef PerlIO_set_cnt
319ad15181aSmillert PERL_EXPORT_C void PerlIO_set_cnt(PerlIO *, int);
32079cd0b9aSmillert #endif
32179cd0b9aSmillert #ifndef PerlIO_set_ptrcnt
322ad15181aSmillert PERL_EXPORT_C void PerlIO_set_ptrcnt(PerlIO *, STDCHAR *, int);
32379cd0b9aSmillert #endif
32479cd0b9aSmillert #ifndef PerlIO_get_base
325ad15181aSmillert PERL_EXPORT_C STDCHAR *PerlIO_get_base(PerlIO *);
32679cd0b9aSmillert #endif
32779cd0b9aSmillert #ifndef PerlIO_get_bufsiz
328ad15181aSmillert PERL_EXPORT_C int PerlIO_get_bufsiz(PerlIO *);
32979cd0b9aSmillert #endif
33079cd0b9aSmillert #ifndef PerlIO_tmpfile
331ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_tmpfile(void);
33279cd0b9aSmillert #endif
33379cd0b9aSmillert #ifndef PerlIO_stdin
334ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_stdin(void);
33579cd0b9aSmillert #endif
33679cd0b9aSmillert #ifndef PerlIO_stdout
337ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_stdout(void);
33879cd0b9aSmillert #endif
33979cd0b9aSmillert #ifndef PerlIO_stderr
340ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_stderr(void);
34179cd0b9aSmillert #endif
34279cd0b9aSmillert #ifndef PerlIO_getpos
343ad15181aSmillert PERL_EXPORT_C int PerlIO_getpos(PerlIO *, SV *);
34479cd0b9aSmillert #endif
34579cd0b9aSmillert #ifndef PerlIO_setpos
346ad15181aSmillert PERL_EXPORT_C int PerlIO_setpos(PerlIO *, SV *);
34779cd0b9aSmillert #endif
34879cd0b9aSmillert #ifndef PerlIO_fdupopen
349ad15181aSmillert PERL_EXPORT_C PerlIO *PerlIO_fdupopen(pTHX_ PerlIO *, CLONE_PARAMS *, int);
35079cd0b9aSmillert #endif
35179cd0b9aSmillert #if !defined(PerlIO_modestr) && !defined(PERLIO_IS_STDIO)
352ad15181aSmillert PERL_EXPORT_C char *PerlIO_modestr(PerlIO *, char *buf);
35379cd0b9aSmillert #endif
35479cd0b9aSmillert #ifndef PerlIO_isutf8
355ad15181aSmillert PERL_EXPORT_C int PerlIO_isutf8(PerlIO *);
35679cd0b9aSmillert #endif
35779cd0b9aSmillert #ifndef PerlIO_apply_layers
358ad15181aSmillert PERL_EXPORT_C int PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode,
35979cd0b9aSmillert 				      const char *names);
36079cd0b9aSmillert #endif
36179cd0b9aSmillert #ifndef PerlIO_binmode
362ad15181aSmillert PERL_EXPORT_C int PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int omode,
36379cd0b9aSmillert 			  	 const char *names);
36479cd0b9aSmillert #endif
36579cd0b9aSmillert #ifndef PerlIO_getname
366ad15181aSmillert PERL_EXPORT_C char *PerlIO_getname(PerlIO *, char *);
36779cd0b9aSmillert #endif
36879cd0b9aSmillert 
369ad15181aSmillert PERL_EXPORT_C void PerlIO_destruct(pTHX);
37079cd0b9aSmillert 
371ad15181aSmillert PERL_EXPORT_C int PerlIO_intmode2str(int rawmode, char *mode, int *writing);
37279cd0b9aSmillert 
37379cd0b9aSmillert #ifdef PERLIO_LAYERS
374ad15181aSmillert PERL_EXPORT_C void PerlIO_cleanup(pTHX);
37579cd0b9aSmillert 
376ad15181aSmillert PERL_EXPORT_C void PerlIO_debug(const char *fmt, ...)
377ad15181aSmillert     __attribute__format__(__printf__, 1, 2);
37879cd0b9aSmillert typedef struct PerlIO_list_s PerlIO_list_t;
37979cd0b9aSmillert 
38079cd0b9aSmillert 
38179cd0b9aSmillert #endif
38279cd0b9aSmillert 
38379cd0b9aSmillert END_EXTERN_C
38479cd0b9aSmillert #endif				/* _PERLIO_H */
385