X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=iperlsys.h;h=97a9a705053300508055f6fe4ca25734d1a63a4e;hb=29a5dc09a8a3b3561aa738ed5a47775ecf7d811e;hp=1019784d1145aa8a0d81bb69025c8422ea5a5015;hpb=eaf8b6989fc5883b4cde6853803087e4b807b2b7;p=p5sagit%2Fp5-mst-13.2.git diff --git a/iperlsys.h b/iperlsys.h index 1019784..97a9a70 100644 --- a/iperlsys.h +++ b/iperlsys.h @@ -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 */ @@ -82,20 +77,18 @@ typedef char* (*LPGets)(struct IPerlStdIO*, FILE*, char*, int); typedef int (*LPPutc)(struct IPerlStdIO*, FILE*, int); typedef int (*LPPuts)(struct IPerlStdIO*, FILE*, const char*); typedef int (*LPFlush)(struct IPerlStdIO*, FILE*); -typedef int (*LPUngetc)(struct IPerlStdIO*, FILE*,int); +typedef int (*LPUngetc)(struct IPerlStdIO*, int,FILE*); typedef int (*LPFileno)(struct IPerlStdIO*, FILE*); typedef FILE* (*LPFdopen)(struct IPerlStdIO*, int, const char*); typedef FILE* (*LPReopen)(struct IPerlStdIO*, const char*, const char*, FILE*); -typedef SSize_t (*LPRead)(struct IPerlStdIO*, FILE*, void*, Size_t); -typedef SSize_t (*LPWrite)(struct IPerlStdIO*, FILE*, const void*, - Size_t); +typedef SSize_t (*LPRead)(struct IPerlStdIO*, void*, Size_t, Size_t, FILE *); +typedef SSize_t (*LPWrite)(struct IPerlStdIO*, const void*, Size_t, Size_t, FILE *); typedef void (*LPSetBuf)(struct IPerlStdIO*, FILE*, char*); typedef int (*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int, Size_t); typedef void (*LPSetCnt)(struct IPerlStdIO*, FILE*, int); -typedef void (*LPSetPtrCnt)(struct IPerlStdIO*, FILE*, char*, - int); +typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, char*); typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*); typedef int (*LPPrintf)(struct IPerlStdIO*, FILE*, const char*, ...); @@ -140,7 +133,7 @@ struct IPerlStdIO LPSetBuf pSetBuf; LPSetVBuf pSetVBuf; LPSetCnt pSetCnt; - LPSetPtrCnt pSetPtrCnt; + LPSetPtr pSetPtr; LPSetlinebuf pSetlinebuf; LPPrintf pPrintf; LPVprintf pVprintf; @@ -230,8 +223,8 @@ struct IPerlStdIOInfo (*PL_StdIO->pFlush)(PL_StdIO, (f)) #define PerlSIO_fgets(s, n, fp) \ (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n) -#define PerlSIO_ungetc(f,c) \ - (*PL_StdIO->pUngetc)(PL_StdIO, (f),(c)) +#define PerlSIO_ungetc(c,f) \ + (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) #define PerlSIO_fileno(f) \ (*PL_StdIO->pFileno)(PL_StdIO, (f)) #define PerlSIO_fdopen(f, s) \ @@ -239,22 +232,22 @@ struct IPerlStdIOInfo #define PerlSIO_freopen(p, m, f) \ (*PL_StdIO->pReopen)(PL_StdIO, (p), (m), (f)) #define PerlSIO_fread(buf,sz,count,f) \ - (SSize_t)(*PL_StdIO->pRead)(PL_StdIO, (sz), (buf), (count), (f)) -#define PerlSIO_write(buf,sz,count,f) \ - (*PL_StdIO->pWrite)(PL_StdIO, (sz), (buf), (count), (f)) + (*PL_StdIO->pRead)(PL_StdIO, (buf), (sz), (count), (f)) +#define PerlSIO_fwrite(buf,sz,count,f) \ + (*PL_StdIO->pWrite)(PL_StdIO, (buf), (sz), (count), (f)) #define PerlSIO_setbuf(f,b) \ (*PL_StdIO->pSetBuf)(PL_StdIO, (f), (b)) #define PerlSIO_setvbuf(f,b,t,s) \ (*PL_StdIO->pSetVBuf)(PL_StdIO, (f),(b),(t),(s)) #define PerlSIO_set_cnt(f,c) \ (*PL_StdIO->pSetCnt)(PL_StdIO, (f), (c)) -#define PerlSIO_set_ptrcnt(f,p,c) \ - (*PL_StdIO->pSetPtrCnt)(PL_StdIO, (f), (p), (c)) +#define PerlSIO_set_ptr(f,p) \ + (*PL_StdIO->pSetPtr)(PL_StdIO, (f), (p)) #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)) @@ -287,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 @@ -305,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(f,c) ungetc(f,c) +#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) @@ -333,8 +336,6 @@ struct IPerlStdIOInfo #define PerlSIO_fsetpos(f,p) fsetpos(f,p) #define PerlSIO_rewind(f) rewind(f) #define PerlSIO_tmpfile() tmpfile() -#undef init_os_extras -#define init_os_extras() #define PerlSIO_fdupopen(f) (f) #endif /* PERL_IMPLICIT_SYS */ @@ -414,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 @@ -541,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)) @@ -561,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 */ @@ -598,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*); @@ -785,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 */ @@ -884,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); @@ -906,6 +919,7 @@ typedef int (*LPProcSpawnvp)(struct IPerlProc*, int, const char*, const char*const*); typedef int (*LPProcASpawn)(struct IPerlProc*, void*, void**, void**); #endif +typedef int (*LPProcLastHost)(struct IPerlProc*); struct IPerlProc { @@ -944,6 +958,8 @@ struct IPerlProc LPProcSpawnvp pSpawnvp; LPProcASpawn pASpawn; #endif + LPProcLastHost pLastHost; + LPProcPopenList pPopenList; }; struct IPerlProcInfo @@ -984,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) \ @@ -1023,6 +1041,8 @@ struct IPerlProcInfo #define PerlProc_aspawn(m,c,a) \ (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a)) #endif +#define PerlProc_lasthost() \ + (*PL_Proc->pLastHost)(PL_Proc) #else /* PERL_IMPLICIT_SYS */ @@ -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