X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=vms%2Fvmsish.h;h=a09d2be43808a11a62362e62127328ba419555ca;hb=840301ab1fb53d14da54391384089aef70e2d8dd;hp=709e34eff86c45d8c0f9991b05c072b20b8304ea;hpb=5e4ba1368e095f877f5b412f0f5761ce3fcd693d;p=p5sagit%2Fp5-mst-13.2.git diff --git a/vms/vmsish.h b/vms/vmsish.h index 709e34e..a09d2be 100644 --- a/vms/vmsish.h +++ b/vms/vmsish.h @@ -75,8 +75,8 @@ /* getenv used for regular logical names */ # define getenv(v) my_getenv(v,TRUE) #endif -#if defined(getenv_len) -#undef getenv_len +#ifdef getenv_len +# undef getenv_len #endif #define getenv_len(v,l) my_getenv_len(v,l,TRUE) @@ -93,11 +93,16 @@ /* Our own contribution to PerlShr's global symbols . . . */ #define vmstrnenv Perl_vmstrnenv #define my_trnlnm Perl_my_trnlnm -#define my_getenv Perl_my_getenv #define my_getenv_len Perl_my_getenv_len #define prime_env_iter Perl_prime_env_iter #define vmssetenv Perl_vmssetenv +#if !defined(PERL_IMPLICIT_CONTEXT) #define my_setenv Perl_my_setenv +#define my_getenv Perl_my_getenv +#else +#define my_setenv(a,b) Perl_my_setenv(aTHX_ a,b) +#define my_getenv(a,b) Perl_my_getenv(aTHX_ a,b) +#endif #define my_crypt Perl_my_crypt #define my_waitpid Perl_my_waitpid #define my_gconvert Perl_my_gconvert @@ -193,6 +198,16 @@ */ #define ALTERNATE_SHEBANG "$" +/* Lower case entry points for these are missing in some earlier RTLs + * so we borrow the defines and declares from errno.h and upcase them. + */ +#if defined(VMS_WE_ARE_CASE_SENSITIVE) && (__DECC_VER < 50500000) +# define errno (*CMA$TIS_ERRNO_GET_ADDR()) +# define vaxc$errno (*CMA$TIS_VMSERRNO_GET_ADDR()) + int *CMA$TIS_ERRNO_GET_ADDR (void); /* UNIX style error code */ + int *CMA$TIS_VMSERRNO_GET_ADDR (void); /* VMS error (errno == EVMSERR) */ +#endif + /* Macros to set errno using the VAX thread-safe calls, if present */ #if (defined(__DECC) || defined(__DECCXX)) && !defined(__ALPHA) # define set_errno(v) (cma$tis_errno_set_value(v)) @@ -225,7 +240,7 @@ #define _ckvmssts(call) STMT_START { register unsigned long int __ckvms_sts; \ if (!((__ckvms_sts=(call))&1)) { \ set_errno(EVMSERR); set_vaxc_errno(__ckvms_sts); \ - croak("Fatal VMS error (status=%d) at %s, line %d", \ + Perl_croak(aTHX_ "Fatal VMS error (status=%d) at %s, line %d", \ __ckvms_sts,__FILE__,__LINE__); } } STMT_END /* Same thing, but don't call back to Perl's croak(); useful for errors @@ -247,6 +262,12 @@ #define HAS_KILL #define HAS_WAIT +#define PERL_FS_VER_FMT "%d_%d_%d" +/* Temporary; we need to add support for this to Configure.Com */ +#ifdef PERL_INC_VERSION_LIST +# undef PERL_INC_VERSION_LIST +#endif + /* VMS: * This symbol, if defined, indicates that the program is running under * VMS. It's a symbol automagically defined by all VMS C compilers I've seen. @@ -530,6 +551,25 @@ struct mystat }; typedef unsigned mydev_t; typedef unsigned myino_t; + +/* + * DEC C previous to 6.0 corrupts the behavior of the /prefix + * qualifier with the extern prefix pragma. This provisional + * hack circumvents this prefix pragma problem in previous + * precompilers. + */ +#if defined(__VMS_VER) && __VMS_VER >= 70000000 +# if defined(VMS_WE_ARE_CASE_SENSITIVE) && (__DECC_VER < 60000000) +# pragma __extern_prefix save +# pragma __extern_prefix "" /* set to empty to prevent prefixing */ +# define geteuid decc$__unix_geteuid +# define getuid decc$__unix_getuid +# define stat(__p1,__p2) decc$__utc_stat(__p1,__p2) +# define fstat(__p1,__p2) decc$__utc_fstat(__p1,__p2) +# pragma __extern_prefix restore +# endif +#endif + #ifndef DONT_MASK_RTL_CALLS /* defined for vms.c so we can see RTL calls */ # ifdef stat # undef stat @@ -549,6 +589,7 @@ typedef unsigned myino_t; #define S_IDGRP (S_IWGRP | S_IXGRP) #define S_IDOTH (S_IWOTH | S_IXOTH) + /* Prototypes for functions unique to vms.c. Don't include replacements * for routines in the mainline source files excluded by #ifndef VMS; * their prototypes are already in proto.h. @@ -584,7 +625,11 @@ void init_os_extras (); typedef char __VMS_PROTOTYPES__; int vmstrnenv (const char *, char *, unsigned long int, struct dsc$descriptor_s **, unsigned long int); int my_trnlnm (const char *, char *, unsigned long int); -char * my_getenv (const char *, bool); +#if !defined(PERL_IMPLICIT_CONTEXT) +char * Perl_my_getenv (const char *, bool); +#else +char * Perl_my_getenv (pTHX_ const char *, bool); +#endif char * my_getenv_len (const char *, unsigned long *, bool); int vmssetenv (char *, char *, struct dsc$descriptor_s **); char * my_crypt (const char *, const char *); @@ -626,7 +671,7 @@ int my_sigdelset (sigset_t *, int); int my_sigismember (sigset_t *, int); int my_sigprocmask (int, sigset_t *, sigset_t *); #endif -I32 cando_by_name (I32, I32, char *); +I32 cando_by_name (I32, Uid_t, char *); int flex_fstat (int, Stat_t *); int flex_stat (const char *, Stat_t *); int trim_unixpath (char *, char*, int); @@ -672,6 +717,4 @@ typedef char __VMS_SEPYTOTORP__; #undef HAS_NTOHL #endif -#define TMPPATH "sys$scratch:perl-eXXXXXX" - #endif /* __vmsish_h_included */