From: "Anthony G. Basile" <blueness@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/eudev:master commit in: src/udev/
Date: Tue, 9 Feb 2021 19:08:05 +0000 (UTC) [thread overview]
Message-ID: <1612897654.14748acf5e6e11db07e61ac188d6d1e799f29c6a.blueness@gentoo> (raw)
commit: 14748acf5e6e11db07e61ac188d6d1e799f29c6a
Author: Thomas Deutschmann <whissi <AT> gentoo <DOT> org>
AuthorDate: Tue Feb 9 12:17:06 2021 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Tue Feb 9 19:07:34 2021 +0000
URL: https://gitweb.gentoo.org/proj/eudev.git/commit/?id=14748acf
udevadm: hwdb: sync with systemd
Backports some changes from https://github.com/systemd/systemd/commit/6a34639e76b8b59233a97533b13836d5a44e8d4a.
Signed-off-by: Thomas Deutschmann <whissi <AT> gentoo.org>
Signed-off-by: Anthony G. Basile <blueness <AT> gentoo.org>
src/udev/udevadm-hwdb.c | 44 +++++++++++++++++++++++++++++++-------------
1 file changed, 31 insertions(+), 13 deletions(-)
diff --git a/src/udev/udevadm-hwdb.c b/src/udev/udevadm-hwdb.c
index 9df043835..6bc108783 100644
--- a/src/udev/udevadm-hwdb.c
+++ b/src/udev/udevadm-hwdb.c
@@ -426,21 +426,25 @@ static int insert_data(struct trie *trie, struct udev_list *match_list,
char *value;
struct udev_list_entry *entry;
+ assert(line[0] == ' ');
+
value = strchr(line, '=');
if (!value) {
- log_error("Error, key/value pair expected but got '%s' in '%s':", line, filename);
+ log_error("Warning, key-value pair expected but got \"%s\", ignoring", line);
return -EINVAL;
}
value[0] = '\0';
value++;
- /* libudev requires properties to start with a space */
+ /* Replace multiple leading spaces by a single space */
while (isblank(line[0]) && isblank(line[1]))
line++;
- if (line[0] == '\0' || value[0] == '\0') {
- log_error("Error, empty key or value '%s' in '%s':", line, filename);
+ if (isempty(line + 1) || isempty(value)) {
+ log_error("Warning, empty %s in \"%s=%s\", ignoring",
+ isempty(line + 1) ? "key" : "value",
+ line, value);
return -EINVAL;
}
@@ -459,17 +463,21 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
FILE *f;
char line[LINE_MAX];
struct udev_list match_list;
+ uint32_t line_number = 0;
+ int r = 0, err;
udev_list_init(udev, &match_list, false);
f = fopen(filename, "re");
- if (f == NULL)
+ if (!f)
return -errno;
while (fgets(line, sizeof(line), f)) {
size_t len;
char *pos;
+ ++line_number;
+
/* comment line */
if (line[0] == '#')
continue;
@@ -491,7 +499,8 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
break;
if (line[0] == ' ') {
- log_error("Error, MATCH expected but got '%s' in '%s':", line, filename);
+ log_error("Warning, match expected but got indented property \"%s\", ignoring line", line);
+ r = -EINVAL;
break;
}
@@ -502,46 +511,55 @@ static int import_file(struct udev *udev, struct trie *trie, const char *filenam
case HW_MATCH:
if (len == 0) {
- log_error("Error, DATA expected but got empty line in '%s':", filename);
+ log_error("Warning, property expected, ignoring record with no properties");
+ r = -EINVAL;
state = HW_NONE;
udev_list_cleanup(&match_list);
break;
}
- /* another match */
if (line[0] != ' ') {
+ /* another match */
udev_list_entry_add(&match_list, line, NULL);
break;
}
/* first data */
state = HW_DATA;
- insert_data(trie, &match_list, line, filename);
+ err = insert_data(trie, &match_list, line, filename);
+ if (err < 0)
+ r = err;
break;
case HW_DATA:
- /* end of record */
if (len == 0) {
+ /* end of record */
state = HW_NONE;
udev_list_cleanup(&match_list);
break;
}
if (line[0] != ' ') {
- log_error("Error, DATA expected but got '%s' in '%s':", line, filename);
+ log_error("Warning, property or empty line expected, got \"%s\", ignoring record", line);
+ r = -EINVAL;
state = HW_NONE;
udev_list_cleanup(&match_list);
break;
}
- insert_data(trie, &match_list, line, filename);
+ err = insert_data(trie, &match_list, line, filename);
+ if (err < 0)
+ r = err;
break;
};
}
+ if (state == HW_MATCH)
+ log_error("Warning, property expected, ignoring record with no properties");
+
fclose(f);
udev_list_cleanup(&match_list);
- return 0;
+ return r;
}
static void help(void) {
next reply other threads:[~2021-02-09 19:08 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-02-09 19:08 Anthony G. Basile [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-08-23 16:06 [gentoo-commits] proj/eudev:master commit in: src/udev/ Anthony G. Basile
2021-08-23 16:03 Anthony G. Basile
2021-08-23 15:55 Anthony G. Basile
2021-02-09 19:08 Anthony G. Basile
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1612897654.14748acf5e6e11db07e61ac188d6d1e799f29c6a.blueness@gentoo \
--to=blueness@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox