]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udevadm-trigger: modernize code a bit
authorYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 2 Oct 2018 07:11:54 +0000 (16:11 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 16 Oct 2018 18:31:20 +0000 (03:31 +0900)
src/udev/udevadm-trigger.c

index bdadad30a055837ac9c14bc8e8a6fc745cd3a76f..2fdde4bb99657dca32b95954364cb8cbc5fd7645 100644 (file)
@@ -12,7 +12,7 @@
 #include "device-enumerator-private.h"
 #include "device-monitor-private.h"
 #include "fd-util.h"
-#include "libudev-private.h"
+#include "path-util.h"
 #include "set.h"
 #include "string-util.h"
 #include "strv.h"
@@ -27,9 +27,9 @@ static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_se
         int r;
 
         FOREACH_DEVICE_AND_SUBSYSTEM(e, d) {
-                char filename[UTIL_PATH_SIZE];
-                const char *syspath;
+                _cleanup_free_ char *filename = NULL;
                 _cleanup_close_ int fd = -1;
+                const char *syspath;
 
                 if (sd_device_get_syspath(d, &syspath) < 0)
                         continue;
@@ -39,7 +39,10 @@ static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_se
                 if (arg_dry_run)
                         continue;
 
-                strscpyl(filename, sizeof(filename), syspath, "/uevent", NULL);
+                filename = path_join(NULL, syspath, "uevent");
+                if (!filename)
+                        return log_oom();
+
                 fd = open(filename, O_WRONLY|O_CLOEXEC);
                 if (fd < 0)
                         continue;
@@ -51,22 +54,28 @@ static int exec_list(sd_device_enumerator *e, const char *action, Set *settle_se
                 }
 
                 if (write(fd, action, strlen(action)) < 0)
-                        log_debug_errno(errno, "error writing '%s' to '%s': %m", action, filename);
+                        log_debug_errno(errno, "Failed to write '%s' to '%s', ignoring: %m", action, filename);
         }
 
         return 0;
 }
 
