Hello, While configuring a remote control I noticed that the ir-keytable utility would throw the message "Invalid parameter on line 1" if the first line following the "table ... type: ..." line is a comment. Also, if a configuration line is invalid, the line number indication of the error message is sometimes incorrect, because the comments before it are not counted. This happens because of the "continue" statement when processing comments (or the table/type line), thus skipping the line counter increase at the end of the loop. The included patch fixes both problems by making sure the counter is always increased. The parse_cfgfile() function had a similar problem. For the "table ... type: ..." configuration line at the beginning of a keyfile, I suggest replacing the marker character by something different from '#'. That way, it can be commented out by the user, and it doesn't have to be on the first line. However, that's something for another patch and probably up to someone else to decide :-). If desirable, I can generate such a patch. Regards, Chris Signed-off-by: Chris Pockelé <chris.pockele.f1@xxxxxxxxx>
diff -ru a/utils/keytable/keytable.c b/utils/keytable/keytable.c --- a/utils/keytable/keytable.c 2012-01-08 15:22:15.000000000 +0100 +++ b/utils/keytable/keytable.c 2012-01-08 21:17:11.215826012 +0100 @@ -201,9 +201,11 @@ while (fgets(s, sizeof(s), fin)) { char *p = s; + + line++; while (*p == ' ' || *p == '\t') p++; - if (!line && p[0] == '#') { + if (line==1 && p[0] == '#') { p++; p = strtok(p, "\n\t =:"); do { @@ -278,7 +280,6 @@ return ENOMEM; } nextkey = nextkey->next; - line++; } fclose(fin); @@ -286,7 +287,7 @@ err_einval: fprintf(stderr, "Invalid parameter on line %d of %s\n", - line + 1, fname); + line, fname); return EINVAL; } @@ -311,6 +312,8 @@ while (fgets(s, sizeof(s), fin)) { char *p = s; + + line++; while (*p == ' ' || *p == '\t') p++; @@ -348,7 +351,6 @@ return ENOMEM; } nextcfg = nextcfg->next; - line++; } fclose(fin); @@ -356,7 +358,7 @@ err_einval: fprintf(stderr, "Invalid parameter on line %d of %s\n", - line + 1, fname); + line, fname); return EINVAL; }