source: trunk/third/perl/perlsdio.h @ 17035

Revision 17035, 9.7 KB checked in by zacheiss, 22 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r17034, which included commits to RCS files with non-trunk default branches.
Line 
1/*
2 * Although we may not want stdio to be used including <stdio.h> here
3 * avoids issues where stdio.h has strange side effects
4 */
5#include <stdio.h>
6
7#ifdef PERLIO_IS_STDIO
8/*
9 * Make this as close to original stdio as possible.
10 */
11#define PerlIO                          FILE
12#define PerlIO_stderr()                 stderr
13#define PerlIO_stdout()                 stdout
14#define PerlIO_stdin()                  stdin
15
16#define PerlIO_printf                   fprintf
17#define PerlIO_stdoutf                  printf
18#define PerlIO_vprintf(f,fmt,a)         vfprintf(f,fmt,a)         
19#define PerlIO_write(f,buf,count)       fwrite1(buf,1,count,f)
20#define PerlIO_open                     fopen
21#define PerlIO_fdopen                   fdopen
22#define PerlIO_reopen           freopen
23#define PerlIO_close(f)                 fclose(f)
24#define PerlIO_puts(f,s)                fputs(s,f)
25#define PerlIO_putc(f,c)                fputc(c,f)
26#if defined(VMS)
27#  if defined(__DECC)
28     /* Unusual definition of ungetc() here to accomodate fast_sv_gets()'
29      * belief that it can mix getc/ungetc with reads from stdio buffer */
30     int decc$ungetc(int __c, FILE *__stream);
31#    define PerlIO_ungetc(f,c) ((c) == EOF ? EOF : \
32            ((*(f) && !((*(f))->_flag & _IONBF) && \
33            ((*(f))->_ptr > (*(f))->_base)) ? \
34            ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f)))
35#  else
36#    define PerlIO_ungetc(f,c)          ungetc(c,f)
37#  endif
38   /* Work around bug in DECCRTL/AXP (DECC v5.x) and some versions of old
39    * VAXCRTL which causes read from a pipe after EOF has been returned
40    * once to hang.
41    */
42#  define PerlIO_getc(f) \
43                (feof(f) ? EOF : getc(f))
44#  define PerlIO_read(f,buf,count) \
45                (feof(f) ? 0 : (SSize_t)fread(buf,1,count,f))
46#else
47#  define PerlIO_ungetc(f,c)            ungetc(c,f)
48#  define PerlIO_getc(f)                getc(f)
49#  define PerlIO_read(f,buf,count)      (SSize_t)fread(buf,1,count,f)
50#endif
51#define PerlIO_eof(f)                   feof(f)
52#define PerlIO_getname(f,b)             fgetname(f,b)
53#define PerlIO_error(f)                 ferror(f)
54#define PerlIO_fileno(f)                fileno(f)
55#define PerlIO_clearerr(f)              clearerr(f)
56#define PerlIO_flush(f)                 Fflush(f)
57#define PerlIO_tell(f)                  ftell(f)
58#if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64)
59#define ftell ftello
60#endif
61#if defined(VMS) && !defined(__DECC)
62   /* Old VAXC RTL doesn't reset EOF on seek; Perl folk seem to expect this */
63#  define PerlIO_seek(f,o,w)    (((f) && (*f) && ((*f)->_flag &= ~_IOEOF)),fseek(f,o,w))
64#else
65#  define PerlIO_seek(f,o,w)            fseek(f,o,w)
66#endif
67#if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64)
68#define fseek fseeko
69#endif
70#ifdef HAS_FGETPOS
71#define PerlIO_getpos(f,p)              fgetpos(f,p)
72#endif
73#ifdef HAS_FSETPOS
74#define PerlIO_setpos(f,p)              fsetpos(f,p)
75#endif
76
77#define PerlIO_rewind(f)                rewind(f)
78#define PerlIO_tmpfile()                tmpfile()
79
80#define PerlIO_importFILE(f,fl)         (f)           
81#define PerlIO_exportFILE(f,fl)         (f)           
82#define PerlIO_findFILE(f)              (f)           
83#define PerlIO_releaseFILE(p,f)         ((void) 0)           
84
85#ifdef HAS_SETLINEBUF
86#define PerlIO_setlinebuf(f)            setlinebuf(f);
87#else
88#define PerlIO_setlinebuf(f)            setvbuf(f, Nullch, _IOLBF, 0);
89#endif
90
91/* Now our interface to Configure's FILE_xxx macros */
92
93#ifdef USE_STDIO_PTR
94#define PerlIO_has_cntptr(f)            1       
95#define PerlIO_get_ptr(f)               FILE_ptr(f)         
96#define PerlIO_get_cnt(f)               FILE_cnt(f)         
97
98#ifdef STDIO_CNT_LVALUE
99#define PerlIO_canset_cnt(f)            1     
100#define PerlIO_set_cnt(f,c)             (FILE_cnt(f) = (c))         
101#ifdef STDIO_PTR_LVALUE
102#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
103#define PerlIO_fast_gets(f)             1       
104#endif
105#endif /* STDIO_PTR_LVALUE */
106#else /* STDIO_CNT_LVALUE */
107#define PerlIO_canset_cnt(f)            0     
108#define PerlIO_set_cnt(f,c)             abort()
109#endif
110
111#ifdef STDIO_PTR_LVALUE
112#ifdef STDIO_PTR_LVAL_NOCHANGE_CNT
113#define PerlIO_set_ptrcnt(f,p,c)      STMT_START {FILE_ptr(f) = (p), PerlIO_set_cnt(f,c);} STMT_END
114#else
115#ifdef STDIO_PTR_LVAL_SETS_CNT
116/* assert() may pre-process to ""; potential syntax error (FILE_ptr(), ) */
117#define PerlIO_set_ptrcnt(f,p,c)      STMT_START {FILE_ptr(f) = (p); assert(FILE_cnt(f) == (c));} STMT_END
118#define PerlIO_fast_gets(f)             1       
119#else
120#define PerlIO_set_ptrcnt(f,p,c)        abort()
121#endif
122#endif
123#endif
124
125#else  /* USE_STDIO_PTR */
126
127#define PerlIO_has_cntptr(f)            0
128#define PerlIO_canset_cnt(f)            0
129#define PerlIO_get_cnt(f)               (abort(),0)
130#define PerlIO_get_ptr(f)               (abort(),(void *)0)
131#define PerlIO_set_cnt(f,c)             abort()
132#define PerlIO_set_ptrcnt(f,p,c)        abort()
133
134#endif /* USE_STDIO_PTR */
135
136#ifndef PerlIO_fast_gets
137#define PerlIO_fast_gets(f)             0       
138#endif
139
140
141#ifdef FILE_base
142#define PerlIO_has_base(f)              1         
143#define PerlIO_get_base(f)              FILE_base(f)         
144#define PerlIO_get_bufsiz(f)            FILE_bufsiz(f)       
145#else
146#define PerlIO_has_base(f)              0
147#define PerlIO_get_base(f)              (abort(),(void *)0)
148#define PerlIO_get_bufsiz(f)            (abort(),0)
149#endif
150#else /* PERLIO_IS_STDIO */
151#ifdef PERL_CORE
152#ifndef PERLIO_NOT_STDIO
153#define PERLIO_NOT_STDIO 1
154#endif
155#endif
156#ifdef PERLIO_NOT_STDIO
157#if PERLIO_NOT_STDIO
158/*
159 * Strong denial of stdio - make all stdio calls (we can think of) errors
160 */
161#include "nostdio.h"
162#undef fprintf
163#undef tmpfile
164#undef fclose
165#undef fopen
166#undef vfprintf
167#undef fgetc
168#undef fputc
169#undef fputs
170#undef ungetc
171#undef fread
172#undef fwrite
173#undef fgetpos
174#undef fseek
175#undef fsetpos
176#undef ftell
177#undef rewind
178#undef fdopen
179#undef popen
180#undef pclose
181#undef getw
182#undef putw
183#undef freopen
184#undef setbuf
185#undef setvbuf
186#undef fscanf
187#undef fgets
188#undef getc_unlocked
189#undef putc_unlocked
190#define fprintf    _CANNOT _fprintf_
191#define stdin      _CANNOT _stdin_
192#define stdout     _CANNOT _stdout_
193#define stderr     _CANNOT _stderr_
194#define tmpfile()  _CANNOT _tmpfile_
195#define fclose(f)  _CANNOT _fclose_
196#define fflush(f)  _CANNOT _fflush_
197#define fopen(p,m)  _CANNOT _fopen_
198#define freopen(p,m,f)  _CANNOT _freopen_
199#define setbuf(f,b)  _CANNOT _setbuf_
200#define setvbuf(f,b,x,s)  _CANNOT _setvbuf_
201#define fscanf  _CANNOT _fscanf_
202#define vfprintf(f,fmt,a)  _CANNOT _vfprintf_
203#define fgetc(f)  _CANNOT _fgetc_
204#define fgets(s,n,f)  _CANNOT _fgets_
205#define fputc(c,f)  _CANNOT _fputc_
206#define fputs(s,f)  _CANNOT _fputs_
207#define getc(f)  _CANNOT _getc_
208#define putc(c,f)  _CANNOT _putc_
209#define ungetc(c,f)  _CANNOT _ungetc_
210#define fread(b,s,c,f)  _CANNOT _fread_
211#define fwrite(b,s,c,f)  _CANNOT _fwrite_
212#define fgetpos(f,p)  _CANNOT _fgetpos_
213#define fseek(f,o,w)  _CANNOT _fseek_
214#define fsetpos(f,p)  _CANNOT _fsetpos_
215#define ftell(f)  _CANNOT _ftell_
216#define rewind(f)  _CANNOT _rewind_
217#define clearerr(f)  _CANNOT _clearerr_
218#define feof(f)  _CANNOT _feof_
219#define ferror(f)  _CANNOT _ferror_
220#define __filbuf(f)  _CANNOT __filbuf_
221#define __flsbuf(c,f)  _CANNOT __flsbuf_
222#define _filbuf(f)  _CANNOT _filbuf_
223#define _flsbuf(c,f)  _CANNOT _flsbuf_
224#define fdopen(fd,p)  _CANNOT _fdopen_
225#define fileno(f)  _CANNOT _fileno_
226#if SFIO_VERSION < 20000101L
227#define flockfile(f)  _CANNOT _flockfile_
228#define ftrylockfile(f)  _CANNOT _ftrylockfile_
229#define funlockfile(f)  _CANNOT _funlockfile_
230#endif
231#define getc_unlocked(f)  _CANNOT _getc_unlocked_
232#define putc_unlocked(c,f)  _CANNOT _putc_unlocked_
233#define popen(c,m)  _CANNOT _popen_
234#define getw(f)  _CANNOT _getw_
235#define putw(v,f)  _CANNOT _putw_
236#define pclose(f)  _CANNOT _pclose_
237
238#else /* if PERLIO_NOT_STDIO */
239/*
240 * PERLIO_NOT_STDIO defined as 0
241 * Declares that both PerlIO and stdio can be used
242 */
243#endif /* if PERLIO_NOT_STDIO */
244#else  /* ifdef PERLIO_NOT_STDIO */
245/*
246 * PERLIO_NOT_STDIO not defined
247 * This is "source level" stdio compatibility mode.
248 */
249#include "nostdio.h"
250#undef FILE
251#define FILE                    PerlIO
252#undef fprintf
253#undef tmpfile
254#undef fclose
255#undef fopen
256#undef vfprintf
257#undef fgetc
258#undef getc_unlocked
259#undef fputc
260#undef putc_unlocked
261#undef fputs
262#undef ungetc
263#undef fread
264#undef fwrite
265#undef fgetpos
266#undef fseek
267#undef fsetpos
268#undef ftell
269#undef rewind
270#undef fdopen
271#undef popen
272#undef pclose
273#undef getw
274#undef putw
275#undef freopen
276#undef setbuf
277#undef setvbuf
278#undef fscanf
279#undef fgets
280#define fprintf                 PerlIO_printf
281#define stdin                   PerlIO_stdin()
282#define stdout                  PerlIO_stdout()
283#define stderr                  PerlIO_stderr()
284#define tmpfile()               PerlIO_tmpfile()
285#define fclose(f)               PerlIO_close(f)
286#define fflush(f)               PerlIO_flush(f)
287#define fopen(p,m)              PerlIO_open(p,m)
288#define vfprintf(f,fmt,a)       PerlIO_vprintf(f,fmt,a)
289#define fgetc(f)                PerlIO_getc(f)
290#define fputc(c,f)              PerlIO_putc(f,c)
291#define fputs(s,f)              PerlIO_puts(f,s)
292#define getc(f)                 PerlIO_getc(f)
293#ifdef getc_unlocked
294#undef getc_unlocked
295#endif
296#define getc_unlocked(f)        PerlIO_getc(f)
297#define putc(c,f)               PerlIO_putc(f,c)
298#ifdef putc_unlocked
299#undef putc_unlocked
300#endif
301#define putc_unlocked(c,f)      PerlIO_putc(c,f)
302#define ungetc(c,f)             PerlIO_ungetc(f,c)
303#if 0
304/* return values of read/write need work */
305#define fread(b,s,c,f)          PerlIO_read(f,b,(s*c))
306#define fwrite(b,s,c,f)         PerlIO_write(f,b,(s*c))
307#else
308#define fread(b,s,c,f)          _CANNOT fread
309#define fwrite(b,s,c,f)         _CANNOT fwrite
310#endif
311#define fgetpos(f,p)            PerlIO_getpos(f,p)
312#define fseek(f,o,w)            PerlIO_seek(f,o,w)
313#define fsetpos(f,p)            PerlIO_setpos(f,p)
314#define ftell(f)                PerlIO_tell(f)
315#define rewind(f)               PerlIO_rewind(f)
316#define clearerr(f)             PerlIO_clearerr(f)
317#define feof(f)                 PerlIO_eof(f)
318#define ferror(f)               PerlIO_error(f)
319#define fdopen(fd,p)            PerlIO_fdopen(fd,p)
320#define fileno(f)               PerlIO_fileno(f)
321#define popen(c,m)              my_popen(c,m)
322#define pclose(f)               my_pclose(f)
323
324#define __filbuf(f)             _CANNOT __filbuf_
325#define _filbuf(f)              _CANNOT _filbuf_
326#define __flsbuf(c,f)           _CANNOT __flsbuf_
327#define _flsbuf(c,f)            _CANNOT _flsbuf_
328#define getw(f)                 _CANNOT _getw_
329#define putw(v,f)               _CANNOT _putw_
330#if SFIO_VERSION < 20000101L
331#define flockfile(f)            _CANNOT _flockfile_
332#define ftrylockfile(f)         _CANNOT _ftrylockfile_
333#define funlockfile(f)          _CANNOT _funlockfile_
334#endif
335#define freopen(p,m,f)          _CANNOT _freopen_
336#define setbuf(f,b)             _CANNOT _setbuf_
337#define setvbuf(f,b,x,s)        _CANNOT _setvbuf_
338#define fscanf                  _CANNOT _fscanf_
339#define fgets(s,n,f)            _CANNOT _fgets_
340
341#endif /* ifdef PERLIO_NOT_STDIO */
342#endif /* PERLIO_IS_STDIO */
Note: See TracBrowser for help on using the repository browser.