source: trunk/third/perl/perlio.h @ 18450

Revision 18450, 9.5 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18449, which included commits to RCS files with non-trunk default branches.
Line 
1/*    perlio.h
2 *
3 *    Copyright (c) 1997-2002, Larry Wall
4 *
5 *    You may distribute under the terms of either the GNU General Public
6 *    License or the Artistic License, as specified in the README file.
7 *
8 */
9
10#ifndef _PERLIO_H
11#define _PERLIO_H
12/*
13  Interface for perl to IO functions.
14  There is a hierachy of Configure determined #define controls:
15   USE_STDIO   - forces PerlIO_xxx() to be #define-d onto stdio functions.
16                 This is used for x2p subdirectory and for conservative
17                 builds - "just like perl5.00X used to be".
18                 This dominates over the others.
19
20   USE_PERLIO  - The primary Configure variable that enables PerlIO.
21                 If USE_PERLIO is _NOT_ set
22                   then USE_STDIO above will be set to be conservative.
23                 If USE_PERLIO is set
24                   then there are two modes determined by USE_SFIO:
25
26   USE_SFIO    - If set causes PerlIO_xxx() to be #define-d onto sfio functions.
27                 A backward compatability mode for some specialist applications.
28
29                 If USE_SFIO is not set then PerlIO_xxx() are real functions
30                 defined in perlio.c which implement extra functionality
31                 required for utf8 support.
32
33   One further note - the table-of-functions scheme controlled
34   by PERL_IMPLICIT_SYS turns on USE_PERLIO so that iperlsys.h can
35   #define PerlIO_xxx() to go via the function table, without having
36   to #undef them from (say) stdio forms.
37
38*/
39
40#if defined(PERL_IMPLICIT_SYS)
41#ifndef USE_PERLIO
42#ifndef NETWARE
43/* # define USE_PERLIO */
44#endif
45#endif
46#endif
47
48#ifndef USE_PERLIO
49# define USE_STDIO
50#endif
51
52#ifdef USE_STDIO
53#  ifndef PERLIO_IS_STDIO
54#      define PERLIO_IS_STDIO
55#  endif
56#endif
57
58/* --------------------  End of Configure controls ---------------------------- */
59
60/*
61 * Although we may not want stdio to be used including <stdio.h> here
62 * avoids issues where stdio.h has strange side effects
63 */
64#include <stdio.h>
65
66#ifdef __BEOS__
67int fseeko(FILE *stream, off_t offset, int whence);
68off_t ftello(FILE *stream);
69#endif
70
71#if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64)
72#define ftell ftello
73#endif
74
75#if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64)
76#define fseek fseeko
77#endif
78
79/* BS2000 includes are sometimes a bit non standard :-( */
80#if defined(POSIX_BC) && defined(O_BINARY) && !defined(O_TEXT)
81#undef O_BINARY
82#endif
83
84#ifdef PERLIO_IS_STDIO
85/* #define PerlIO_xxxx() as equivalent stdio function */
86#include "perlsdio.h"
87#else                           /* PERLIO_IS_STDIO */
88#ifdef USE_SFIO
89/* #define PerlIO_xxxx() as equivalent sfio function */
90#include "perlsfio.h"
91#endif                          /* USE_SFIO */
92#endif                          /* PERLIO_IS_STDIO */
93
94#ifndef PerlIO
95/* ----------- PerlIO implementation ---------- */
96/* PerlIO not #define-d to something else - define the implementation */
97
98typedef struct _PerlIO PerlIOl;
99typedef struct _PerlIO_funcs PerlIO_funcs;
100typedef PerlIOl *PerlIO;
101#define PerlIO PerlIO
102#define PERLIO_LAYERS 1
103
104extern void PerlIO_define_layer(pTHX_ PerlIO_funcs *tab);
105extern PerlIO_funcs *PerlIO_find_layer(pTHX_ const char *name, STRLEN len,
106                                       int load);
107extern PerlIO *PerlIO_push(pTHX_ PerlIO *f, PerlIO_funcs *tab,
108                           const char *mode, SV *arg);
109extern void PerlIO_pop(pTHX_ PerlIO *f);
110extern void PerlIO_clone(pTHX_ PerlInterpreter *proto, CLONE_PARAMS *param);
111
112#endif                          /* PerlIO */
113
114/* ----------- End of implementation choices  ---------- */
115
116#ifndef PERLIO_IS_STDIO
117/* Not using stdio _directly_ as PerlIO */
118
119/* We now need to determine  what happens if source trys to use stdio.
120 * There are three cases based on PERLIO_NOT_STDIO which XS code
121 * can set how it wants.
122 */
123
124#ifdef PERL_CORE
125/* Make a choice for perl core code
126   - currently this is set to try and catch lingering raw stdio calls.
127     This is a known issue with some non UNIX ports which still use
128     "native" stdio features.
129*/
130#ifndef PERLIO_NOT_STDIO
131#define PERLIO_NOT_STDIO 1
132#endif
133#else
134#ifndef PERLIO_NOT_STDIO
135#define PERLIO_NOT_STDIO 0
136#endif
137#endif
138
139#ifdef PERLIO_NOT_STDIO
140#if PERLIO_NOT_STDIO
141/*
142 * PERLIO_NOT_STDIO #define'd as 1
143 * Case 1: Strong denial of stdio - make all stdio calls (we can think of) errors
144 */
145#include "nostdio.h"
146#else                           /* if PERLIO_NOT_STDIO */
147/*
148 * PERLIO_NOT_STDIO #define'd as 0
149 * Case 2: Declares that both PerlIO and stdio can be used
150 */
151#endif                          /* if PERLIO_NOT_STDIO */
152#else                           /* ifdef PERLIO_NOT_STDIO */
153/*
154 * PERLIO_NOT_STDIO not defined
155 * Case 3: Try and fake stdio calls as PerlIO calls
156 */
157#include "fakesdio.h"
158#endif                          /* ifndef PERLIO_NOT_STDIO */
159#endif                          /* PERLIO_IS_STDIO */
160
161#define specialCopIO(sv) ((sv) == Nullsv)
162
163/* ----------- fill in things that have not got #define'd  ---------- */
164
165#ifndef Fpos_t
166#define Fpos_t Off_t
167#endif
168
169#ifndef EOF
170#define EOF (-1)
171#endif
172
173/* This is to catch case with no stdio */
174#ifndef BUFSIZ
175#define BUFSIZ 1024
176#endif
177
178#ifndef SEEK_SET
179#define SEEK_SET 0
180#endif
181
182#ifndef SEEK_CUR
183#define SEEK_CUR 1
184#endif
185
186#ifndef SEEK_END
187#define SEEK_END 2
188#endif
189
190#define PERLIO_DUP_CLONE        1
191#define PERLIO_DUP_FD           2
192
193/* --------------------- Now prototypes for functions --------------- */
194
195START_EXTERN_C
196#ifndef NEXT30_NO_ATTRIBUTE
197#ifndef HASATTRIBUTE            /* disable GNU-cc attribute checking? */
198#ifdef  __attribute__           /* Avoid possible redefinition errors */
199#undef  __attribute__
200#endif
201#define __attribute__(attr)
202#endif
203#endif
204#ifndef PerlIO_init
205extern void PerlIO_init(pTHX);
206#endif
207#ifndef PerlIO_stdoutf
208extern int PerlIO_stdoutf(const char *, ...)
209    __attribute__ ((__format__(__printf__, 1, 2)));
210#endif
211#ifndef PerlIO_puts
212extern int PerlIO_puts(PerlIO *, const char *);
213#endif
214#ifndef PerlIO_open
215extern PerlIO *PerlIO_open(const char *, const char *);
216#endif
217#ifndef PerlIO_openn
218extern PerlIO *PerlIO_openn(pTHX_ const char *layers, const char *mode,
219                            int fd, int imode, int perm, PerlIO *old,
220                            int narg, SV **arg);
221#endif
222#ifndef PerlIO_eof
223extern int PerlIO_eof(PerlIO *);
224#endif
225#ifndef PerlIO_error
226extern int PerlIO_error(PerlIO *);
227#endif
228#ifndef PerlIO_clearerr
229extern void PerlIO_clearerr(PerlIO *);
230#endif
231#ifndef PerlIO_getc
232extern int PerlIO_getc(PerlIO *);
233#endif
234#ifndef PerlIO_putc
235extern int PerlIO_putc(PerlIO *, int);
236#endif
237#ifndef PerlIO_ungetc
238extern int PerlIO_ungetc(PerlIO *, int);
239#endif
240#ifndef PerlIO_fdopen
241extern PerlIO *PerlIO_fdopen(int, const char *);
242#endif
243#ifndef PerlIO_importFILE
244extern PerlIO *PerlIO_importFILE(FILE *, const char *);
245#endif
246#ifndef PerlIO_exportFILE
247extern FILE *PerlIO_exportFILE(PerlIO *, const char *);
248#endif
249#ifndef PerlIO_findFILE
250extern FILE *PerlIO_findFILE(PerlIO *);
251#endif
252#ifndef PerlIO_releaseFILE
253extern void PerlIO_releaseFILE(PerlIO *, FILE *);
254#endif
255#ifndef PerlIO_read
256extern SSize_t PerlIO_read(PerlIO *, void *, Size_t);
257#endif
258#ifndef PerlIO_unread
259extern SSize_t PerlIO_unread(PerlIO *, const void *, Size_t);
260#endif
261#ifndef PerlIO_write
262extern SSize_t PerlIO_write(PerlIO *, const void *, Size_t);
263#endif
264#ifndef PerlIO_setlinebuf
265extern void PerlIO_setlinebuf(PerlIO *);
266#endif
267#ifndef PerlIO_printf
268extern int PerlIO_printf(PerlIO *, const char *, ...)
269    __attribute__ ((__format__(__printf__, 2, 3)));
270#endif
271#ifndef PerlIO_sprintf
272extern int PerlIO_sprintf(char *, int, const char *, ...)
273    __attribute__ ((__format__(__printf__, 3, 4)));
274#endif
275#ifndef PerlIO_vprintf
276extern int PerlIO_vprintf(PerlIO *, const char *, va_list);
277#endif
278#ifndef PerlIO_tell
279extern Off_t PerlIO_tell(PerlIO *);
280#endif
281#ifndef PerlIO_seek
282extern int PerlIO_seek(PerlIO *, Off_t, int);
283#endif
284#ifndef PerlIO_rewind
285extern void PerlIO_rewind(PerlIO *);
286#endif
287#ifndef PerlIO_has_base
288extern int PerlIO_has_base(PerlIO *);
289#endif
290#ifndef PerlIO_has_cntptr
291extern int PerlIO_has_cntptr(PerlIO *);
292#endif
293#ifndef PerlIO_fast_gets
294extern int PerlIO_fast_gets(PerlIO *);
295#endif
296#ifndef PerlIO_canset_cnt
297extern int PerlIO_canset_cnt(PerlIO *);
298#endif
299#ifndef PerlIO_get_ptr
300extern STDCHAR *PerlIO_get_ptr(PerlIO *);
301#endif
302#ifndef PerlIO_get_cnt
303extern int PerlIO_get_cnt(PerlIO *);
304#endif
305#ifndef PerlIO_set_cnt
306extern void PerlIO_set_cnt(PerlIO *, int);
307#endif
308#ifndef PerlIO_set_ptrcnt
309extern void PerlIO_set_ptrcnt(PerlIO *, STDCHAR *, int);
310#endif
311#ifndef PerlIO_get_base
312extern STDCHAR *PerlIO_get_base(PerlIO *);
313#endif
314#ifndef PerlIO_get_bufsiz
315extern int PerlIO_get_bufsiz(PerlIO *);
316#endif
317#ifndef PerlIO_tmpfile
318extern PerlIO *PerlIO_tmpfile(void);
319#endif
320#ifndef PerlIO_stdin
321extern PerlIO *PerlIO_stdin(void);
322#endif
323#ifndef PerlIO_stdout
324extern PerlIO *PerlIO_stdout(void);
325#endif
326#ifndef PerlIO_stderr
327extern PerlIO *PerlIO_stderr(void);
328#endif
329#ifndef PerlIO_getpos
330extern int PerlIO_getpos(PerlIO *, SV *);
331#endif
332#ifndef PerlIO_setpos
333extern int PerlIO_setpos(PerlIO *, SV *);
334#endif
335#ifndef PerlIO_fdupopen
336extern PerlIO *PerlIO_fdupopen(pTHX_ PerlIO *, CLONE_PARAMS *, int);
337#endif
338#if !defined(PerlIO_modestr) && !defined(PERLIO_IS_STDIO)
339extern char *PerlIO_modestr(PerlIO *, char *buf);
340#endif
341#ifndef PerlIO_isutf8
342extern int PerlIO_isutf8(PerlIO *);
343#endif
344#ifndef PerlIO_apply_layers
345extern int PerlIO_apply_layers(pTHX_ PerlIO *f, const char *mode,
346                               const char *names);
347#endif
348#ifndef PerlIO_binmode
349extern int PerlIO_binmode(pTHX_ PerlIO *f, int iotype, int omode,
350                          const char *names);
351#endif
352#ifndef PerlIO_getname
353extern char *PerlIO_getname(PerlIO *, char *);
354#endif
355
356extern void PerlIO_destruct(pTHX);
357
358extern int PerlIO_intmode2str(int rawmode, char *mode, int *writing);
359
360#ifdef PERLIO_LAYERS
361extern void PerlIO_cleanup(pTHX);
362
363extern void PerlIO_debug(const char *fmt, ...);
364typedef struct PerlIO_list_s PerlIO_list_t;
365
366
367#endif
368
369END_EXTERN_C
370#endif                          /* _PERLIO_H */
Note: See TracBrowser for help on using the repository browser.