3 * Copyright (c) 1996, 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.
13 #define PERLIO_NOT_STDIO 0
14 #if !defined(PERLIO_IS_STDIO) && !defined(USE_SFIO)
18 * This file provides those parts of PerlIO abstraction
19 * which are not #defined in perlio.h.
20 * Which these are depends on various Configure #ifdef's
26 #ifdef PERLIO_IS_STDIO
31 /* Does nothing (yet) except force this file to be included
32 in perl binary. That allows this file to force inclusion
33 of other functions that may be required by loadable
34 extensions e.g. for FileHandle::tmpfile
45 #else /* PERLIO_IS_STDIO */
52 /* This section is just to make sure these functions
53 get pulled in from libsfio.a
66 /* Force this file to be included in perl binary. Which allows
67 * this file to force inclusion of other functions that may be
68 * required by loadable extensions e.g. for FileHandle::tmpfile
72 * sfio does its own 'autoflush' on stdout in common cases.
73 * Flush results in a lot of lseek()s to regular files and
74 * lot of small writes to pipes.
76 sfset(sfstdout,SF_SHARE,0);
81 /* Implement all the PerlIO interface using stdio.
82 - this should be only file to include <stdio.h>
89 return (PerlIO *) stderr;
96 return (PerlIO *) stdin;
103 return (PerlIO *) stdout;
106 #ifdef HAS_SETLINEBUF
107 extern void setlinebuf _((FILE *iop));
110 #undef PerlIO_fast_gets
115 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
122 #undef PerlIO_has_cntptr
127 #if defined(USE_STDIO_PTR)
134 #undef PerlIO_canset_cnt
139 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
146 #undef PerlIO_set_cnt
148 PerlIO_set_cnt(f,cnt)
153 warn("Setting cnt to %d\n",cnt);
154 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
157 croak("Cannot set 'cnt' of FILE * on this system");
161 #undef PerlIO_set_ptrcnt
163 PerlIO_set_ptrcnt(f,ptr,cnt)
169 char *e = (char *)(FILE_base(f) + FILE_bufsiz(f));
172 warn("Setting ptr %p > base %p\n",ptr, FILE_base(f)+FILE_bufsiz(f));
174 warn("Setting cnt to %d, ptr implies %d\n",cnt,ec);
176 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE)
177 FILE_ptr(f) = (STDCHAR *) ptr;
179 croak("Cannot set 'ptr' of FILE * on this system");
181 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
184 croak("Cannot set 'cnt' of FILE * on this system");
188 #undef PerlIO_get_cnt
196 croak("Cannot get 'cnt' of FILE * on this system");
201 #undef PerlIO_get_bufsiz
207 return FILE_bufsiz(f);
209 croak("Cannot get 'bufsiz' of FILE * on this system");
214 #undef PerlIO_get_ptr
220 return (char *) FILE_ptr(f);
222 croak("Cannot get 'ptr' of FILE * on this system");
227 #undef PerlIO_get_base
233 return (char *) FILE_base(f);
235 croak("Cannot get 'base' of FILE * on this system");
240 #undef PerlIO_has_base
263 PerlIO_open(path,mode)
267 return fopen(path,mode);
272 PerlIO_fdopen(fd,mode)
276 return fdopen(fd,mode);
312 #undef PerlIO_clearerr
336 #undef PerlIO_setlinebuf
341 #ifdef HAS_SETLINEBUF
344 setvbuf(f, Nullch, _IOLBF, 0);
368 PerlIO_read(f,buf,count)
373 return fread(buf,1,count,f);
378 PerlIO_write(f,buf,count)
383 return fwrite1(buf,1,count,f);
386 #undef PerlIO_vprintf
388 PerlIO_vprintf(f,fmt,ap)
393 return vfprintf(f,fmt,ap);
407 PerlIO_seek(f,offset,whence)
412 return fseek(f,offset,whence);
426 PerlIO_printf(PerlIO *f,const char *fmt,...)
428 PerlIO_printf(f,fmt,va_alist)
441 result = vfprintf(f,fmt,ap);
446 #undef PerlIO_stdoutf
449 PerlIO_stdoutf(const char *fmt,...)
451 PerlIO_stdoutf(fmt, va_alist)
463 result = PerlIO_vprintf(PerlIO_stdout(),fmt,ap);
468 #undef PerlIO_tmpfile
475 #undef PerlIO_importFILE
477 PerlIO_importFILE(f,fl)
484 #undef PerlIO_exportFILE
486 PerlIO_exportFILE(f,fl)
493 #undef PerlIO_findFILE
501 #undef PerlIO_releaseFILE
503 PerlIO_releaseFILE(p,f)
512 /* Does nothing (yet) except force this file to be included
513 in perl binary. That allows this file to force inclusion
514 of other functions that may be required by loadable
515 extensions e.g. for FileHandle::tmpfile
519 #endif /* USE_SFIO */
520 #endif /* PERLIO_IS_STDIO */
529 return PerlIO_seek(f,*pos,0);
540 *pos = PerlIO_tell(f);
545 #if (defined(PERLIO_IS_STDIO) || !defined(USE_SFIO)) && !defined(HAS_VPRINTF)
548 vprintf(fd, pat, args)
552 _doprnt(pat, args, fd);
553 return 0; /* wrong, but perl doesn't use the return value */
558 #ifndef PerlIO_vsprintf
560 PerlIO_vsprintf(s,n,fmt,ap)
566 int val = vsprintf(s, fmt, ap);
571 PerlIO_puts(PerlIO_stderr(),"panic: sprintf overflow - memory corrupted!\n");
579 #ifndef PerlIO_sprintf
582 PerlIO_sprintf(char *s, int n, const char *fmt,...)
584 PerlIO_sprintf(s, n, fmt, va_alist)
598 result = PerlIO_vsprintf(s, n, fmt, ap);