diff options
author | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-12-10 11:46:21 +0100 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2018-12-11 09:24:31 +0100 |
commit | b6854081ffb26c32a8d1440346f9ee5b9d2f1e57 (patch) | |
tree | 429643dac639f8d27534ed66e80b1302cc8a51ac /src/udev/udevadm-util.c | |
parent | d539f791769988f62a780e6fce2d4a77177d64ed (diff) | |
download | systemd-b6854081ffb26c32a8d1440346f9ee5b9d2f1e57.tar.gz |
udevadm: allow a .device unit to be specified for query and trigger
This is convenient when working with device units in systemd. Instead of
converting the systemd unit name to a path to feed to udevadm, udevadm
info|trigger can be called directly on the unit name.
The man page is reworked a bit to describe the modern syntax with positional
arguments first. It's just simpler to use than the positional options.
Diffstat (limited to 'src/udev/udevadm-util.c')
-rw-r--r-- | src/udev/udevadm-util.c | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/udev/udevadm-util.c b/src/udev/udevadm-util.c index ef0dc564ce..557982b23d 100644 --- a/src/udev/udevadm-util.c +++ b/src/udev/udevadm-util.c @@ -6,18 +6,31 @@ #include "device-private.h" #include "path-util.h" #include "udevadm-util.h" +#include "unit-name.h" int find_device(const char *id, const char *prefix, sd_device **ret) { - _cleanup_free_ char *buf = NULL; + _cleanup_free_ char *path = NULL; + int r; assert(id); assert(ret); - if (prefix && !path_startswith(id, prefix)) { - buf = path_join(prefix, id); - if (!buf) - return -ENOMEM; - id = buf; + if (prefix) { + if (!path_startswith(id, prefix)) { + id = path = path_join(prefix, id); + if (!path) + return -ENOMEM; + } + } else { + /* In cases where the argument is generic (no prefix specified), + * check if the argument looks like a device unit name. */ + if (unit_name_is_valid(id, UNIT_NAME_PLAIN) && + unit_name_to_type(id) == UNIT_DEVICE) { + r = unit_name_to_path(id, &path); + if (r < 0) + return log_debug_errno(r, "Failed to convert \"%s\" to a device path: %m", id); + id = path; + } } if (path_startswith(id, "/sys/")) |