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 */ 329