summaryrefslogtreecommitdiff
path: root/util/sconfig/main.c
diff options
context:
space:
mode:
authorStefan Reinauer <stepan@coresystems.de>2010-08-16 18:21:56 +0000
committerStefan Reinauer <stepan@openbios.org>2010-08-16 18:21:56 +0000
commit7c1f6b84896465321e3051ed7b153f18328c3b12 (patch)
tree9d0e168997b37f466d56eb7783b35034ca230934 /util/sconfig/main.c
parent154931c66fcc70424a10f3c99f63e361538cd888 (diff)
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
Diffstat (limited to 'util/sconfig/main.c')
-rwxr-xr-xutil/sconfig/main.c22
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;
}