udev: rules - print the first invalid character

The current code would print the character following the first invalid
character.

Given an udev rules-file without a trailing newline we would otherwise print
garbage:

  invalid key/value pair in file /usr/lib/udev/rules.d/40-usb-media-players.rules
  on line 26, starting at character 25 ('m')

This is now changed to print

  invalid key/value pair in file /usr/lib/udev/rules.d/40-usb-media-players.rules
  on line 26, starting at character 25 ('')

(still not very good as printing \0 just gives the empty string)

(cherry picked from commit 6501b52d35)
This commit is contained in:
Tom Gundersen
2015-01-15 21:59:51 -05:00
committed by Zbigniew Jędrzejewski-Szmek
parent da8e1184c5
commit e521e552db
+2 -2
View File
@@ -1068,13 +1068,13 @@ static int add_rule(struct udev_rules *rules, char *line,
/* If we aren't at the end of the line, this is a parsing error.
* Make a best effort to describe where the problem is. */
if (*linepos != '\n') {
char buf[2] = {linepos[1]};
char buf[2] = {*linepos};
_cleanup_free_ char *tmp;
tmp = cescape(buf);
log_error("invalid key/value pair in file %s on line %u, starting at character %tu ('%s')\n",
filename, lineno, linepos - line + 1, tmp);
if (linepos[1] == '#')
if (*linepos == '#')
log_error("hint: comments can only start at beginning of line");
}
break;