This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Socket::sockaddr_family
[perl5.git] / iperlsys.h
index 66d2b8e..97a9a70 100644 (file)
@@ -7,11 +7,6 @@
  * 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
  */
 
@@ -251,8 +246,8 @@ struct IPerlStdIOInfo
 #define PerlSIO_setlinebuf(f)                                          \
        (*PL_StdIO->pSetlinebuf)(PL_StdIO, (f))
 #define PerlSIO_printf         Perl_fprintf_nocontext
-#define PerlSIO_stdoutf                *PL_StdIO->pPrintf
-#define PerlSIO_vprintf(f,fmt,a)                                       \
+#define PerlSIO_stdoutf                Perl_printf_nocontext
+#define PerlSIO_vprintf(f,fmt,a)                                               \
        (*PL_StdIO->pVprintf)(PL_StdIO, (f),(fmt),a)
 #define PerlSIO_ftell(f)                                                       \
        (*PL_StdIO->pTell)(PL_StdIO, (f))
@@ -285,7 +280,7 @@ struct IPerlStdIOInfo
 #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
@@ -303,7 +298,17 @@ struct IPerlStdIOInfo
 #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)
@@ -410,7 +415,7 @@ struct IPerlDirInfo
 
 #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
@@ -537,11 +542,6 @@ struct IPerlEnvInfo
 #define PerlEnv_putenv(str)            putenv((str))
 #define PerlEnv_getenv(str)            getenv((str))
 #define PerlEnv_getenv_len(str,l)      getenv_len((str), (l))
-#define PerlEnv_clearenv()             clearenv()
-#define PerlEnv_get_childenv()         get_childenv()
-#define PerlEnv_free_childenv(e)       free_childenv((e))
-#define PerlEnv_get_childdir()         get_childdir()
-#define PerlEnv_free_childdir(d)       free_childdir((d))
 #ifdef HAS_ENVGETENV
 #  define PerlEnv_ENVgetenv(str)       ENVgetenv((str))
 #  define PerlEnv_ENVgetenv_len(str,l) ENVgetenv_len((str), (l))
@@ -557,6 +557,17 @@ struct IPerlEnvInfo
 #define PerlEnv_sitelib_path(str)      win32_get_sitelib(str)
 #define PerlEnv_vendorlib_path(str)    win32_get_vendorlib(str)
 #define PerlEnv_get_child_IO(ptr)      win32_get_child_IO(ptr)
+#define PerlEnv_clearenv()             win32_clearenv()
+#define PerlEnv_get_childenv()         win32_get_childenv()
+#define PerlEnv_free_childenv(e)       win32_free_childenv((e))
+#define PerlEnv_get_childdir()         win32_get_childdir()
+#define PerlEnv_free_childdir(d)       win32_free_childdir((d))
+#else
+#define PerlEnv_clearenv()             clearenv()
+#define PerlEnv_get_childenv()         get_childenv()
+#define PerlEnv_free_childenv(e)       free_childenv((e))
+#define PerlEnv_get_childdir()         get_childdir()
+#define PerlEnv_free_childdir(d)       free_childdir((d))
 #endif
 
 #endif /* PERL_IMPLICIT_SYS */
@@ -594,7 +605,11 @@ typedef int                (*LPLIOOpen3)(struct IPerlLIO*, const char*, int, int);
 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*);
@@ -781,36 +796,36 @@ struct IPerlMemInfo
 
 /* Shared memory macros */
 #define PerlMemShared_malloc(size)                         \
-       (*PL_MemShared->pMalloc)(PL_Mem, (size))
+       (*PL_MemShared->pMalloc)(PL_MemShared, (size))
 #define PerlMemShared_realloc(buf, size)                   \
-       (*PL_MemShared->pRealloc)(PL_Mem, (buf), (size))
+       (*PL_MemShared->pRealloc)(PL_MemShared, (buf), (size))
 #define PerlMemShared_free(buf)                                    \
