See patch

-- 
coresystems GmbH • Brahmsstr. 16 • D-79104 Freiburg i. Br.
      Tel.: +49 761 7668825 • Fax: +49 761 7664613
Email: i...@coresystems.de  • http://www.coresystems.de/
Registergericht: Amtsgericht Freiburg • HRB 7656
Geschäftsführer: Stefan Reinauer • Ust-IdNr.: DE245674866

sconfig parser:
 - print erroneous string in error message
 - print line numbers starting from 1 instead of 0
 - exit with return code 1 on errors
 - check return values of fopen operations
 - only create output file if input file was parsed without errors

Signed-off-by: Stefan Reinauer <ste...@coresystems.de>

Index: util/sconfig/main.c
===================================================================
--- util/sconfig/main.c (revision 5692)
+++ util/sconfig/main.c (working copy)
@@ -89,7 +89,9 @@
 
 void yyerror (char const *str)
 {
-       fprintf (stderr, "line %d: %s\n", linenum, str);
+       extern char *yytext;
+       fprintf (stderr, "line %d: %s: %s\n", linenum + 1, yytext, str);
+       exit(1);
 }
 
 void postprocess_devtree(void) {
@@ -408,12 +410,18 @@
        sprintf(headers.next->name, "mainboard/%s", mainboard);
 
        FILE *filec = fopen(devtree, "r");
+       if (!filec) {
+               fprintf(stderr, "Could not open file '%s' for reading: ", 
devtree);
+               perror(NULL);
+               exit(1);
+       }
+
        yyrestart(filec);
 
-       FILE *staticc = fopen(outputc, "w");
+       lastdev = head = &root;
 
-       lastdev = head = &root;
        yyparse();
+
        fclose(filec);
 
        if ((head->type == chip) && (!head->chiph_exists)) {
@@ -422,6 +430,13 @@
                while (head->next != tmp) head = head->next;
        }
 
+       FILE *staticc = fopen(outputc, "w");
+       if (!staticc) {
+               fprintf(stderr, "Could not open file '%s' for writing: ", 
outputc);
+               perror(NULL);
+               exit(1);
+       }
+
        fprintf(staticc, "#include <device/device.h>\n");
        fprintf(staticc, "#include <device/pci.h>\n");
        struct header *h = &headers;
@@ -435,5 +450,6 @@
        walk_device_tree(staticc, &root, pass1, NULL);
 
        fclose(staticc);
+
        return 0;
 }
-- 
coreboot mailing list: coreboot@coreboot.org
http://www.coreboot.org/mailman/listinfo/coreboot

Reply via email to