#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 HAVE_INTERP_INTERN
struct interp_intern {
int hushed;
- float inv_rand_max;
- struct dsc$descriptor_s VMScmd;
+ double inv_rand_max;
};
#define VMSISH_HUSHED (PL_sys_intern.hushed)
#define MY_INV_RAND_MAX (PL_sys_intern.inv_rand_max)
-#define VMSCMD (PL_sys_intern.VMScmd)
/* 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
* 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
char *pattern;
struct dirent entry;
struct dsc$descriptor_s pat;
+ void *mutex;
} DIR;
#define rewinddir(dirp) seekdir((dirp), 0)
/* Since we've got to match the size of the CRTL's stat_t, we need
* to mimic DECC's alignment settings.
*/
+#ifdef USE_LARGE_FILES
+/* Mimic the new stat structure, filler fields, and alignment. */
+#if defined(__DECC) || defined(__DECCXX)
+# pragma __member_alignment __save
+# pragma member_alignment
+#endif
+
+struct mystat
+{
+ char *st_devnam; /* pointer to device name */
+ char *st_fill_dev;
+ unsigned st_ino; /* hack - CRTL uses unsigned short[3] for */
+ unsigned short rvn; /* FID (num,seq,rvn) */
+ unsigned short st_fill_ino;
+ unsigned short st_mode; /* file "mode" i.e. prot, dir, reg, etc. */
+ unsigned short st_fill_mode;
+ int st_nlink; /* for compatibility - not really used */
+ unsigned st_uid; /* from ACP - QIO uic field */
+ unsigned short st_gid; /* group number extracted from st_uid */
+ unsigned short st_fill_gid;
+ dev_t st_rdev; /* for compatibility - always zero */
+ off_t st_size; /* file size in bytes */
+ unsigned st_atime; /* file access time; always same as st_mtime */
+ unsigned st_fill_atime;
+ unsigned st_mtime; /* last modification time */
+ unsigned st_fill_mtime;
+ unsigned st_ctime; /* file creation time */
+ unsigned st_fill_ctime;
+ char st_fab_rfm; /* record format */
+ char st_fab_rat; /* record attributes */
+ char st_fab_fsz; /* fixed header size */
+ char st_fab_fill;
+ unsigned st_fab_mrs; /* record size */
+ int st_fill_expand[7]; /* will probably fill from beginning, so put our st_dev at end */
+ unsigned st_dev; /* encoded device name */
+};
+
+#else /* !defined(USE_LARGE_FILES) */
+
#if defined(__DECC) || defined(__DECCXX)
# pragma __member_alignment __save
# pragma __nomember_alignment
# pragma __message disable (__MISALGNDSTRCT)
# pragma __message disable (__MISALGNDMEM)
#endif
+
struct mystat
{
char *st_devnam; /* pointer to device name */
*/
char st_fill1[sizeof(void *) - (3*sizeof(unsigned short) + 3*sizeof(char))%sizeof(void *)];
};
+
+#if defined(__DECC)
+# pragma __message __restore
+#endif
+
+#endif /* defined(USE_LARGE_FILES) */
+
+#if defined(__DECC) || defined(__DECCXX)
+# pragma __member_alignment __restore
+#endif
+
typedef unsigned mydev_t;
typedef unsigned myino_t;
# define dev_t mydev_t
# define ino_t myino_t
#endif
-#if defined(__DECC) || defined(__DECCXX)
-# pragma __member_alignment __restore
-#endif
-#if defined(__DECC)
-# pragma __message __restore
-#endif
/* Cons up a 'delete' bit for testing access */
#define S_IDUSR (S_IWUSR | S_IXUSR)
#define S_IDGRP (S_IWGRP | S_IXGRP)
bool Perl_vms_do_aexec (pTHX_ SV *, SV **, SV **);
#endif
char * Perl_my_getenv_len (pTHX_ const char *, unsigned long *, bool);
-int Perl_vmssetenv (pTHX_ char *, char *, struct dsc$descriptor_s **);
+int Perl_vmssetenv (pTHX_ const char *, const char *, struct dsc$descriptor_s **);
void Perl_vmssetuserlnm(pTHX_ char *name, char *eqv);
char * Perl_my_crypt (pTHX_ const char *, const char *);
Pid_t Perl_my_waitpid (pTHX_ Pid_t, int *, int);
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 *);
+int Perl_my_utime (pTHX_ const char *, const 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 *);