From: David Tardon Date: Tue, 29 Apr 2025 12:29:59 +0000 (+0200) Subject: udevadm: allow key without a value X-Git-Tag: v258-rc1~661^2~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=9925193a768d5b975497988a0d3f180b927c6282;p=thirdparty%2Fsystemd.git udevadm: allow key without a value --- diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c index fd2df5b2739..1838d12f5f5 100644 --- a/src/udev/udevadm-info.c +++ b/src/udev/udevadm-info.c @@ -1054,7 +1054,7 @@ int info_main(int argc, char *argv[], void *userdata) { if (r < 0) return r; - r = parse_key_value_argument(optarg, &k, &v); + r = parse_key_value_argument(optarg, /* require_value= */ true, &k, &v); if (r < 0) return r; @@ -1072,7 +1072,7 @@ int info_main(int argc, char *argv[], void *userdata) { if (r < 0) return r; - r = parse_key_value_argument(optarg, &k, &v); + r = parse_key_value_argument(optarg, /* require_value= */ true, &k, &v); if (r < 0) return r; diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c index 0b18e2add90..e3ea2879cf0 100644 --- a/src/udev/udevadm-util.c +++ b/src/udev/udevadm-util.c @@ -145,7 +145,7 @@ int parse_resolve_name_timing(const char *str, ResolveNameTiming *ret) { return 1; } -int parse_key_value_argument(const char *s, char **key, char **value) { +int parse_key_value_argument(const char *s, bool require_value, char **key, char **value) { _cleanup_free_ char *k = NULL, *v = NULL; int r; @@ -156,7 +156,7 @@ int parse_key_value_argument(const char *s, char **key, char **value) { r = extract_many_words(&s, "=", EXTRACT_DONT_COALESCE_SEPARATORS, &k, &v); if (r < 0) return log_error_errno(r, "Failed to parse key/value pair %s: %m", s); - if (r < 2) + if (require_value && r < 2) return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing '=' in key/value pair %s.", s); if (!filename_is_valid(k)) diff --git a/src/udev/udevadm-util.h b/src/udev/udevadm-util.h index 8a615b93398..c75a2c39300 100644 --- a/src/udev/udevadm-util.h +++ b/src/udev/udevadm-util.h @@ -10,6 +10,6 @@ int find_device(const char *id, const char *prefix, sd_device **ret); int find_device_with_action(const char *id, sd_device_action_t action, sd_device **ret); int parse_device_action(const char *str, sd_device_action_t *ret); int parse_resolve_name_timing(const char *str, ResolveNameTiming *ret); -int parse_key_value_argument(const char *s, char **key, char **value); +int parse_key_value_argument(const char *s, bool require_value, char **key, char **value); int udev_ping(usec_t timeout, bool ignore_connection_failure); int search_rules_files(char * const *a, const char *root, char ***ret);