From: David Tardon Date: Tue, 29 Apr 2025 12:22:15 +0000 (+0200) Subject: udevadm: move key/value parsing func. to udevadm-util.c X-Git-Tag: v258-rc1~661^2~5 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f10206a88ebacb3178eb677acc8021acf4f71c89;p=thirdparty%2Fsystemd.git udevadm: move key/value parsing func. to udevadm-util.c --- diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c index ea66a2ad226..fd2df5b2739 100644 --- a/src/udev/udevadm-info.c +++ b/src/udev/udevadm-info.c @@ -875,28 +875,6 @@ static int ensure_device_enumerator(sd_device_enumerator **e) { return 0; } -static int parse_key_value_argument(const char *s, char **key, char **value) { - _cleanup_free_ char *k = NULL, *v = NULL; - int r; - - assert(s); - assert(key); - assert(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) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing '=' in key/value pair %s.", s); - - if (!filename_is_valid(k)) - return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "%s is not a valid key name", k); - - free_and_replace(*key, k); - free_and_replace(*value, v); - return 0; -} - int info_main(int argc, char *argv[], void *userdata) { _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL; _cleanup_strv_free_ char **devices = NULL; diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c index 5bede0e4daa..0b18e2add90 100644 --- a/src/udev/udevadm-util.c +++ b/src/udev/udevadm-util.c @@ -145,6 +145,28 @@ int parse_resolve_name_timing(const char *str, ResolveNameTiming *ret) { return 1; } +int parse_key_value_argument(const char *s, char **key, char **value) { + _cleanup_free_ char *k = NULL, *v = NULL; + int r; + + assert(s); + assert(key); + assert(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) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Missing '=' in key/value pair %s.", s); + + if (!filename_is_valid(k)) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "%s is not a valid key name", k); + + free_and_replace(*key, k); + free_and_replace(*value, v); + return 0; +} + static int udev_ping_via_ctrl(usec_t timeout_usec, bool ignore_connection_failure) { _cleanup_(udev_ctrl_unrefp) UdevCtrl *uctrl = NULL; int r; diff --git a/src/udev/udevadm-util.h b/src/udev/udevadm-util.h index f9a3b99fd73..8a615b93398 100644 --- a/src/udev/udevadm-util.h +++ b/src/udev/udevadm-util.h @@ -10,5 +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 udev_ping(usec_t timeout, bool ignore_connection_failure); int search_rules_files(char * const *a, const char *root, char ***ret);