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
38 #else /* PERLIO_IS_STDIO */
45 /* This section is just to make sure these functions
46 get pulled in from libsfio.a
59 /* Force this file to be included in perl binary. Which allows
60 * this file to force inclusion of other functions that may be
61 * required by loadable extensions e.g. for FileHandle::tmpfile
65 * sfio does its own 'autoflush' on stdout in common cases.
66 * Flush results in a lot of lseek()s to regular files and
67 * lot of small writes to pipes.
69 sfset(sfstdout,SF_SHARE,0);
74 /* Implement all the PerlIO interface using stdio.
75 - this should be only file to include <stdio.h>
82 return (PerlIO *) stderr;
89 return (PerlIO *) stdin;
96 return (PerlIO *) stdout;
100 extern void setlinebuf _((FILE *iop));
103 #undef PerlIO_fast_gets
108 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) && defined(STDIO_CNT_LVALUE)
115 #undef PerlIO_has_cntptr
120 #if defined(USE_STDIO_PTR)
127 #undef PerlIO_canset_cnt
132 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
139 #undef PerlIO_set_cnt
141 PerlIO_set_cnt(f,cnt)
146 warn("Setting cnt to %d\n",cnt);
147 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
150 croak("Cannot set 'cnt' of FILE * on this system");
154 #undef PerlIO_set_ptrcnt
156 PerlIO_set_ptrcnt(f,ptr,cnt)
161 char *e = (char *)(FILE_base(f) + FILE_bufsiz(f));
164 warn("Setting ptr %p > base %p\n",ptr, FILE_base(f)+FILE_bufsiz(f));
166 warn("Setting cnt to %d, ptr implies %d\n",cnt,ec);
167 #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE)
168 FILE_ptr(f) = (STDCHAR *) ptr;
170 croak("Cannot set 'ptr' of FILE * on this system");
172 #if defined(USE_STDIO_PTR) && defined(STDIO_CNT_LVALUE)
175 croak("Cannot set 'cnt' of FILE * on this system");
179 #undef PerlIO_get_cnt
187 croak("Cannot get 'cnt' of FILE * on this system");
192 #undef PerlIO_get_bufsiz
198 return FILE_bufsiz(f);
200 croak("Cannot get 'bufsiz' of FILE * on this system");
205 #undef PerlIO_get_ptr
211 return (char *) FILE_ptr(f);
213 croak("Cannot get 'ptr' of FILE * on this system");
218 #undef PerlIO_get_base
224 return (char *) FILE_base(f);
226 croak("Cannot get 'base' of FILE * on this system");
231 #undef PerlIO_has_base
254 PerlIO_open(path,mode)
258 return fopen(path,mode);
263 PerlIO_fdopen(fd,mode)
267 return fdopen(fd,mode);
303 #undef PerlIO_clearerr
327 #undef PerlIO_setlinebuf
332 #ifdef HAS_SETLINEBUF
335 setvbuf(f, Nullch, _IOLBF, 0);
359 PerlIO_read(f,buf,count)
364 return fread(buf,1,count,f);
369 PerlIO_write(f,buf,count)
374 return fwrite1(buf,1,count,f);
377 #undef PerlIO_vprintf
379 PerlIO_vprintf(f,fmt,ap)
384 return vfprintf(f,fmt,ap);
398 PerlIO_seek(f,offset,whence)
403 return fseek(f,offset,whence);
417 PerlIO_printf(PerlIO *f,const char *fmt,...)
419 PerlIO_printf(f,fmt,va_alist)
432 result = vfprintf(f,fmt,ap);
437 #undef PerlIO_stdoutf
440 PerlIO_stdoutf(const char *fmt,...)
442 PerlIO_stdoutf(fmt, va_alist)
454 result = PerlIO_vprintf(PerlIO_stdout(),fmt,ap);
459 #undef PerlIO_tmpfile
466 #undef PerlIO_importFILE
468 PerlIO_importFILE(f,fl)
475 #undef PerlIO_exportFILE
477 PerlIO_exportFILE(f,fl)
484 #undef PerlIO_findFILE
492 #undef PerlIO_releaseFILE
494 PerlIO_releaseFILE(p,f)
503 /* Does nothing (yet) except force this file to be included
504 in perl binary. That allows this file to force inclusion
505 of other functions that may be required by loadable
506 extensions e.g. for FileHandle::tmpfile
510 #endif /* USE_SFIO */
511 #endif /* PERLIO_IS_STDIO */
520 return PerlIO_seek(f,*pos,0);
531 *pos = PerlIO_tell(f);
536 #if (defined(PERLIO_IS_STDIO) || !defined(USE_SFIO)) && !defined(HAS_VPRINTF)
539 vprintf(fd, pat, args)
543 _doprnt(pat, args, fd);
544 return 0; /* wrong, but perl doesn't use the return value */
549 #ifndef PerlIO_vsprintf
551 PerlIO_vsprintf(s,n,fmt,ap)
557 int val = vsprintf(s, fmt, ap);
562 PerlIO_puts(PerlIO_stderr(),"panic: sprintf overflow - memory corrupted!\n");
570 #ifndef PerlIO_sprintf
573 PerlIO_sprintf(char *s, int n, const char *fmt,...)
575 PerlIO_sprintf(s, n, fmt, va_alist)
589 result = PerlIO_vsprintf(s, n, fmt, ap);