diff options
author | Stefan Reinauer <stepan@coresystems.de> | 2010-08-16 18:21:56 +0000 |
---|---|---|
committer | Stefan Reinauer <stepan@openbios.org> | 2010-08-16 18:21:56 +0000 |
commit | 7c1f6b84896465321e3051ed7b153f18328c3b12 (patch) | |
tree | 9d0e168997b37f466d56eb7783b35034ca230934 | |
parent | 154931c66fcc70424a10f3c99f63e361538cd888 (diff) | |
download | coreboot-7c1f6b84896465321e3051ed7b153f18328c3b12.tar.xz |
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 <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
-rwxr-xr-x | util/sconfig/main.c | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/util/sconfig/main.c b/util/sconfig/main.c index 40a220aa44..4abfd2c3bb 100755 --- a/util/sconfig/main.c +++ b/util/sconfig/main.c @@ -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; } |