This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
fix memory bug in vms.c:mp_do_tounixspec
[perl5.git] / vms / vmsish.h
index 93af772..af30293 100644 (file)
 #define my_getpwuid            Perl_my_getpwuid
 #define my_flush               Perl_my_flush
 #define readdir                        Perl_readdir
+#define readdir_r              Perl_readdir_r
 #else
 #define my_getenv_len(a,b,c)   Perl_my_getenv_len(aTHX_ a,b,c)
 #define vmssetenv(a,b,c)       Perl_vmssetenv(aTHX_ a,b,c)
 #define my_getpwuid(a)         Perl_my_getpwuid(aTHX_ a)
 #define my_flush(a)            Perl_my_flush(aTHX_ a)
 #define readdir(a)             Perl_readdir(aTHX_ a)
+#define readdir_r(a,b,c)       Perl_readdir_r(aTHX_ a,b,c)
 #endif
 #define my_gconvert            Perl_my_gconvert
 #define telldir                Perl_telldir
 #define COMPLEX_STATUS 1       /* We track both "POSIX" and VMS values */
 
 #define HINT_V_VMSISH          24
-#define HINT_M_VMSISH_HUSHED   0x20000000 /* stifle error msgs on exit */
 #define HINT_M_VMSISH_STATUS   0x40000000 /* system, $? return VMS status */
 #define HINT_M_VMSISH_TIME     0x80000000 /* times are local, not UTC */
 #define NATIVE_HINTS           (PL_hints >> HINT_V_VMSISH)  /* used in op.c */
 
 #define TEST_VMSISH(h) (PL_curcop->op_private & ((h) >> HINT_V_VMSISH))
-#define VMSISH_HUSHED  TEST_VMSISH(HINT_M_VMSISH_HUSHED)
 #define VMSISH_STATUS  TEST_VMSISH(HINT_M_VMSISH_STATUS)
 #define VMSISH_TIME    TEST_VMSISH(HINT_M_VMSISH_TIME)
 
+/* VMS-specific data storage */
+
+#define HAVE_INTERP_INTERN
+struct interp_intern {
+    int    hushed;
+    double inv_rand_max;
+};
+#define VMSISH_HUSHED     (PL_sys_intern.hushed)
+#define MY_INV_RAND_MAX   (PL_sys_intern.inv_rand_max)
+
 /* Flags for vmstrnenv() */
 #define PERL__TRNENV_SECURE 0x01
+#define PERL__TRNENV_JOIN_SEARCHLIST 0x02
 
 /* Handy way to vet calls to VMS system services and RTL routines. */
 #define _ckvmssts(call) STMT_START { register unsigned long int __ckvms_sts; \
 #endif
 
 #define BIT_BUCKET "_NLA0:"
-#define PERL_SYS_INIT(c,v)     vms_image_init((c),(v)); MALLOC_INIT
+#define PERL_SYS_INIT(c,v)     MALLOC_CHECK_TAINT2(*c,*v) vms_image_init((c),(v)); MALLOC_INIT
 #define PERL_SYS_TERM()                OP_REFCNT_TERM; MALLOC_TERM
 #define dXSUB_SYS
 #define HAS_KILL
  *     This symbol, if defined, indicates that the ioctl() routine is
  *     available to set I/O characteristics
  */
+#if defined(__CRTL_VER) && __CRTL_VER >= 70000000
+#define        HAS_IOCTL               /**/
+#else
 #undef HAS_IOCTL               /**/
+#endif
  
 /* HAS_UTIME:
  *     This symbol, if defined, indicates that the routine utime() is
@@ -498,9 +513,13 @@ struct utimbuf {
  * help it out a bit.
  */
 #  ifndef DONT_MASK_RTL_CALLS
-#    define sigaction(a,b,c) Perl_my_sigaction(a,b,c)
+#    define sigaction(a,b,c) Perl_my_sigaction(aTHX_ a,b,c)
 #  endif
 #endif
+#ifdef KILL_BY_SIGPRC
+#  define kill  Perl_my_kill
+#endif
+
 
 /* VMS doesn't use a real sys_nerr, but we need this when scanning for error
  * messages in text strings . . .
@@ -551,6 +570,7 @@ typedef struct _dirdesc {
     char                       *pattern;
     struct dirent              entry;
     struct dsc$descriptor_s    pat;
+    void                       *mutex;
 } DIR;
 
 #define rewinddir(dirp)                seekdir((dirp), 0)
@@ -758,9 +778,15 @@ FILE *     Perl_my_tmpfile ();
 #ifndef HOMEGROWN_POSIX_SIGNALS
 int    Perl_my_sigaction (pTHX_ int, const struct sigaction*, struct sigaction*);
 #endif
+#ifdef KILL_BY_SIGPRC
+unsigned int   Perl_sig_to_vmscondition (int);
+int    Perl_my_kill (int, int);
+void   Perl_csighandler_init (void);
+#endif
 int    Perl_my_utime (pTHX_ char *, struct utimbuf *);
 void   Perl_vms_image_init (int *, char ***);
 struct dirent *        Perl_readdir (pTHX_ DIR *);
+int    Perl_readdir_r(pTHX_ DIR *, struct dirent *, struct dirent **);
 long   telldir (DIR *);
 void   Perl_seekdir (pTHX_ DIR *, long);
 void   closedir (DIR *);