-static const char *keyval(const char *str, const char **val, char *buf, size_t size) {
-        char *pos;
+static char* keyval(const char *str, const char **key, const char **val) {
+        char *buf, *pos;
+
+        buf = strdup(str);
+        if (!buf)
+                return NULL;
 
-        strscpy(buf, size,str);
         pos = strchr(buf, '=');
-        if (pos != NULL) {
+        if (pos) {
                 pos[0] = 0;
                 pos++;
         }
+
+        *key = buf;
         *val = pos;
+
         return buf;
 }
 
@@ -142,9 +151,8 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                 return r;
 
         while ((c = getopt_long(argc, argv, "vnt:c:s:S:a:A:p:g:y:b:wVh", options, NULL)) >= 0) {
-                const char *key;
-                const char *val;
-                char buf[UTIL_PATH_SIZE];
+                _cleanup_free_ char *buf = NULL;
+                const char *key, *val;
 
                 switch (c) {
                 case 'v':
@@ -159,7 +167,7 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                         else if (streq(optarg, "subsystems"))
                                 device_type = TYPE_SUBSYSTEMS;
                         else {
-                                log_error("unknown type --type=%s", optarg);
+                                log_error("Unknown type --type=%s", optarg);
                                 return -EINVAL;
                         }
                         break;
@@ -167,7 +175,7 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                         if (STR_IN_SET(optarg, "add", "remove", "change"))
                                 action = optarg;
                         else {
-                                log_error("unknown action '%s'", optarg);
+                                log_error("Unknown action '%s'", optarg);
                                 return -EINVAL;
                         }
 
@@ -175,51 +183,57 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                 case 's':
                         r = sd_device_enumerator_add_match_subsystem(e, optarg, true);
                         if (r < 0)
-                                return log_error_errno(r, "could not add subsystem match '%s': %m", optarg);
+                                return log_error_errno(r, "Failed to add subsystem match '%s': %m", optarg);
                         break;
                 case 'S':
                         r = sd_device_enumerator_add_match_subsystem(e, optarg, false);
                         if (r < 0)
-                                return log_error_errno(r, "could not add negative subsystem match '%s': %m", optarg);
+                                return log_error_errno(r, "Failed to add negative subsystem match '%s': %m", optarg);
                         break;
                 case 'a':
-                        key = keyval(optarg, &val, buf, sizeof(buf));
+                        buf = keyval(optarg, &key, &val);
+                        if (!buf)
+                                return log_oom();
                         r = sd_device_enumerator_add_match_sysattr(e, key, val, true);
                         if (r < 0)
-                                return log_error_errno(r, "could not add sysattr match '%s=%s': %m", key, val);
+                                return log_error_errno(r, "Failed to add sysattr match '%s=%s': %m", key, val);
                         break;
                 case 'A':
-                        key = keyval(optarg, &val, buf, sizeof(buf));
+                        buf = keyval(optarg, &key, &val);
+                        if (!buf)
+                                return log_oom();
                         r = sd_device_enumerator_add_match_sysattr(e, key, val, false);
                         if (r < 0)
-                                return log_error_errno(r, "could not add negative sysattr match '%s=%s': %m", key, val);
+                                return log_error_errno(r, "Failed to add negative sysattr match '%s=%s': %m", key, val);
                         break;
                 case 'p':
-                        key = keyval(optarg, &val, buf, sizeof(buf));
+                        buf = keyval(optarg, &key, &val);
+                        if (!buf)
+                                return log_oom();
                         r = sd_device_enumerator_add_match_property(e, key, val);
                         if (r < 0)
-                                return log_error_errno(r, "could not add property match '%s=%s': %m", key, val);
+                                return log_error_errno(r, "Failed to add property match '%s=%s': %m", key, val);
                         break;
                 case 'g':
                         r = sd_device_enumerator_add_match_tag(e, optarg);
                         if (r < 0)
-                                return log_error_errno(r, "could not add tag match '%s': %m", optarg);
+                                return log_error_errno(r, "Failed to add tag match '%s': %m", optarg);
                         break;
                 case 'y':
                         r = sd_device_enumerator_add_match_sysname(e, optarg);
                         if (r < 0)
-                                return log_error_errno(r, "could not add sysname match '%s': %m", optarg);
+                                return log_error_errno(r, "Failed to add sysname match '%s': %m", optarg);
                         break;
                 case 'b': {
                         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
 
                         r = find_device(optarg, "/sys", &dev);
                         if (r < 0)
-                                return log_error_errno(r, "unable to open the device '%s'", optarg);
+                                return log_error_errno(r, "Failed to open the device '%s': %m", optarg);
 
                         r = sd_device_enumerator_add_match_parent(e, dev);
                         if (r < 0)
-                                return log_error_errno(r, "could not add parent match '%s': %m", optarg);
+                                return log_error_errno(r, "Failed to add parent match '%s': %m", optarg);
                         break;
                 }
                 case 'w':
@@ -231,11 +245,11 @@ int trigger_main(int argc, char *argv[], void *userdata) {
 
                         r = find_device(optarg, "/dev/", &dev);
                         if (r < 0)
-                                return log_error_errno(r, "unable to open the device '%s'", optarg);
+                                return log_error_errno(r, "Failed to open the device '%s': %m", optarg);
 
                         r = sd_device_enumerator_add_match_parent(e, dev);
                         if (r < 0)
-                                return log_error_errno(r, "could not add parent match '%s': %m", optarg);
+                                return log_error_errno(r, "Failed to add parent match '%s': %m", optarg);
                         break;
                 }
 
@@ -255,17 +269,17 @@ int trigger_main(int argc, char *argv[], void *userdata) {
 
                 r = find_device(argv[optind], NULL, &dev);
                 if (r < 0)
-                        return log_error_errno(r, "unable to open the device '%s'", argv[optind]);
+                        return log_error_errno(r, "Failed to open the device '%s': %m", argv[optind]);
 
                 r = sd_device_enumerator_add_match_parent(e, dev);
                 if (r < 0)
-                        return log_error_errno(r, "could not add parent match '%s': %m", argv[optind]);
+                        return log_error_errno(r, "Failed to add parent match '%s': %m", argv[optind]);
         }
 
         if (settle) {
                 fd_ep = epoll_create1(EPOLL_CLOEXEC);
                 if (fd_ep < 0)
-                        return log_error_errno(errno, "error creating epoll fd: %m");
+                        return log_error_errno(errno, "Failed to create epoll fd: %m");
 
                 r = sd_device_monitor_new(&m);
                 if (r < 0)
@@ -303,7 +317,7 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                         return log_error_errno(r, "Failed to scan devices: %m");
                 break;
         default:
-                assert_not_reached("device_type");
+                assert_not_reached("Unknown device type");
         }
         r = exec_list(e, action, settle_set);
         if (r < 0)
@@ -317,13 +331,13 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                 fdcount = epoll_wait(fd_ep, ev, ELEMENTSOF(ev), -1);
                 if (fdcount < 0) {
                         if (errno != EINTR)
-                                log_error_errno(errno, "error receiving uevent message: %m");
+                                log_error_errno(errno, "Failed to receive uevent message: %m");
                         continue;
                 }
 
                 for (i = 0; i < fdcount; i++) {
                         _cleanup_(sd_device_unrefp) sd_device *dev = NULL;
-                        const char *syspath = NULL;
+                        const char *syspath;
 
                         if (!(ev[i].data.fd == fd_monitor && ev[i].events & EPOLLIN))
                                 continue;