sconfig parser:
authorStefan Reinauer <stepan@coresystems.de>
Mon, 16 Aug 2010 18:21:56 +0000 (18:21 +0000)
committerStefan Reinauer <stepan@openbios.org>
Mon, 16 Aug 2010 18:21:56 +0000 (18:21 +0000)
 - 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 <stepan@coresystems.de>
Acked-by: Patrick Georgi <patrick.georgi@coresystems.de>
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@5701 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1

util/sconfig/main.c

index 40a220aa446fd4eb0395c9040ce07ef9ac1cff29..4abfd2c3bbc26180c02e5a1df1909e297ccf6e4f 100755 (executable)
@@ -89,7 +89,9 @@ int yywrap(void) {
 
 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 @@ int main(int argc, char** argv) {
        sprintf(headers.next->name, "mainboard/%s", mainboard);
 
        FILE *filec = fopen(devtree, "r");
-       yyrestart(filec);
+       if (!filec) {
+               fprintf(stderr, "Could not open file '%s' for reading: ", devtree);
+               perror(NULL);
+               exit(1);
+       }
 
-       FILE *staticc = fopen(outputc, "w");
+       yyrestart(filec);
 
        lastdev = head = &root;
+
        yyparse();
+
        fclose(filec);
 
        if ((head->type == chip) && (!head->chiph_exists)) {
@@ -422,6 +430,13 @@ int main(int argc, char** argv) {
                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 @@ int main(int argc, char** argv) {
        walk_device_tree(staticc, &root, pass1, NULL);
 
        fclose(staticc);
+
        return 0;
 }