X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/a15cef0c498d0b84ecf118ac9b0a6f383dfcf79d..15dc519fb7cb1c4b51fbc196af8ecf273c534ad1:/iperlsys.h diff --git a/iperlsys.h b/iperlsys.h index 237fab2..f82d9c5 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 */ @@ -56,7 +51,11 @@ #include "perlio.h" #ifndef Sighandler_t +# if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +typedef Signal_t (*Sighandler_t) (int, siginfo_t*, void*); +# else typedef Signal_t (*Sighandler_t) (int); +# endif #endif #if defined(PERL_IMPLICIT_SYS) @@ -74,10 +73,10 @@ typedef int (*LPEof)(struct IPerlStdIO*, FILE*); typedef int (*LPError)(struct IPerlStdIO*, FILE*); typedef void (*LPClearerr)(struct IPerlStdIO*, FILE*); typedef int (*LPGetc)(struct IPerlStdIO*, FILE*); -typedef char* (*LPGetBase)(struct IPerlStdIO*, FILE*); +typedef STDCHAR* (*LPGetBase)(struct IPerlStdIO*, FILE*); typedef int (*LPGetBufsiz)(struct IPerlStdIO*, FILE*); typedef int (*LPGetCnt)(struct IPerlStdIO*, FILE*); -typedef char* (*LPGetPtr)(struct IPerlStdIO*, FILE*); +typedef STDCHAR* (*LPGetPtr)(struct IPerlStdIO*, FILE*); typedef char* (*LPGets)(struct IPerlStdIO*, FILE*, char*, int); typedef int (*LPPutc)(struct IPerlStdIO*, FILE*, int); typedef int (*LPPuts)(struct IPerlStdIO*, FILE*, const char*); @@ -93,13 +92,19 @@ 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 (*LPSetPtr)(struct IPerlStdIO*, FILE*, char*); + +#ifndef NETWARE +typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*); +#elif defined(NETWARE) +typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*, int); +#endif + typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*); typedef int (*LPPrintf)(struct IPerlStdIO*, FILE*, const char*, ...); typedef int (*LPVprintf)(struct IPerlStdIO*, FILE*, const char*, va_list); -typedef long (*LPTell)(struct IPerlStdIO*, FILE*); +typedef Off_t (*LPTell)(struct IPerlStdIO*, FILE*); typedef int (*LPSeek)(struct IPerlStdIO*, FILE*, Off_t, int); typedef void (*LPRewind)(struct IPerlStdIO*, FILE*); typedef FILE* (*LPTmpfile)(struct IPerlStdIO*); @@ -280,12 +285,19 @@ struct IPerlStdIOInfo #define PerlSIO_stdout stdout #define PerlSIO_stderr stderr #define PerlSIO_fopen(x,y) fopen(x,y) +#ifdef __VOS__ +/* Work around VOS bug posix-979, wrongly setting errno when at end of file. */ +#define PerlSIO_fclose(f) (((errno==1025)?errno=0:0),fclose(f)) +#define PerlSIO_feof(f) (((errno==1025)?errno=0:0),feof(f)) +#define PerlSIO_ferror(f) (((errno==1025)?errno=0:0),ferror(f)) +#else #define PerlSIO_fclose(f) fclose(f) #define PerlSIO_feof(f) feof(f) #define PerlSIO_ferror(f) ferror(f) +#endif #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 @@ -327,14 +339,14 @@ struct IPerlStdIOInfo #define PerlSIO_set_cnt(f,c) PerlIOProc_abort() #endif #if defined(USE_STDIO_PTR) && defined(STDIO_PTR_LVALUE) -#define PerlSIO_set_ptr(f,p) FILE_ptr(f) = (p) +#define PerlSIO_set_ptr(f,p) (FILE_ptr(f) = (p)) #else #define PerlSIO_set_ptr(f,p) PerlIOProc_abort() #endif #define PerlSIO_setlinebuf(f) setlinebuf(f) -#define PerlSIO_printf Perl_fprintf_nocontext -#define PerlSIO_stdoutf *PL_StdIO->pPrintf -#define PerlSIO_vprintf(f,fmt,a) +#define PerlSIO_printf fprintf +#define PerlSIO_stdoutf printf +#define PerlSIO_vprintf(f,fmt,a) vfprintf(f,fmt,a) #define PerlSIO_ftell(f) ftell(f) #define PerlSIO_fseek(f,o,w) fseek(f,o,w) #define PerlSIO_fgetpos(f,p) fgetpos(f,p) @@ -358,7 +370,7 @@ typedef int (*LPMakedir)(struct IPerlDir*, const char*, int); typedef int (*LPChdir)(struct IPerlDir*, const char*); typedef int (*LPRmdir)(struct IPerlDir*, const char*); typedef int (*LPDirClose)(struct IPerlDir*, DIR*); -typedef DIR* (*LPDirOpen)(struct IPerlDir*, char*); +typedef DIR* (*LPDirOpen)(struct IPerlDir*, const char*); typedef struct direct* (*LPDirRead)(struct IPerlDir*, DIR*); typedef void (*LPDirRewind)(struct IPerlDir*, DIR*); typedef void (*LPDirSeek)(struct IPerlDir*, DIR*, long); @@ -420,7 +432,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 @@ -464,9 +476,12 @@ typedef char* (*LPENVGetenv_len)(struct IPerlEnv*, #endif #ifdef WIN32 typedef unsigned long (*LPEnvOsID)(struct IPerlEnv*); -typedef char* (*LPEnvLibPath)(struct IPerlEnv*, const char*); -typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*); -typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*); +typedef char* (*LPEnvLibPath)(struct IPerlEnv*, const char*, + STRLEN *const len); +typedef char* (*LPEnvSiteLibPath)(struct IPerlEnv*, const char*, + STRLEN *const len); +typedef char* (*LPEnvVendorLibPath)(struct IPerlEnv*, const char*, + STRLEN *const len); typedef void (*LPEnvGetChildIO)(struct IPerlEnv*, child_IO_table*); #endif @@ -532,12 +547,12 @@ struct IPerlEnvInfo #ifdef WIN32 #define PerlEnv_os_id() \ (*PL_Env->pEnvOsID)(PL_Env) -#define PerlEnv_lib_path(str) \ - (*PL_Env->pLibPath)(PL_Env,(str)) -#define PerlEnv_sitelib_path(str) \ - (*PL_Env->pSiteLibPath)(PL_Env,(str)) -#define PerlEnv_vendorlib_path(str) \ - (*PL_Env->pVendorLibPath)(PL_Env,(str)) +#define PerlEnv_lib_path(str, lenp) \ + (*PL_Env->pLibPath)(PL_Env,(str),(lenp)) +#define PerlEnv_sitelib_path(str, lenp) \ + (*PL_Env->pSiteLibPath)(PL_Env,(str),(lenp)) +#define PerlEnv_vendorlib_path(str, lenp) \ + (*PL_Env->pVendorLibPath)(PL_Env,(str),(lenp)) #define PerlEnv_get_child_IO(ptr) \ (*PL_Env->pGetChildIO)(PL_Env, ptr) #endif @@ -547,11 +562,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)) @@ -563,10 +573,21 @@ struct IPerlEnvInfo #ifdef WIN32 #define PerlEnv_os_id() win32_os_id() -#define PerlEnv_lib_path(str) win32_get_privlib(str) -#define PerlEnv_sitelib_path(str) win32_get_sitelib(str) -#define PerlEnv_vendorlib_path(str) win32_get_vendorlib(str) +#define PerlEnv_lib_path(str, lenp) win32_get_privlib(str, lenp) +#define PerlEnv_sitelib_path(str, lenp) win32_get_sitelib(str, lenp) +#define PerlEnv_vendorlib_path(str, lenp) win32_get_vendorlib(str, lenp) #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 */ @@ -584,33 +605,37 @@ typedef int (*LPLIOAccess)(struct IPerlLIO*, const char*, int); typedef int (*LPLIOChmod)(struct IPerlLIO*, const char*, int); typedef int (*LPLIOChown)(struct IPerlLIO*, const char*, uid_t, gid_t); -typedef int (*LPLIOChsize)(struct IPerlLIO*, int, long); +typedef int (*LPLIOChsize)(struct IPerlLIO*, int, Off_t); typedef int (*LPLIOClose)(struct IPerlLIO*, int); typedef int (*LPLIODup)(struct IPerlLIO*, int); typedef int (*LPLIODup2)(struct IPerlLIO*, int, int); typedef int (*LPLIOFlock)(struct IPerlLIO*, int, int); -typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, struct stat*); +typedef int (*LPLIOFileStat)(struct IPerlLIO*, int, Stat_t*); typedef int (*LPLIOIOCtl)(struct IPerlLIO*, int, unsigned int, char*); typedef int (*LPLIOIsatty)(struct IPerlLIO*, int); typedef int (*LPLIOLink)(struct IPerlLIO*, const char*, const char *); -typedef long (*LPLIOLseek)(struct IPerlLIO*, int, long, int); +typedef Off_t (*LPLIOLseek)(struct IPerlLIO*, int, Off_t, int); typedef int (*LPLIOLstat)(struct IPerlLIO*, const char*, - struct stat*); + Stat_t*); typedef char* (*LPLIOMktemp)(struct IPerlLIO*, char*); typedef int (*LPLIOOpen)(struct IPerlLIO*, const char*, int); 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*); + Stat_t*); typedef char* (*LPLIOTmpnam)(struct IPerlLIO*, char*); typedef int (*LPLIOUmask)(struct IPerlLIO*, int); typedef int (*LPLIOUnlink)(struct IPerlLIO*, const char*); -typedef int (*LPLIOUtime)(struct IPerlLIO*, char*, struct utimbuf*); +typedef int (*LPLIOUtime)(struct IPerlLIO*, const char*, struct utimbuf*); typedef int (*LPLIOWrite)(struct IPerlLIO*, int, const void*, unsigned int); @@ -708,7 +733,13 @@ struct IPerlLIOInfo #define PerlLIO_access(file, mode) access((file), (mode)) #define PerlLIO_chmod(file, mode) chmod((file), (mode)) #define PerlLIO_chown(file, owner, grp) chown((file), (owner), (grp)) -#define PerlLIO_chsize(fd, size) chsize((fd), (size)) +#if defined(HAS_TRUNCATE) +# define PerlLIO_chsize(fd, size) ftruncate((fd), (size)) +#elif defined(HAS_CHSIZE) +# define PerlLIO_chsize(fd, size) chsize((fd), (size)) +#else +# define PerlLIO_chsize(fd, size) my_chsize((fd), (size)) +#endif #define PerlLIO_close(fd) close((fd)) #define PerlLIO_dup(fd) dup((fd)) #define PerlLIO_dup2(fd1, fd2) dup2((fd1), (fd2)) @@ -790,6 +821,25 @@ struct IPerlMemInfo (*PL_Mem->pIsLocked)(PL_Mem) /* Shared memory macros */ +#ifdef NETWARE + +#define PerlMemShared_malloc(size) \ + (*PL_Mem->pMalloc)(PL_Mem, (size)) +#define PerlMemShared_realloc(buf, size) \ + (*PL_Mem->pRealloc)(PL_Mem, (buf), (size)) +#define PerlMemShared_free(buf) \ + (*PL_Mem->pFree)(PL_Mem, (buf)) +#define PerlMemShared_calloc(num, size) \ + (*PL_Mem->pCalloc)(PL_Mem, (num), (size)) +#define PerlMemShared_get_lock() \ + (*PL_Mem->pGetLock)(PL_Mem) +#define PerlMemShared_free_lock() \ + (*PL_Mem->pFreeLock)(PL_Mem) +#define PerlMemShared_is_locked() \ + (*PL_Mem->pIsLocked)(PL_Mem) + +#else + #define PerlMemShared_malloc(size) \ (*PL_MemShared->pMalloc)(PL_MemShared, (size)) #define PerlMemShared_realloc(buf, size) \ @@ -805,6 +855,7 @@ struct IPerlMemInfo #define PerlMemShared_is_locked() \ (*PL_MemShared->pIsLocked)(PL_MemShared) +#endif /* Parse tree memory macros */ #define PerlMemParse_malloc(size) \ @@ -871,8 +922,10 @@ struct IPerlProcInfo; typedef void (*LPProcAbort)(struct IPerlProc*); typedef char* (*LPProcCrypt)(struct IPerlProc*, const char*, const char*); -typedef void (*LPProcExit)(struct IPerlProc*, int); -typedef void (*LPProc_Exit)(struct IPerlProc*, int); +typedef void (*LPProcExit)(struct IPerlProc*, int) + __attribute__noreturn__; +typedef void (*LPProc_Exit)(struct IPerlProc*, int) + __attribute__noreturn__; typedef int (*LPProcExecl)(struct IPerlProc*, const char*, const char*, const char*, const char*, const char*); @@ -907,14 +960,12 @@ typedef int (*LPProcGetpid)(struct IPerlProc*); typedef void* (*LPProcDynaLoader)(struct IPerlProc*, const char*); typedef void (*LPProcGetOSError)(struct IPerlProc*, SV* sv, DWORD dwErr); -typedef void (*LPProcFreeBuf)(struct IPerlProc*, char*); -typedef BOOL (*LPProcDoCmd)(struct IPerlProc*, char*); -typedef int (*LPProcSpawn)(struct IPerlProc*, char*); 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*); +typedef int (*LPProcGetTimeOfDay)(struct IPerlProc*, + struct timeval*, void*); struct IPerlProc { @@ -948,13 +999,11 @@ struct IPerlProc #ifdef WIN32 LPProcDynaLoader pDynaLoader; LPProcGetOSError pGetOSError; - LPProcDoCmd pDoCmd; - LPProcSpawn pSpawn; LPProcSpawnvp pSpawnvp; - LPProcASpawn pASpawn; #endif LPProcLastHost pLastHost; LPProcPopenList pPopenList; + LPProcGetTimeOfDay pGetTimeOfDay; }; struct IPerlProcInfo @@ -1027,17 +1076,13 @@ struct IPerlProcInfo (*PL_Proc->pDynaLoader)(PL_Proc, (f)) #define PerlProc_GetOSError(s,e) \ (*PL_Proc->pGetOSError)(PL_Proc, (s), (e)) -#define PerlProc_Cmd(s) \ - (*PL_Proc->pDoCmd)(PL_Proc, (s)) -#define do_spawn(s) \ - (*PL_Proc->pSpawn)(PL_Proc, (s)) -#define do_spawnvp(m, c, a) \ +#define PerlProc_spawnvp(m, c, a) \ (*PL_Proc->pSpawnvp)(PL_Proc, (m), (c), (a)) -#define PerlProc_aspawn(m,c,a) \ - (*PL_Proc->pASpawn)(PL_Proc, (m), (c), (a)) #endif #define PerlProc_lasthost() \ (*PL_Proc->pLastHost)(PL_Proc) +#define PerlProc_gettimeofday(t,z) \ + (*PL_Proc->pGetTimeOfDay)(PL_Proc,(t),(z)) #else /* PERL_IMPLICIT_SYS */ @@ -1070,14 +1115,19 @@ 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() +#define PerlProc_gettimeofday(t,z) gettimeofday((t),(z)) #ifdef WIN32 #define PerlProc_DynaLoad(f) \ win32_dynaload((f)) #define PerlProc_GetOSError(s,e) \ win32_str_os_error((s), (e)) +#define PerlProc_spawnvp(m, c, a) \ + win32_spawnvp((m), (c), (a)) +#undef PerlProc_signal +#define PerlProc_signal(n, h) win32_signal((n), (h)) #endif #endif /* PERL_IMPLICIT_SYS */ @@ -1362,3 +1412,12 @@ struct IPerlSockInfo #endif /* __Inc__IPerl___ */ +/* + * Local variables: + * c-indentation-style: bsd + * c-basic-offset: 4 + * indent-tabs-mode: t + * End: + * + * ex: set ts=8 sts=4 sw=4 noet: + */