]> git.saurik.com Git - bison.git/blobdiff - src/files.c
On syntax errors, report the token on which we choked.
[bison.git] / src / files.c
index 5f8fda44407313da468ede6a1d266ea8627cf5b3..e8556a258c6e2a7a71a9c5802d4b3736deea6988 100644 (file)
@@ -19,6 +19,8 @@ the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 Boston, MA 02111-1307, USA.  */
 
 
+#include "system.h"
+
 #if defined (VMS) & !defined (__VMS_POSIX)
 #include <ssdef.h>
 #define unlink delete
@@ -40,7 +42,11 @@ Boston, MA 02111-1307, USA.  */
 #endif
 
 #include <stdio.h>
-#include "system.h"
+
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
 #include "files.h"
 #include "alloc.h"
 #include "gram.h"
@@ -78,6 +84,7 @@ 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 */
+int tryclose PARAMS((FILE *));
 void done PARAMS((int));
 
 extern char *program_name;
@@ -117,7 +124,9 @@ void
 openfiles (void)
 {
   char *name_base;
+#ifdef MSDOS
   register char *cp;
+#endif
   char *filename;
   int base_length;
   int short_base_length;
@@ -145,7 +154,7 @@ openfiles (void)
   strlwr (infile);
 #endif /* _WIN32 && !__CYGWIN32__ */
 
-#if (defined(unix) || defined(__unix) || defined(__unix__))
+#if (defined(unix) || defined(__unix) || defined(__unix__) || defined(__EMX__))
   {
     char *tmp_ptr = getenv("TMPDIR");
 
@@ -322,10 +331,12 @@ open_extra_files (void)
 {
   FILE *ftmp;
   int c;
-  char *filename, *cp;
+  char *filename;
+#ifdef MSDOS
+  char *cp;
+#endif
 
-  if (fparser)
-    fclose(fparser);
+  tryclose(fparser);
 
   if (! noparserflag) 
     {
@@ -350,7 +361,7 @@ open_extra_files (void)
   rewind(fattrs);
   while((c=getc(fattrs))!=EOF) /* Thank god for buffering */
     putc(c,ftmp);
-  fclose(fattrs);
+  tryclose(fattrs);
   fattrs=ftmp;
 
   fguard = tryopen(guardfile, "w");
@@ -374,26 +385,33 @@ tryopen (char *name, char *mode)
   return ptr;
 }
 
-void
-done (int k)
+int
+tryclose (FILE *ptr)
 {
-  if (faction)
-    fclose(faction);
-
-  if (fattrs)
-    fclose(fattrs);
+  int result;
 
-  if (fguard)
-    fclose(fguard);
-
-  if (finput)
-    fclose(finput);
+  if (ptr == NULL)
+    return 0;
 
-  if (fparser)
-    fclose(fparser);
+  result = fclose (ptr);
+  if (result == EOF)
+    {
+      fprintf (stderr, "%s: ", program_name);
+      perror ("fclose");
+      done (2);
+    }
+  return result;
+}
 
-  if (foutput)
-    fclose(foutput);
+void
+done (int k)
+{
+  tryclose(faction);
+  tryclose(fattrs);
+  tryclose(fguard);
+  tryclose(finput);
+  tryclose(fparser);
+  tryclose(foutput);
 
        /* JF write out the output file */
   if (k == 0 && ftable)
@@ -405,8 +423,8 @@ done (int k)
       rewind(ftable);
       while((c=getc(ftable)) != EOF)
         putc(c,ftmp);
-      fclose(ftmp);
-      fclose(ftable);
+      tryclose(ftmp);
+      tryclose(ftable);
 
       if (definesflag)
         {
@@ -415,8 +433,8 @@ done (int k)
           rewind(fdefines);
           while((c=getc(fdefines)) != EOF)
             putc(c,ftmp);
-          fclose(ftmp);
-          fclose(fdefines);
+          tryclose(ftmp);
+          tryclose(fdefines);
         }
     }