* that can be #defined to the system-level function (or a wrapper
* provided elsewhere).
*
- * When using C++ with -DPERL_OBJECT, this definition is in the
- * form of a set of virtual base classes which must be subclassed to
- * provide a real implementation. The Perl Object will use instances
- * of this implementation to use the system-level functionality.
- *
* GSAR 21-JUN-98
*/
#define PerlSIO_ferror(f) ferror(f)
#define PerlSIO_clearerr(f) clearerr(f)
#define PerlSIO_fgetc(f) fgetc(f)
-#if PerlSIO_has_base
+#ifdef FILE_base
#define PerlSIO_get_base(f) FILE_base(f)
#define PerlSIO_get_bufsiz(f) FILE_bufsiz(f)
#else
#define PerlSIO_fputs(f,s) fputs(s,f)
#define PerlSIO_fflush(f) Fflush(f)
#define PerlSIO_fgets(s, n, fp) fgets(s,n,fp)
-#define PerlSIO_ungetc(c,f) ungetc(c,f)
+#if defined(VMS) && 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 PerlSIO_ungetc(c,f) ((c) == EOF ? EOF : \
+ ((*(f) && !((*(f))->_flag & _IONBF) && \
+ ((*(f))->_ptr > (*(f))->_base)) ? \
+ ((*(f))->_cnt++, *(--(*(f))->_ptr) = (c)) : decc$ungetc(c,f)))
+#else
+# define PerlSIO_ungetc(c,f) ungetc(c,f)
+#endif
#define PerlSIO_fileno(f) fileno(f)
#define PerlSIO_fdopen(f, s) fdopen(f,s)
#define PerlSIO_freopen(p, m, f) freopen(p,m,f)
#define PerlDir_mkdir(name, mode) Mkdir((name), (mode))
#ifdef VMS
-# define PerlDir_chdir(n) Chdir(((n) && *(n)) ? (n) : "SYS$LOGIN")
+# define PerlDir_chdir(n) Chdir((n))
#else
# define PerlDir_chdir(name) chdir((name))
#endif
typedef int (*LPLIORead)(struct IPerlLIO*, int, void*, unsigned int);
typedef int (*LPLIORename)(struct IPerlLIO*, const char*,
const char*);
+#ifdef NETWARE
+typedef int (*LPLIOSetmode)(struct IPerlLIO*, FILE*, int);
+#else
typedef int (*LPLIOSetmode)(struct IPerlLIO*, int, int);
+#endif /* NETWARE */
typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*,
struct stat*);
typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*);
typedef int (*LPProcPauseProc)(struct IPerlProc*);
typedef PerlIO* (*LPProcPopen)(struct IPerlProc*, const char*,
const char*);
+typedef PerlIO* (*LPProcPopenList)(struct IPerlProc*, const char*,
+ IV narg, SV **args);
typedef int (*LPProcPclose)(struct IPerlProc*, PerlIO*);
typedef int (*LPProcPipe)(struct IPerlProc*, int*);
typedef int (*LPProcSetuid)(struct IPerlProc*, uid_t);
LPProcASpawn pASpawn;
#endif
LPProcLastHost pLastHost;
+ LPProcPopenList pPopenList;
};
struct IPerlProcInfo
#define PerlProc_setjmp(b, n) Sigsetjmp((b), (n))
#define PerlProc_longjmp(b, n) Siglongjmp((b), (n))
#define PerlProc_signal(n, h) signal((n), (h))
-#define PerlProc_fork() fork()
+#define PerlProc_fork() my_fork()
#define PerlProc_getpid() getpid()
#ifdef WIN32