summaryrefslogtreecommitdiff
path: root/src/udev/udev-node.c
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2022-04-11 11:26:08 +0900
committerYu Watanabe <watanabe.yu+github@gmail.com>2022-09-03 05:01:51 +0900
commit7e7c36fbbb396364c386bf1edbe9b25179a134c6 (patch)
tree6107c2e2bcc5812dad24b957e06cacf3dbf57bc4 /src/udev/udev-node.c
parentb9168275c39a190441fee73ba1c8a64515fd3b0e (diff)
downloadsystemd-7e7c36fbbb396364c386bf1edbe9b25179a134c6.tar.gz
udev: split link_update() and introduce stack_directory_get_name()
No functionality is changed.
Diffstat (limited to 'src/udev/udev-node.c')
-rw-r--r--src/udev/udev-node.c52
1 files changed, 33 insertions, 19 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];
- int r;
+ const char *name;
- assert(dev);
- assert(slink_in);
+ assert(slink);
+ assert(ret);
- slink = strdup(slink_in);
- if (!slink)
- return log_oom_debug();
+ s = strdup(slink);
+ if (!s)
+ return -ENOMEM;
- path_simplify(slink);
+ path_simplify(s);
- 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);
+ 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));
- (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();
+ 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);
+
+ 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)