X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/d951c35852a72e504eea00883fb91f69a81b8ce3..759a2998e5f3ea113e277a7a86d00124cd68d16f:/iperlsys.h diff --git a/iperlsys.h b/iperlsys.h index f84852d..c176ad5 100644 --- a/iperlsys.h +++ b/iperlsys.h @@ -3,9 +3,8 @@ * * This file defines the system level functionality that perl needs. * - * When using C, this definition is in the form of a set of macros - * that can be #defined to the system-level function (or a wrapper - * provided elsewhere). + * When using C, this definition is in the form of a set of macros that can be + * #defined to the system-level function (or a wrapper provided elsewhere). * * GSAR 21-JUN-98 */ @@ -19,8 +18,8 @@ * XXX := functional group * YYY := stdlib/OS function name * - * Continuing with the theme of PerlIO, all OS functionality was - * encapsulated into one of several interfaces. + * Continuing with the theme of PerlIO, all OS functionality was encapsulated + * into one of several interfaces. * * PerlIO - stdio * PerlLIO - low level I/O @@ -50,8 +49,15 @@ */ #include "perlio.h" +typedef Signal_t (*Sighandler1_t) (int); +typedef Signal_t (*Sighandler3_t) (int, Siginfo_t*, void*); + #ifndef Sighandler_t -typedef Signal_t (*Sighandler_t) (int); +# ifdef PERL_USE_3ARG_SIGHANDLER +typedef Sighandler3_t Sighandler_t; +# else +typedef Sighandler1_t Sighandler_t; +# endif #endif #if defined(PERL_IMPLICIT_SYS) @@ -59,7 +65,7 @@ typedef Signal_t (*Sighandler_t) (int); /* IPerlStdIO */ struct IPerlStdIO; struct IPerlStdIOInfo; -typedef FILE* (*LPStdin)(struct IPerlStdIO*); +typedef FILE* (*LPStdin)(struct IPerlStdIO*); typedef FILE* (*LPStdout)(struct IPerlStdIO*); typedef FILE* (*LPStderr)(struct IPerlStdIO*); typedef FILE* (*LPOpen)(struct IPerlStdIO*, const char*, @@ -69,13 +75,13 @@ 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 char* (*LPGets)(struct IPerlStdIO*, FILE*, char*, int); -typedef int (*LPPutc)(struct IPerlStdIO*, FILE*, int); -typedef int (*LPPuts)(struct IPerlStdIO*, FILE*, const char*); +typedef STDCHAR* (*LPGetPtr)(struct IPerlStdIO*, FILE*); +typedef char* (*LPGets)(struct IPerlStdIO*, char*, int, FILE*); +typedef int (*LPPutc)(struct IPerlStdIO*, int, FILE*); +typedef int (*LPPuts)(struct IPerlStdIO*, const char *, FILE*); typedef int (*LPFlush)(struct IPerlStdIO*, FILE*); typedef int (*LPUngetc)(struct IPerlStdIO*, int,FILE*); typedef int (*LPFileno)(struct IPerlStdIO*, FILE*); @@ -90,9 +96,9 @@ typedef int (*LPSetVBuf)(struct IPerlStdIO*, FILE*, char*, int, typedef void (*LPSetCnt)(struct IPerlStdIO*, FILE*, int); #ifndef NETWARE -typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, char*); +typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*); #elif defined(NETWARE) -typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, char*, int); +typedef void (*LPSetPtr)(struct IPerlStdIO*, FILE*, STDCHAR*, int); #endif typedef void (*LPSetlinebuf)(struct IPerlStdIO*, FILE*); @@ -221,14 +227,14 @@ struct IPerlStdIOInfo (*PL_StdIO->pGetCnt)(PL_StdIO, (f)) #define PerlSIO_get_ptr(f) \ (*PL_StdIO->pGetPtr)(PL_StdIO, (f)) -#define PerlSIO_fputc(f,c) \ - (*PL_StdIO->pPutc)(PL_StdIO, (f),(c)) -#define PerlSIO_fputs(f,s) \ - (*PL_StdIO->pPuts)(PL_StdIO, (f),(s)) +#define PerlSIO_fputc(c,f) \ + (*PL_StdIO->pPutc)(PL_StdIO, (c),(f)) +#define PerlSIO_fputs(s,f) \ + (*PL_StdIO->pPuts)(PL_StdIO, (s),(f)) #define PerlSIO_fflush(f) \ (*PL_StdIO->pFlush)(PL_StdIO, (f)) -#define PerlSIO_fgets(s, n, fp) \ - (*PL_StdIO->pGets)(PL_StdIO, (fp), s, n) +#define PerlSIO_fgets(s, n, f) \ + (*PL_StdIO->pGets)(PL_StdIO, s, n, (f)) #define PerlSIO_ungetc(c,f) \ (*PL_StdIO->pUngetc)(PL_StdIO, (c),(f)) #define PerlSIO_fileno(f) \ @@ -307,14 +313,16 @@ struct IPerlStdIOInfo #define PerlSIO_get_cnt(f) 0 #define PerlSIO_get_ptr(f) NULL #endif -#define PerlSIO_fputc(f,c) fputc(c,f) -#define PerlSIO_fputs(f,s) fputs(s,f) +#define PerlSIO_fputc(c,f) fputc(c,f) +#define PerlSIO_fputs(s,f) fputs(s,f) #define PerlSIO_fflush(f) Fflush(f) -#define PerlSIO_fgets(s, n, fp) fgets(s,n,fp) -#if defined(VMS) && defined(__DECC) - /* Unusual definition of ungetc() here to accomodate fast_sv_gets()' +#define PerlSIO_fgets(s, n, f) fgets(s,n,f) +#if defined(__VMS) + /* Unusual definition of ungetc() here to accommodate fast_sv_gets()' * belief that it can mix getc/ungetc with reads from stdio buffer */ +START_EXTERN_C int decc$ungetc(int __c, FILE *__stream); +END_EXTERN_C # define PerlSIO_ungetc(c,f) ((c) == EOF ? EOF : \ ((*(f) && !((*(f))->_flag & _IONBF) && \ ((*(f))->_ptr > (*(f))->_base)) ? \ @@ -335,7 +343,7 @@ 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 @@ -472,9 +480,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*, WIN32_NO_REGISTRY_M_(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 @@ -540,20 +551,28 @@ 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,WIN32_NO_REGISTRY_M_(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 -#else /* PERL_IMPLICIT_SYS */ +#else /* below is ! PERL_IMPLICIT_SYS */ +# ifdef USE_ITHREADS -#define PerlEnv_putenv(str) putenv((str)) -#define PerlEnv_getenv(str) getenv((str)) + /* Use the comma operator to return 0/non-zero, while avoiding putting + * this in an inline function */ +# define PerlEnv_putenv(str) (ENV_LOCK, (putenv(str) \ + ? (ENV_UNLOCK, 1) \ + : (ENV_UNLOCK, 0))) +# else +# define PerlEnv_putenv(str) putenv(str) +# endif +#define PerlEnv_getenv(str) mortal_getenv(str) #define PerlEnv_getenv_len(str,l) getenv_len((str), (l)) #ifdef HAS_ENVGETENV # define PerlEnv_ENVgetenv(str) ENVgetenv((str)) @@ -566,9 +585,9 @@ 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(WIN32_NO_REGISTRY_M_(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() @@ -576,7 +595,9 @@ struct IPerlEnvInfo #define PerlEnv_get_childdir() win32_get_childdir() #define PerlEnv_free_childdir(d) win32_free_childdir((d)) #else -#define PerlEnv_clearenv() clearenv() +#define PerlEnv_clearenv(str) (ENV_LOCK, (clearenv(str) \ + ? (ENV_UNLOCK, 1) \ + : (ENV_UNLOCK, 0))) #define PerlEnv_get_childenv() get_childenv() #define PerlEnv_free_childenv(e) free_childenv((e)) #define PerlEnv_get_childdir() get_childdir() @@ -591,6 +612,8 @@ struct IPerlEnvInfo #if defined(PERL_IMPLICIT_SYS) +struct utimbuf; /* prevent gcc warning about the use below */ + /* IPerlLIO */ struct IPerlLIO; struct IPerlLIOInfo; @@ -628,7 +651,7 @@ typedef int (*LPLIONameStat)(struct IPerlLIO*, const char*, 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); @@ -749,7 +772,6 @@ struct IPerlLIOInfo # define PerlLIO_lstat(name, buf) PerlLIO_stat((name), (buf)) #endif #define PerlLIO_mktemp(file) mktemp((file)) -#define PerlLIO_mkstemp(file) mkstemp((file)) #define PerlLIO_open(file, flag) open((file), (flag)) #define PerlLIO_open3(file, flag, perm) open((file), (flag), (perm)) #define PerlLIO_read(fd, buf, count) read((fd), (buf), (count)) @@ -926,10 +948,10 @@ typedef int (*LPProcExecv)(struct IPerlProc*, const char*, const char*const*); typedef int (*LPProcExecvp)(struct IPerlProc*, const char*, const char*const*); -typedef uid_t (*LPProcGetuid)(struct IPerlProc*); -typedef uid_t (*LPProcGeteuid)(struct IPerlProc*); -typedef gid_t (*LPProcGetgid)(struct IPerlProc*); -typedef gid_t (*LPProcGetegid)(struct IPerlProc*); +typedef Uid_t (*LPProcGetuid)(struct IPerlProc*); +typedef Uid_t (*LPProcGeteuid)(struct IPerlProc*); +typedef Gid_t (*LPProcGetgid)(struct IPerlProc*); +typedef Gid_t (*LPProcGetegid)(struct IPerlProc*); typedef char* (*LPProcGetlogin)(struct IPerlProc*); typedef int (*LPProcKill)(struct IPerlProc*, int, int); typedef int (*LPProcKillpg)(struct IPerlProc*, int, int); @@ -1405,3 +1427,6 @@ struct IPerlSockInfo #endif /* __Inc__IPerl___ */ +/* + * ex: set ts=8 sts=4 sw=4 et: + */