]> git.saurik.com Git - bison.git/blobdiff - src/files.c
Ditch sprintf to statically-sized buffers in fatal/warn functions in
[bison.git] / src / files.c
index 1df92ec3fb9582d762d10fc3d410224e98c29a88..ba51cce48e900d61ff34039f84d0b7594a5ca4d5 100644 (file)
@@ -72,8 +72,12 @@ extern int noparserflag;
 extern char    *mktemp();      /* So the compiler won't complain */
 extern char    *getenv();
 extern void    perror();
-FILE   *tryopen();     /* This might be a good idea */
-void done();
+
+char *stringappend PARAMS((char *, int, char *));
+void openfiles PARAMS((void));
+void open_extra_files PARAMS((void));
+FILE *tryopen PARAMS((char *, char *));        /* This might be a good idea */
+void done PARAMS((int));
 
 extern char *program_name;
 extern int verboseflag;
@@ -81,11 +85,8 @@ extern int definesflag;
 int fixed_outfiles = 0;
 \f
 
-char*
-stringappend(string1, end1, string2)
-char *string1;
-int end1;
-char *string2;
+char *
+stringappend (char *string1, int end1, char *string2)
 {
   register char *ostring;
   register char *cp, *cp1;
@@ -102,7 +103,8 @@ char *string2;
     *cp++ = *cp1++;
 
   cp1 = string2;
-  while (*cp++ = *cp1++) ;
+  while ((*cp++ = *cp1++))
+    ;
 
   return ostring;
 }
@@ -111,7 +113,7 @@ char *string2;
 /* JF this has been hacked to death.  Nowaday it sets up the file names for
    the output files, and opens the tmp files and the parser */
 void
-openfiles()
+openfiles (void)
 {
   char *name_base;
   register char *cp;
@@ -133,6 +135,24 @@ openfiles()
   strlwr (infile);
 #endif /* MSDOS */
 
+#if (defined(_WIN32) && !defined(__CYGWIN32__))
+  tmp_base = getenv ("TEMP");          /* Windows95 defines this ... */
+  if (tmp_base == 0)
+    tmp_base = getenv ("Temp");                /* ... while NT prefers this */
+  if (tmp_base == 0)
+    tmp_base = "";
+  strlwr (infile);
+#endif /* _WIN32 && !__CYGWIN32__ */
+
+#if (defined(unix) || defined(__unix) || defined(__unix__))
+  {
+    char *tmp_ptr = getenv("TMPDIR");
+
+    if (tmp_ptr != 0)
+      tmp_base = stringappend (tmp_ptr, strlen (tmp_ptr), "/b.");
+  }
+#endif  /* unix || __unix || __unix__ */
+
   tmp_len = strlen (tmp_base);
 
   if (spec_outfile)
@@ -263,13 +283,13 @@ openfiles()
       fdefines = tryopen(tmpdefsfile, "w+");
     }
 
-#ifndef MSDOS
+#if !(defined (MSDOS) || (defined(_WIN32) && !defined(__CYGWIN32__)))
   if (! noparserflag)
     unlink(actfile);
   unlink(tmpattrsfile);
   unlink(tmptabfile);
   unlink(tmpdefsfile);
-#endif
+#endif /* MSDOS || (_WIN32 && !__CYGWIN32__) */
 
        /* These are opened by `done' or `open_extra_files', if at all */
   if (spec_outfile)
@@ -297,7 +317,7 @@ openfiles()
 This is done when %semantic_parser is seen in the declarations section.  */
 
 void
-open_extra_files()
+open_extra_files (void)
 {
   FILE *ftmp;
   int c;
@@ -339,9 +359,7 @@ open_extra_files()
        /* JF to make file opening easier.  This func tries to open file
           NAME with mode MODE, and prints an error message if it fails. */
 FILE *
-tryopen(name, mode)
-char *name;
-char *mode;
+tryopen (char *name, char *mode)
 {
   FILE *ptr;
 
@@ -356,8 +374,7 @@ char *mode;
 }
 
 void
-done(k)
-int k;
+done (int k)
 {
   if (faction)
     fclose(faction);
@@ -412,12 +429,12 @@ int k;
   if (k==0) sys$exit(SS$_NORMAL);
   sys$exit(SS$_ABORT);
 #else
-#ifdef MSDOS
+#if (defined (MSDOS) || (defined(_WIN32) && !defined(__CYGWIN32__)))
   if (actfile && ! noparserflag) unlink(actfile);
   if (tmpattrsfile) unlink(tmpattrsfile);
   if (tmptabfile) unlink(tmptabfile);
   if (tmpdefsfile) unlink(tmpdefsfile);
-#endif /* MSDOS */
+#endif /* MSDOS || (_WIN32 && !__CYGWIN32__) */
   exit(k);
 #endif /* not VMS, or __VMS_POSIX */
 }