3 * Copyright (c) 1996-1999, Nick Ing-Simmons
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.
10 #if !defined(PERL_IMPLICIT_SYS)
15 #define PERLIO_NOT_STDIO 0
16 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
20 * This file provides those parts of PerlIO abstraction
21 * which are not #defined in iperlsys.h.
22 * Which these are depends on various Configure #ifdef's
26 #define PERL_IN_PERLIO_C
29 #ifdef PERLIO_IS_STDIO
34 /* Does nothing (yet) except force this file to be included
35 in perl binary. That allows this file to force inclusion
36 of other functions that may be required by loadable
37 extensions e.g. for FileHandle::tmpfile
48 #else /* PERLIO_IS_STDIO */
55 /* This section is just to make sure these functions
56 get pulled in from libsfio.a
69 /* Force this file to be included in perl binary. Which allows
70 * this file to force inclusion of other functions that may be
71 * required by loadable extensions e.g. for FileHandle::tmpfile
75 * sfio does its own 'autoflush' on stdout in common cases.
76 * Flush results in a lot of lseek()s to regular files and
77 * lot of small writes to pipes.
79 sfset(sfstdout,SF_SHARE,0);
84 /* Implement all the PerlIO interface using stdio.
85 - this should be only file to include <stdio.h>
92 return (PerlIO *) stderr;
99 return (PerlIO *) stdin;
106 return (PerlIO *) stdout;
109 #undef PerlIO_fast_gets
111 PerlIO_fast_gets(PerlIO *f)
113 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
120 #undef PerlIO_has_cntptr
122 PerlIO_has_cntptr(PerlIO *f)
124 #if defined(USE_STDIO_PTR)
131 #undef PerlIO_canset_cnt
133 PerlIO_canset_cnt(PerlIO *f)
135 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
142 #undef PerlIO_set_cnt
144 PerlIO_set_cnt(PerlIO *f, int cnt)
147 if (cnt < -1 && ckWARN_d(WARN_INTERNAL))
148 Perl_warner(aTHX_ WARN_INTERNAL, "Setting cnt to %d\n",cnt);
149 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
152 Perl_croak(aTHX_ "Cannot set 'cnt' of FILE * on this system");
156 #undef PerlIO_set_ptrcnt
158 PerlIO_set_ptrcnt(PerlIO *f, STDCHAR *ptr, int cnt)
162 STDCHAR *e = FILE_base(f) + FILE_bufsiz(f);
164 if (ptr > e + 1 && ckWARN_d(WARN_INTERNAL))
165 Perl_warner(aTHX_ WARN_INTERNAL, "Setting ptr %p > end+1 %p\n", ptr, e + 1);
166 if (cnt != ec && ckWARN_d(WARN_INTERNAL))
167 Perl_warner(aTHX_ WARN_INTERNAL, "Setting cnt to %d, ptr implies %d\n",cnt,ec);
169 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE)
172 Perl_croak(aTHX_ "Cannot set 'ptr' of FILE * on this system");
174 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
177 Perl_croak(aTHX_ "Cannot set 'cnt' of FILE * on this system");
181 #undef PerlIO_get_cnt
183 PerlIO_get_cnt(PerlIO *f)
189 Perl_croak(aTHX_ "Cannot get 'cnt' of FILE * on this system");
194 #undef PerlIO_get_bufsiz
196 PerlIO_get_bufsiz(PerlIO *f)
199 return FILE_bufsiz(f);
202 Perl_croak(aTHX_ "Cannot get 'bufsiz' of FILE * on this system");
207 #undef PerlIO_get_ptr
209 PerlIO_get_ptr(PerlIO *f)
215 Perl_croak(aTHX_ "Cannot get 'ptr' of FILE * on this system");
220 #undef PerlIO_get_base
222 PerlIO_get_base(PerlIO *f)
228 Perl_croak(aTHX_ "Cannot get 'base' of FILE * on this system");
233 #undef PerlIO_has_base
235 PerlIO_has_base(PerlIO *f)
246 PerlIO_puts(PerlIO *f, const char *s)
253 PerlIO_open(const char *path, const char *mode)
255 return fopen(path,mode);
260 PerlIO_fdopen(int fd, const char *mode)
262 return fdopen(fd,mode);
267 PerlIO_reopen(const char *name, const char *mode, PerlIO *f)
269 return freopen(name,mode,f);
274 PerlIO_close(PerlIO *f)
281 PerlIO_eof(PerlIO *f)
286 #undef PerlIO_getname
288 PerlIO_getname(PerlIO *f, char *buf)
291 return fgetname(f,buf);
294 Perl_croak(aTHX_ "Don't know how to get file name");
301 PerlIO_getc(PerlIO *f)
308 PerlIO_error(PerlIO *f)
313 #undef PerlIO_clearerr
315 PerlIO_clearerr(PerlIO *f)
322 PerlIO_flush(PerlIO *f)
329 PerlIO_fileno(PerlIO *f)
334 #undef PerlIO_setlinebuf
336 PerlIO_setlinebuf(PerlIO *f)
338 #ifdef HAS_SETLINEBUF
341 # ifdef __BORLANDC__ /* Borland doesn't like NULL size for _IOLBF */
342 setvbuf(f, Nullch, _IOLBF, BUFSIZ);
344 setvbuf(f, Nullch, _IOLBF, 0);
351 PerlIO_putc(PerlIO *f, int ch)
358 PerlIO_ungetc(PerlIO *f, int ch)
365 PerlIO_read(PerlIO *f, void *buf, Size_t count)
367 return fread(buf,1,count,f);
372 PerlIO_write(PerlIO *f, const void *buf, Size_t count)
374 return fwrite1(buf,1,count,f);
377 #undef PerlIO_vprintf
379 PerlIO_vprintf(PerlIO *f, const char *fmt, va_list ap)
381 return vfprintf(f,fmt,ap);
386 PerlIO_tell(PerlIO *f)
388 #if defined(USE_64_BIT_STDIO) && defined(HAS_FTELLO) && !defined(USE_FTELL64)
397 PerlIO_seek(PerlIO *f, Off_t offset, int whence)
399 #if defined(USE_64_BIT_STDIO) && defined(HAS_FSEEKO) && !defined(USE_FSEEK64)
400 return fseeko(f,offset,whence);
402 return fseek(f,offset,whence);
408 PerlIO_rewind(PerlIO *f)
415 PerlIO_printf(PerlIO *f,const char *fmt,...)
420 result = vfprintf(f,fmt,ap);
425 #undef PerlIO_stdoutf
427 PerlIO_stdoutf(const char *fmt,...)
432 result = PerlIO_vprintf(PerlIO_stdout(),fmt,ap);
437 #undef PerlIO_tmpfile
444 #undef PerlIO_importFILE
446 PerlIO_importFILE(FILE *f, int fl)
451 #undef PerlIO_exportFILE
453 PerlIO_exportFILE(PerlIO *f, int fl)
458 #undef PerlIO_findFILE
460 PerlIO_findFILE(PerlIO *f)
465 #undef PerlIO_releaseFILE
467 PerlIO_releaseFILE(PerlIO *p, FILE *f)
474 /* Does nothing (yet) except force this file to be included
475 in perl binary. That allows this file to force inclusion
476 of other functions that may be required by loadable
477 extensions e.g. for FileHandle::tmpfile
481 #endif /* USE_SFIO */
482 #endif /* PERLIO_IS_STDIO */
487 PerlIO_setpos(PerlIO *f, const Fpos_t *pos)
489 return PerlIO_seek(f,*pos,0);
492 #ifndef PERLIO_IS_STDIO
495 PerlIO_setpos(PerlIO *f, const Fpos_t *pos)
497 #if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64)
498 return fsetpos64(f, pos);
500 return fsetpos(f, pos);
509 PerlIO_getpos(PerlIO *f, Fpos_t *pos)
511 *pos = PerlIO_tell(f);
515 #ifndef PERLIO_IS_STDIO
518 PerlIO_getpos(PerlIO *f, Fpos_t *pos)
520 #if defined(USE_64_BIT_STDIO) && defined(USE_FSETPOS64)
521 return fgetpos64(f, pos);
523 return fgetpos(f, pos);
529 #if (defined(PERLIO_IS_STDIO) || !defined(USE_SFIO)) && !defined(HAS_VPRINTF)
532 vprintf(char *pat, char *args)
534 _doprnt(pat, args, stdout);
535 return 0; /* wrong, but perl doesn't use the return value */
539 vfprintf(FILE *fd, char *pat, char *args)
541 _doprnt(pat, args, fd);
542 return 0; /* wrong, but perl doesn't use the return value */
547 #ifndef PerlIO_vsprintf
549 PerlIO_vsprintf(char *s, int n, const char *fmt, va_list ap)
551 int val = vsprintf(s, fmt, ap);
554 if (strlen(s) >= (STRLEN)n)
557 PerlIO_puts(Perl_error_log,"panic: sprintf overflow - memory corrupted!\n");
565 #ifndef PerlIO_sprintf
567 PerlIO_sprintf(char *s, int n, const char *fmt,...)
572 result = PerlIO_vsprintf(s, n, fmt, ap);
578 #endif /* !PERL_IMPLICIT_SYS */