[PATCH] scripts: imx: report file where error occurred

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Especially when using #include directives in imxcfg files, error
messages can be hard to follow because line numbers differ between
preprocessor and source files. Teach the imx image generation tool about
the postprocessed line number / file name directive, so it can give more
useful error messages. Instead of:

  error in line 11: Invalid argument

It now says:

  $barebox/arch/arm/boards/$som/flash-header-$board.imxcfg:5: Invalid argument

No change in compiled barebox binaries.

Signed-off-by: Ahmad Fatoum <a.fatoum@xxxxxxxxxxxxxx>
---
 scripts/imx/imx.c | 22 +++++++++++++++++-----
 1 file changed, 17 insertions(+), 5 deletions(-)

diff --git a/scripts/imx/imx.c b/scripts/imx/imx.c
index b3e8d62ba8b6..8cefdee6ceec 100644
--- a/scripts/imx/imx.c
+++ b/scripts/imx/imx.c
@@ -673,13 +673,16 @@ static char *readcmd(struct config_data *data, FILE *f)
 	}
 }
 
-int parse_config(struct config_data *data, const char *filename)
+int parse_config(struct config_data *data, const char *_filename)
 {
 	FILE *f;
 	int lineno = 0;
 	char *line = NULL, *tmp;
 	char *argv[MAXARGS];
 	int nargs, i, ret = 0;
+	char *filename;
+
+	filename = strdup(_filename);
 
 	f = fopen(filename, "r");
 	if (!f) {
@@ -695,8 +698,17 @@ int parse_config(struct config_data *data, const char *filename)
 		lineno++;
 
 		tmp = strchr(line, '#');
-		if (tmp)
-			*tmp = 0;
+		if (tmp) {
+			char *endptr;
+			long linenum = strtol(tmp + 1, &endptr, 10);
+			if (strncmp(endptr, " \"", 2) == 0 && endptr[2]) {
+				free(filename);
+				lineno = linenum - 1;
+				filename = strdup(endptr + 2);
+				filename[strlen(filename) - 1] = '\0';
+			}
+			*tmp = '\0';
+		}
 
 		nargs = parse_line(line, argv);
 		if (!nargs)
@@ -708,8 +720,8 @@ int parse_config(struct config_data *data, const char *filename)
 			if (!strcmp(cmds[i].name, argv[0])) {
 				ret = cmds[i].parse(data, nargs, argv);
 				if (ret) {
-					fprintf(stderr, "error in line %d: %s\n",
-							lineno, strerror(-ret));
+					fprintf(stderr, "%s:%d: %s\n",
+						filename, lineno, strerror(-ret));
 					goto cleanup;
 				}
 				break;
-- 
2.24.0


_______________________________________________
barebox mailing list
barebox@xxxxxxxxxxxxxxxxxxx
http://lists.infradead.org/mailman/listinfo/barebox



[Index of Archives]     [Linux Embedded]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux