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

Revision 14545, 9.2 KB checked in by ghudson, 24 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r14544, 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#ifdef STDIO_PTR_LVALUE
101#define PerlIO_fast_gets(f)             1       
102#endif
103#define PerlIO_set_cnt(f,c)             (FILE_cnt(f) = (c))         
104#else
105#define PerlIO_canset_cnt(f)            0     
106#define PerlIO_set_cnt(f,c)             abort()
107#endif
108
109#ifdef STDIO_PTR_LVALUE
110#define PerlIO_set_ptrcnt(f,p,c)        (FILE_ptr(f) = (p), PerlIO_set_cnt(f,c))         
111#else
112#define PerlIO_set_ptrcnt(f,p,c)        abort()
113#endif
114
115#else  /* USE_STDIO_PTR */
116
117#define PerlIO_has_cntptr(f)            0
118#define PerlIO_canset_cnt(f)            0
119#define PerlIO_get_cnt(f)               (abort(),0)
120#define PerlIO_get_ptr(f)               (abort(),(void *)0)
121#define PerlIO_set_cnt(f,c)             abort()
122#define PerlIO_set_ptrcnt(f,p,c)        abort()
123
124#endif /* USE_STDIO_PTR */
125
126#ifndef PerlIO_fast_gets
127#define PerlIO_fast_gets(f)             0       
128#endif
129
130
131#ifdef FILE_base
132#define PerlIO_has_base(f)              1         
133#define PerlIO_get_base(f)              FILE_base(f)         
134#define PerlIO_get_bufsiz(f)            FILE_bufsiz(f)       
135#else
136#define PerlIO_has_base(f)              0
137#define PerlIO_get_base(f)              (abort(),(void *)0)
138#define PerlIO_get_bufsiz(f)            (abort(),0)
139#endif
140#else /* PERLIO_IS_STDIO */
141#ifdef PERL_CORE
142#ifndef PERLIO_NOT_STDIO
143#define PERLIO_NOT_STDIO 1
144#endif
145#endif
146#ifdef PERLIO_NOT_STDIO
147#if PERLIO_NOT_STDIO
148/*
149 * Strong denial of stdio - make all stdio calls (we can think of) errors
150 */
151#include "nostdio.h"
152#undef fprintf
153#undef tmpfile
154#undef fclose
155#undef fopen
156#undef vfprintf
157#undef fgetc
158#undef fputc
159#undef fputs
160#undef ungetc
161#undef fread
162#undef fwrite
163#undef fgetpos
164#undef fseek
165#undef fsetpos
166#undef ftell
167#undef rewind
168#undef fdopen
169#undef popen
170#undef pclose
171#undef getw
172#undef putw
173#undef freopen
174#undef setbuf
175#undef setvbuf
176#undef fscanf
177#undef fgets
178#undef getc_unlocked
179#undef putc_unlocked
180#define fprintf    _CANNOT _fprintf_
181#define stdin      _CANNOT _stdin_
182#define stdout     _CANNOT _stdout_
183#define stderr     _CANNOT _stderr_
184#define tmpfile()  _CANNOT _tmpfile_
185#define fclose(f)  _CANNOT _fclose_
186#define fflush(f)  _CANNOT _fflush_
187#define fopen(p,m)  _CANNOT _fopen_
188#define freopen(p,m,f)  _CANNOT _freopen_
189#define setbuf(f,b)  _CANNOT _setbuf_
190#define setvbuf(f,b,x,s)  _CANNOT _setvbuf_
191#define fscanf  _CANNOT _fscanf_
192#define vfprintf(f,fmt,a)  _CANNOT _vfprintf_
193#define fgetc(f)  _CANNOT _fgetc_
194#define fgets(s,n,f)  _CANNOT _fgets_
195#define fputc(c,f)  _CANNOT _fputc_
196#define fputs(s,f)  _CANNOT _fputs_
197#define getc(f)  _CANNOT _getc_
198#define putc(c,f)  _CANNOT _putc_
199#define ungetc(c,f)  _CANNOT _ungetc_
200#define fread(b,s,c,f)  _CANNOT _fread_
201#define fwrite(b,s,c,f)  _CANNOT _fwrite_
202#define fgetpos(f,p)  _CANNOT _fgetpos_
203#define fseek(f,o,w)  _CANNOT _fseek_
204#define fsetpos(f,p)  _CANNOT _fsetpos_
205#define ftell(f)  _CANNOT _ftell_
206#define rewind(f)  _CANNOT _rewind_
207#define clearerr(f)  _CANNOT _clearerr_
208#define feof(f)  _CANNOT _feof_
209#define ferror(f)  _CANNOT _ferror_
210#define __filbuf(f)  _CANNOT __filbuf_
211#define __flsbuf(c,f)  _CANNOT __flsbuf_
212#define _filbuf(f)  _CANNOT _filbuf_
213#define _flsbuf(c,f)  _CANNOT _flsbuf_
214#define fdopen(fd,p)  _CANNOT _fdopen_
215#define fileno(f)  _CANNOT _fileno_
216#define flockfile(f)  _CANNOT _flockfile_
217#define ftrylockfile(f)  _CANNOT _ftrylockfile_
218#define funlockfile(f)  _CANNOT _funlockfile_
219#define getc_unlocked(f)  _CANNOT _getc_unlocked_
220#define putc_unlocked(c,f)  _CANNOT _putc_unlocked_
221#define popen(c,m)  _CANNOT _popen_
222#define getw(f)  _CANNOT _getw_
223#define putw(v,f)  _CANNOT _putw_
224#define pclose(f)  _CANNOT _pclose_
225
226#else /* if PERLIO_NOT_STDIO */
227/*
228 * PERLIO_NOT_STDIO defined as 0
229 * Declares that both PerlIO and stdio can be used
230 */
231#endif /* if PERLIO_NOT_STDIO */
232#else  /* ifdef PERLIO_NOT_STDIO */
233/*
234 * PERLIO_NOT_STDIO not defined
235 * This is "source level" stdio compatibility mode.
236 */
237#include "nostdio.h"
238#undef FILE
239#define FILE                    PerlIO
240#undef fprintf
241#undef tmpfile
242#undef fclose
243#undef fopen
244#undef vfprintf
245#undef fgetc
246#undef getc_unlocked
247#undef fputc
248#undef putc_unlocked
249#undef fputs
250#undef ungetc
251#undef fread
252#undef fwrite
253#undef fgetpos
254#undef fseek
255#undef fsetpos
256#undef ftell
257#undef rewind
258#undef fdopen
259#undef popen
260#undef pclose
261#undef getw
262#undef putw
263#undef freopen
264#undef setbuf
265#undef setvbuf
266#undef fscanf
267#undef fgets
268#define fprintf                 PerlIO_printf
269#define stdin                   PerlIO_stdin()
270#define stdout                  PerlIO_stdout()
271#define stderr                  PerlIO_stderr()
272#define tmpfile()               PerlIO_tmpfile()
273#define fclose(f)               PerlIO_close(f)
274#define fflush(f)               PerlIO_flush(f)
275#define fopen(p,m)              PerlIO_open(p,m)
276#define vfprintf(f,fmt,a)       PerlIO_vprintf(f,fmt,a)
277#define fgetc(f)                PerlIO_getc(f)
278#define fputc(c,f)              PerlIO_putc(f,c)
279#define fputs(s,f)              PerlIO_puts(f,s)
280#define getc(f)                 PerlIO_getc(f)
281#ifdef getc_unlocked
282#undef getc_unlocked
283#endif
284#define getc_unlocked(f)        PerlIO_getc(f)
285#define putc(c,f)               PerlIO_putc(f,c)
286#ifdef putc_unlocked
287#undef putc_unlocked
288#endif
289#define putc_unlocked(c,f)      PerlIO_putc(c,f)
290#define ungetc(c,f)             PerlIO_ungetc(f,c)
291#if 0
292/* return values of read/write need work */
293#define fread(b,s,c,f)          PerlIO_read(f,b,(s*c))
294#define fwrite(b,s,c,f)         PerlIO_write(f,b,(s*c))
295#else
296#define fread(b,s,c,f)          _CANNOT fread
297#define fwrite(b,s,c,f)         _CANNOT fwrite
298#endif
299#define fgetpos(f,p)            PerlIO_getpos(f,p)
300#define fseek(f,o,w)            PerlIO_seek(f,o,w)
301#define fsetpos(f,p)            PerlIO_setpos(f,p)
302#define ftell(f)                PerlIO_tell(f)
303#define rewind(f)               PerlIO_rewind(f)
304#define clearerr(f)             PerlIO_clearerr(f)
305#define feof(f)                 PerlIO_eof(f)
306#define ferror(f)               PerlIO_error(f)
307#define fdopen(fd,p)            PerlIO_fdopen(fd,p)
308#define fileno(f)               PerlIO_fileno(f)
309#define popen(c,m)              my_popen(c,m)
310#define pclose(f)               my_pclose(f)
311
312#define __filbuf(f)             _CANNOT __filbuf_
313#define _filbuf(f)              _CANNOT _filbuf_
314#define __flsbuf(c,f)           _CANNOT __flsbuf_
315#define _flsbuf(c,f)            _CANNOT _flsbuf_
316#define getw(f)                 _CANNOT _getw_
317#define putw(v,f)               _CANNOT _putw_
318#define flockfile(f)            _CANNOT _flockfile_
319#define ftrylockfile(f)         _CANNOT _ftrylockfile_
320#define funlockfile(f)          _CANNOT _funlockfile_
321#define freopen(p,m,f)          _CANNOT _freopen_
322#define setbuf(f,b)             _CANNOT _setbuf_
323#define setvbuf(f,b,x,s)        _CANNOT _setvbuf_
324#define fscanf                  _CANNOT _fscanf_
325#define fgets(s,n,f)            _CANNOT _fgets_
326
327#endif /* ifdef PERLIO_NOT_STDIO */
328#endif /* PERLIO_IS_STDIO */
Note: See TracBrowser for help on using the repository browser.