From 7e7c36fbbb396364c386bf1edbe9b25179a134c6 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Mon, 11 Apr 2022 11:26:08 +0900 Subject: [PATCH] udev: split link_update() and introduce stack_directory_get_name() No functionality is changed. --- src/udev/udev-node.c | 58 +++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 22 deletions(-) diff --git a/src/udev/udev-node.c b/src/udev/udev-node.c index 79d050cce6..b4b865c021 100644 --- a/src/udev/udev-node.c +++ b/src/udev/udev-node.c @@ -414,33 +414,47 @@ toolong: return size - 1; } -/* manage "stack of names" with possibly specified device priorities */ -static int link_update(sd_device *dev, const char *slink_in, bool add) { - _cleanup_free_ char *slink = NULL, *dirname = NULL; - const char *slink_name; +static int stack_directory_get_name(const char *slink, char **ret) { + _cleanup_free_ char *s = NULL, *dirname = NULL; char name_enc[NAME_MAX+1]; + const char *name; + + assert(slink); + assert(ret); + + s = strdup(slink); + if (!s) + return -ENOMEM; + + path_simplify(s); + + if (!path_is_normalized(s)) + return -EINVAL; + + name = path_startswith(s, "/dev"); + if (empty_or_root(name)) + return -EINVAL; + + udev_node_escape_path(name, name_enc, sizeof(name_enc)); + + dirname = path_join("/run/udev/links", name_enc); + if (!dirname) + return -ENOMEM; + + *ret = TAKE_PTR(dirname); + return 0; +} + +static int link_update(sd_device *dev, const char *slink, bool add) { + _cleanup_free_ char *dirname = NULL; int r; assert(dev); - assert(slink_in); + assert(slink); - slink = strdup(slink_in); - if (!slink) - return log_oom_debug(); - - path_simplify(slink); - - slink_name = path_startswith(slink, "/dev"); - if (!slink_name || - empty_or_root(slink_name) || - !path_is_normalized(slink_name)) - return log_device_debug_errno(dev, SYNTHETIC_ERRNO(EINVAL), - "Invalid symbolic link of device node: %s", slink); - - (void) udev_node_escape_path(slink_name, name_enc, sizeof(name_enc)); - dirname = path_join("/run/udev/links", name_enc); - if (!dirname) - return log_oom_debug(); + r = stack_directory_get_name(slink, &dirname); + if (r < 0) + return log_device_debug_errno(dev, r, "Failed to build stack directory name for '%s': %m", slink); r = update_stack_directory(dev, dirname, add); if (r < 0)