-       (*PL_MemShared->pFree)(PL_Mem, (buf))
+       (*PL_MemShared->pFree)(PL_MemShared, (buf))
 #define PerlMemShared_calloc(num, size)                            \
-       (*PL_MemShared->pCalloc)(PL_Mem, (num), (size))
+       (*PL_MemShared->pCalloc)(PL_MemShared, (num), (size))
 #define PerlMemShared_get_lock()                           \
-       (*PL_MemShared->pGetLock)(PL_Mem)
+       (*PL_MemShared->pGetLock)(PL_MemShared)
 #define PerlMemShared_free_lock()                          \
-       (*PL_MemShared->pFreeLock)(PL_Mem)
+       (*PL_MemShared->pFreeLock)(PL_MemShared)
 #define PerlMemShared_is_locked()                          \
-       (*PL_MemShared->pIsLocked)(PL_Mem)
+       (*PL_MemShared->pIsLocked)(PL_MemShared)
 
 
 /* Parse tree memory macros */
 #define PerlMemParse_malloc(size)                          \
-       (*PL_MemParse->pMalloc)(PL_Mem, (size))
+       (*PL_MemParse->pMalloc)(PL_MemParse, (size))
 #define PerlMemParse_realloc(buf, size)                            \
-       (*PL_MemParse->pRealloc)(PL_Mem, (buf), (size))
+       (*PL_MemParse->pRealloc)(PL_MemParse, (buf), (size))
 #define PerlMemParse_free(buf)                             \
-       (*PL_MemParse->pFree)(PL_Mem, (buf))
+       (*PL_MemParse->pFree)(PL_MemParse, (buf))
 #define PerlMemParse_calloc(num, size)                     \
-       (*PL_MemParse->pCalloc)(PL_Mem, (num), (size))
+       (*PL_MemParse->pCalloc)(PL_MemParse, (num), (size))
 #define PerlMemParse_get_lock()                                    \
-       (*PL_MemParse->pGetLock)(PL_Mem)
+       (*PL_MemParse->pGetLock)(PL_MemParse)
 #define PerlMemParse_free_lock()                           \
-       (*PL_MemParse->pFreeLock)(PL_Mem)
+       (*PL_MemParse->pFreeLock)(PL_MemParse)
 #define PerlMemParse_is_locked()                           \
-       (*PL_MemParse->pIsLocked)(PL_Mem)
+       (*PL_MemParse->pIsLocked)(PL_MemParse)
 
 
 #else  /* PERL_IMPLICIT_SYS */
@@ -880,6 +895,8 @@ typedef int         (*LPProcKillpg)(struct IPerlProc*, int, int);
 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);
@@ -942,6 +959,7 @@ struct IPerlProc
     LPProcASpawn       pASpawn;
 #endif
     LPProcLastHost      pLastHost;
+    LPProcPopenList    pPopenList;
 };
 
 struct IPerlProcInfo
@@ -982,6 +1000,8 @@ struct IPerlProcInfo
        (*PL_Proc->pPauseProc)(PL_Proc)
 #define PerlProc_popen(c, m)                                           \
        (*PL_Proc->pPopen)(PL_Proc, (c), (m))
+#define PerlProc_popen_list(m, n, a)                                   \
+       (*PL_Proc->pPopenList)(PL_Proc, (m), (n), (a))
 #define PerlProc_pclose(f)                                             \
        (*PL_Proc->pPclose)(PL_Proc, (f))
 #define PerlProc_pipe(fd)                                              \
@@ -1043,6 +1063,7 @@ struct IPerlProcInfo
 #define PerlProc_killpg(i, a)  killpg((i), (a))
 #define PerlProc_pause()       Pause()
 #define PerlProc_popen(c, m)   my_popen((c), (m))
+#define PerlProc_popen_list(m,n,a)     my_popen_list((m),(n),(a))
 #define PerlProc_pclose(f)     my_pclose((f))
 #define PerlProc_pipe(fd)      pipe((fd))
 #define PerlProc_setuid(u)     setuid((u))
@@ -1054,7 +1075,7 @@ 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