[win32] set $ENV{PERL5LIB} in t/harness (so child perlglob.bat sees it)
[p5sagit/p5-mst-13.2.git] / perlsdio.h
index ff32cdd..5a15a71 100644 (file)
@@ -16,7 +16,6 @@
 #define PerlIO_printf                  fprintf
 #define PerlIO_stdoutf                 printf
 #define PerlIO_vprintf(f,fmt,a)                vfprintf(f,fmt,a)          
-#define PerlIO_read(f,buf,count)       fread(buf,1,count,f)
 #define PerlIO_write(f,buf,count)      fwrite1(buf,1,count,f)
 #define PerlIO_open                    fopen
 #define PerlIO_fdopen                  fdopen
 #define PerlIO_close(f)                        fclose(f)
 #define PerlIO_puts(f,s)               fputs(s,f)
 #define PerlIO_putc(f,c)               fputc(c,f)
-#define PerlIO_ungetc(f,c)             ungetc(c,f)
-#define PerlIO_getc(f)                 getc(f)
+#if defined(VMS)
+#  if defined(__DECC)
+     /* Unusual definition of ungetc() here to accomodate fast_sv_gets()'
+      * belief that it can mix getc/ungetc with reads from stdio buffer */
+     int decc$ungetc(int __c, FILE *__stream);
+#    define PerlIO_ungetc(f,c) ((c) == EOF ? EOF : \
+            ((*(f) && !((*(f))->_flag & _IONBF) && \
+            ((*(f))->_ptr > (*(f))->_base)) ? \
+            ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f)))
+#  else
+#    define PerlIO_ungetc(f,c)         ungetc(c,f)
+#  endif
+   /* Work around bug in DECCRTL/AXP (DECC v5.x) and some versions of old
+    * VAXCRTL which causes read from a pipe after EOF has been returned
+    * once to hang.
+    */
+#  define PerlIO_getc(f) \
+               (feof(f) ? EOF : getc(f))
+#  define PerlIO_read(f,buf,count) \
+               (feof(f) ? 0 : (SSize_t)fread(buf,1,count,f))
+#else
+#  define PerlIO_ungetc(f,c)           ungetc(c,f)
+#  define PerlIO_getc(f)               getc(f)
+#  define PerlIO_read(f,buf,count)     (SSize_t)fread(buf,1,count,f)
+#endif
 #define PerlIO_eof(f)                  feof(f)
 #define PerlIO_getname(f,b)            fgetname(f,b)
 #define PerlIO_error(f)                        ferror(f)
 #define PerlIO_has_cntptr(f)           0
 #define PerlIO_canset_cnt(f)           0
 #define PerlIO_get_cnt(f)              (abort(),0)
-#define PerlIO_get_ptr(f)              (abort(),0)
+#define PerlIO_get_ptr(f)              (abort(),(void *)0)
 #define PerlIO_set_cnt(f,c)            abort()
 #define PerlIO_set_ptrcnt(f,p,c)       abort()
 
 #define PerlIO_get_bufsiz(f)           FILE_bufsiz(f)       
 #else
 #define PerlIO_has_base(f)             0
-#define PerlIO_get_base(f)             (abort(),0)
+#define PerlIO_get_base(f)             (abort(),(void *)0)
 #define PerlIO_get_bufsiz(f)           (abort(),0)
 #endif
 #else /* PERLIO_IS_STDIO */
 #undef setvbuf
 #undef fscanf
 #undef fgets
+#undef getc_unlocked
+#undef putc_unlocked
 #define fprintf    _CANNOT _fprintf_
 #define stdin      _CANNOT _stdin_
 #define stdout     _CANNOT _stdout_