Add fallback to tmpfile for use in cases where user's relying on
Charles Bailey [Mon, 29 May 2000 16:22:08 +0000 (16:22 +0000)]
       ACLs on SYS$SCRATCH to permit file creation. (based on Charles
       Lane's patch)

p4raw-id: //depot/vmsperl@6158

vms/vms.c
vms/vmsish.h

index cc1184b..de4a374 100644 (file)
--- a/vms/vms.c
+++ b/vms/vms.c
@@ -936,6 +936,28 @@ my_chdir(char *dir)
 }  /* end of my_chdir */
 /*}}}*/
 
+
+/*{{{FILE *my_tmpfile()*/
+FILE *
+my_tmpfile(void)
+{
+  FILE *fp;
+  char *cp;
+  dTHX;
+
+  if ((fp = tmpfile())) return fp;
+
+  New(1323,cp,L_tmpnam+24,char);
+  strcpy(cp,"Sys$Scratch:");
+  tmpnam(cp+strlen(cp));
+  strcat(cp,".Perltmp");
+  fp = fopen(cp,"w+","fop=dlt");
+  Safefree(cp);
+  return fp;
+}
+/*}}}*/
+
+
 static void
 create_mbx(unsigned short int *chan, struct dsc$descriptor_s *namdsc)
 {
index a181e7c..382e314 100644 (file)
 #define kill_file              Perl_kill_file
 #define my_mkdir               Perl_my_mkdir
 #define my_chdir               Perl_my_chdir
+#define my_tmpfile             Perl_my_tmpfile
 #define my_utime               Perl_my_utime
 #define rmsexpand      Perl_rmsexpand
 #define rmsexpand_ts   Perl_rmsexpand_ts
 #  define vfork my_vfork
 #endif
 
+/*
+ * Toss in a shim to tmpfile which creates a plain temp file if the
+ * RMS tmp mechanism won't work (e.g. if someone is relying on ACLs
+ * from a specific directory to permit creation of files).
+ */
+#ifndef DONT_MASK_RTL_CALLS
+#  define tmpfile my_tmpfile
+#endif
+
+
 /* BIG_TIME:
  *     This symbol is defined if Time_t is an unsigned type on this system.
  */
@@ -643,6 +654,7 @@ int do_rmdir (char *);
 int    kill_file (char *);
 int    my_mkdir (char *, Mode_t);
 int    my_chdir (char *);
+FILE * my_tmpfile (void);
 int    my_utime (char *, struct utimbuf *);
 char * rmsexpand (char *, char *, char *, unsigned);
 char * rmsexpand_ts (char *, char *, char *, unsigned);