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)
146 if (cnt < -1 && ckWARN_s(WARN_INTERNAL))
147 Perl_warner(aTHX_ WARN_INTERNAL, "Setting cnt to %d\n",cnt);
148 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
151 Perl_croak(aTHX_ "Cannot set 'cnt' of FILE * on this system");
155 #undef PerlIO_set_ptrcnt
157 PerlIO_set_ptrcnt(PerlIO *f, STDCHAR *ptr, int cnt)
160 STDCHAR *e = FILE_base(f) + FILE_bufsiz(f);
162 if (ptr > e + 1 && ckWARN_s(WARN_INTERNAL))
163 Perl_warner(aTHX_ WARN_INTERNAL, "Setting ptr %p > end+1 %p\n", ptr, e + 1);
164 if (cnt != ec && ckWARN_s(WARN_INTERNAL))
165 Perl_warner(aTHX_ WARN_INTERNAL, "Setting cnt to %d, ptr implies %d\n",cnt,ec);
167 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE)
170 Perl_croak(aTHX_ "Cannot set 'ptr' of FILE * on this system");
172 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
175 Perl_croak(aTHX_ "Cannot set 'cnt' of FILE * on this system");
179 #undef PerlIO_get_cnt
181 PerlIO_get_cnt(PerlIO *f)
186 Perl_croak(aTHX_ "Cannot get 'cnt' of FILE * on this system");
191 #undef PerlIO_get_bufsiz
193 PerlIO_get_bufsiz(PerlIO *f)
196 return FILE_bufsiz(f);
198 Perl_croak(aTHX_ "Cannot get 'bufsiz' of FILE * on this system");
203 #undef PerlIO_get_ptr
205 PerlIO_get_ptr(PerlIO *f)
210 Perl_croak(aTHX_ "Cannot get 'ptr' of FILE * on this system");
215 #undef PerlIO_get_base
217 PerlIO_get_base(PerlIO *f)
222 Perl_croak(aTHX_ "Cannot get 'base' of FILE * on this system");
227 #undef PerlIO_has_base
229 PerlIO_has_base(PerlIO *f)
240 PerlIO_puts(PerlIO *f, const char *s)
247 PerlIO_open(const char *path, const char *mode)
249 return fopen(path,mode);
254 PerlIO_fdopen(int fd, const char *mode)
256 return fdopen(fd,mode);
261 PerlIO_reopen(const char *name, const char *mode, PerlIO *f)
263 return freopen(name,mode,f);
268 PerlIO_close(PerlIO *f)
275 PerlIO_eof(PerlIO *f)
280 #undef PerlIO_getname
282 PerlIO_getname(PerlIO *f, char *buf)
285 return fgetname(f,buf);
287 Perl_croak(aTHX_ "Don't know how to get file name");
294 PerlIO_getc(PerlIO *f)
301 PerlIO_error(PerlIO *f)
306 #undef PerlIO_clearerr
308 PerlIO_clearerr(PerlIO *f)
315 PerlIO_flush(PerlIO *f)
322 PerlIO_fileno(PerlIO *f)
327 #undef PerlIO_setlinebuf
329 PerlIO_setlinebuf(PerlIO *f)
331 #ifdef HAS_SETLINEBUF
334 # ifdef __BORLANDC__ /* Borland doesn't like NULL size for _IOLBF */
335 setvbuf(f, Nullch, _IOLBF, BUFSIZ);
337 setvbuf(f, Nullch, _IOLBF, 0);
344 PerlIO_putc(PerlIO *f, int ch)
351 PerlIO_ungetc(PerlIO *f, int ch)
358 PerlIO_read(PerlIO *f, void *buf, Size_t count)
360 return fread(buf,1,count,f);
365 PerlIO_write(PerlIO *f, const void *buf, Size_t count)
367 return fwrite1(buf,1,count,f);
370 #undef PerlIO_vprintf
372 PerlIO_vprintf(PerlIO *f, const char *fmt, va_list ap)
374 return vfprintf(f,fmt,ap);
379 PerlIO_tell(PerlIO *f)
390 PerlIO_seek(PerlIO *f, Off_t offset, int whence)
393 return fseeko(f,offset,whence);
395 return fseek(f,offset,whence);
401 PerlIO_rewind(PerlIO *f)
408 PerlIO_printf(PerlIO *f,const char *fmt,...)
413 result = vfprintf(f,fmt,ap);
418 #undef PerlIO_stdoutf
420 PerlIO_stdoutf(const char *fmt,...)
425 result = PerlIO_vprintf(PerlIO_stdout(),fmt,ap);
430 #undef PerlIO_tmpfile
437 #undef PerlIO_importFILE
439 PerlIO_importFILE(FILE *f, int fl)
444 #undef PerlIO_exportFILE
446 PerlIO_exportFILE(PerlIO *f, int fl)
451 #undef PerlIO_findFILE
453 PerlIO_findFILE(PerlIO *f)
458 #undef PerlIO_releaseFILE
460 PerlIO_releaseFILE(PerlIO *p, FILE *f)
467 /* Does nothing (yet) except force this file to be included
468 in perl binary. That allows this file to force inclusion
469 of other functions that may be required by loadable
470 extensions e.g. for FileHandle::tmpfile
474 #endif /* USE_SFIO */
475 #endif /* PERLIO_IS_STDIO */
480 PerlIO_setpos(PerlIO *f, const Fpos_t *pos)
482 return PerlIO_seek(f,*pos,0);
485 #ifndef PERLIO_IS_STDIO
488 PerlIO_setpos(PerlIO *f, const Fpos_t *pos)
490 return fsetpos(f, pos);
498 PerlIO_getpos(PerlIO *f, Fpos_t *pos)
500 *pos = PerlIO_tell(f);
504 #ifndef PERLIO_IS_STDIO
507 PerlIO_getpos(PerlIO *f, Fpos_t *pos)
509 return fgetpos(f, pos);
514 #if (defined(PERLIO_IS_STDIO) || !defined(USE_SFIO)) && !defined(HAS_VPRINTF)
517 vprintf(char *pat, char *args)
519 _doprnt(pat, args, stdout);
520 return 0; /* wrong, but perl doesn't use the return value */
524 vfprintf(FILE *fd, char *pat, char *args)
526 _doprnt(pat, args, fd);
527 return 0; /* wrong, but perl doesn't use the return value */
532 #ifndef PerlIO_vsprintf
534 PerlIO_vsprintf(char *s, int n, const char *fmt, va_list ap)
536 int val = vsprintf(s, fmt, ap);
539 if (strlen(s) >= (STRLEN)n)
541 PerlIO_puts(PerlIO_stderr(),"panic: sprintf overflow - memory corrupted!\n");
552 #ifndef PerlIO_sprintf
554 PerlIO_sprintf(char *s, int n, const char *fmt,...)
559 result = PerlIO_vsprintf(s, n, fmt, ap);
565 #endif /* !PERL_IMPLICIT_SYS */