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

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