]> granicus.if.org Git - flex/commitdiff
Patch for full file system failure.
authorJohn Millaway <john43@users.sourceforge.net>
Tue, 14 Feb 2006 03:32:28 +0000 (03:32 +0000)
committerJohn Millaway <john43@users.sourceforge.net>
Tue, 14 Feb 2006 03:32:28 +0000 (03:32 +0000)
filter.c
gen.c
libyywrap.c
main.c

index b2cf320c982def15905db136845508fb9b286175..001872132867d2e89cb51e4159ba076ae1e05b77 100644 (file)
--- a/filter.c
+++ b/filter.c
@@ -293,12 +293,23 @@ int filter_tee_header (struct filter *chain)
                fputs ("m4_undefine( [[M4_YY_IN_HEADER]])m4_dnl\n", to_h);
 
                fflush (to_h);
-               fclose (to_h);
+           if (ferror (to_h))
+                   lerrsf (_("error writing output file %s"),
+                (char *) chain->extra);
+
+       else if (fclose (to_h))
+               lerrsf (_("error closing output file %s"),
+                (char *) chain->extra);
        }
 
        fflush (to_c);
-       fclose (to_c);
+       if (ferror (to_c))
+               lerrsf (_("error writing output file %s"),
+                       outfilename ? outfilename : "<stdout>");
 
+       else if (fclose (to_c))
+               lerrsf (_("error closing output file %s"),
+                       outfilename ? outfilename : "<stdout>");
 
        while (wait (0) > 0) ;
 
@@ -380,6 +391,13 @@ int filter_fix_linedirs (struct filter *chain)
                lineno++;
        }
        fflush (stdout);
+       if (ferror (stdout))
+               lerrsf (_("error writing output file %s"),
+                       outfilename ? outfilename : "<stdout>");
+
+       else if (fclose (stdout))
+               lerrsf (_("error closing output file %s"),
+                       outfilename ? outfilename : "<stdout>");
 
        return 0;
 }
diff --git a/gen.c b/gen.c
index 5f4b4aa07aa193e2b5dc1544c3edd01ffd35b059..b78f59581d26fe808cfd42be4b1c19fec0e8a0e0 100644 (file)
--- a/gen.c
+++ b/gen.c
@@ -1982,7 +1982,7 @@ void make_tables ()
        do_indent ();
        out_str ("for ( yyl = %s; yyl < yyleng; ++yyl )\n",
                 yymore_used ? (yytext_is_array ? "YY_G(yy_prev_more_offset)" :
-                               "(yy_more_len)") : "0");
+                               "YY_G(yy_more_len)") : "0");
        indent_up ();
        indent_puts ("if ( yytext[yyl] == '\\n' )");
        indent_up ();
index 6345d9da0918ed6fc4c1ed57061e79b81aaeff69..8561a43f4cdd328872537814a9d7695e31c42696 100644 (file)
@@ -21,8 +21,7 @@
 /*  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR */
 /*  PURPOSE. */
 
-
-int     yywrap ()
+int     yywrap (void)
 {
        return 1;
 }
diff --git a/main.c b/main.c
index 0527595aee3f636c7ac1cecb1fb83884b9de0a4d..101ead8c482bd663efe4c078ae93c838bbecbfcd 100644 (file)
--- a/main.c
+++ b/main.c
@@ -148,7 +148,7 @@ int flex_main (argc, argv)
      int argc;
      char   *argv[];
 {
-       int     i, exit_status;
+       int     i, exit_status, child_status;
 
        /* Set a longjmp target. Yes, I know it's a hack, but it gets worse: The
         * return value of setjmp, if non-zero, is the desired exit code PLUS ONE.
@@ -163,9 +163,17 @@ int flex_main (argc, argv)
             fflush(stdout);
             fclose(stdout);
         }
-        while (wait(0) > 0){
+        while (wait(&child_status) > 0){
+            if (!WIFEXITED (child_status)
+                || WEXITSTATUS (child_status) != 0){
+                /* report an error of a child
+                 */
+                if( exit_status <= 1 )
+                    exit_status = 2;
+
+            }
         }
-               return exit_status - 1;
+        return exit_status - 1;
     }
 
        flexinit (argc, argv);
@@ -1602,7 +1610,6 @@ void readin ()
                        outn ("#else");
                        outn (yy_stdinit);
                        outn ("#endif");
-                       outn ("#endif");
                }
 
                else {