]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev-ctrl: make udev_ctrl_send() accept integer and string through a single argument
authorYu Watanabe <watanabe.yu+github@gmail.com>
Thu, 16 Dec 2021 18:13:43 +0000 (03:13 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 18 Dec 2021 10:41:14 +0000 (19:41 +0900)
src/udev/udev-ctrl.c
src/udev/udev-ctrl.h

index 179a1fdec3f5a016815a0fef5937a7ad177e98e2..8adef4773281f50f8e8e55d96a80502b7824e8df 100644 (file)
@@ -291,7 +291,7 @@ int udev_ctrl_start(UdevCtrl *uctrl, udev_ctrl_handler_t callback, void *userdat
         return 0;
 }
 
-int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, int intval, const char *buf) {
+int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, const void *data) {
         UdevCtrlMessageWire ctrl_msg_wire = {
                 .version = "udev-" STRINGIFY(PROJECT_VERSION),
                 .magic = UDEV_CTRL_MAGIC,
@@ -301,10 +301,11 @@ int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, int intval, const
         if (uctrl->maybe_disconnected)
                 return -ENOANO; /* to distinguish this from other errors. */
 
-        if (buf)
-                strscpy(ctrl_msg_wire.value.buf, sizeof(ctrl_msg_wire.value.buf), buf);
-        else
-                ctrl_msg_wire.value.intval = intval;
+        if (type == UDEV_CTRL_SET_ENV) {
+                assert(data);
+                strscpy(ctrl_msg_wire.value.buf, sizeof(ctrl_msg_wire.value.buf), data);
+        } else if (IN_SET(type, UDEV_CTRL_SET_LOG_LEVEL, UDEV_CTRL_SET_CHILDREN_MAX))
+                ctrl_msg_wire.value.intval = PTR_TO_INT(data);
 
         if (!uctrl->connected) {
                 if (connect(uctrl->sock, &uctrl->saddr.sa, uctrl->addrlen) < 0)
@@ -333,7 +334,7 @@ int udev_ctrl_wait(UdevCtrl *uctrl, usec_t timeout) {
                 return 0;
 
         if (!uctrl->maybe_disconnected) {
-                r = udev_ctrl_send(uctrl, _UDEV_CTRL_END_MESSAGES, 0, NULL);
+                r = udev_ctrl_send(uctrl, _UDEV_CTRL_END_MESSAGES, NULL);
                 if (r < 0)
                         return r;
         }
index d4bc068127120099d1a74596111a03ad7690a1ab..11fc0b62de674d957855c01ffdcdd58eb8aab9a5 100644 (file)
@@ -42,37 +42,37 @@ sd_event_source *udev_ctrl_get_event_source(UdevCtrl *uctrl);
 
 int udev_ctrl_wait(UdevCtrl *uctrl, usec_t timeout);
 
-int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, int intval, const char *buf);
+int udev_ctrl_send(UdevCtrl *uctrl, UdevCtrlMessageType type, const void *data);
 static inline int udev_ctrl_send_set_log_level(UdevCtrl *uctrl, int priority) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_LOG_LEVEL, priority, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_LOG_LEVEL, INT_TO_PTR(priority));
 }
 
 static inline int udev_ctrl_send_stop_exec_queue(UdevCtrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_STOP_EXEC_QUEUE, 0, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_STOP_EXEC_QUEUE, NULL);
 }
 
 static inline int udev_ctrl_send_start_exec_queue(UdevCtrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_START_EXEC_QUEUE, 0, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_START_EXEC_QUEUE, NULL);
 }
 
 static inline int udev_ctrl_send_reload(UdevCtrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_RELOAD, 0, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_RELOAD, NULL);
 }
 
 static inline int udev_ctrl_send_set_env(UdevCtrl *uctrl, const char *key) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_ENV, 0, key);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_ENV, key);
 }
 
 static inline int udev_ctrl_send_set_children_max(UdevCtrl *uctrl, int count) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, count, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_SET_CHILDREN_MAX, INT_TO_PTR(count));
 }
 
 static inline int udev_ctrl_send_ping(UdevCtrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_PING, 0, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_PING, NULL);
 }
 
 static inline int udev_ctrl_send_exit(UdevCtrl *uctrl) {
-        return udev_ctrl_send(uctrl, UDEV_CTRL_EXIT, 0, NULL);
+        return udev_ctrl_send(uctrl, UDEV_CTRL_EXIT, NULL);
 }
 
 DEFINE_TRIVIAL_CLEANUP_FUNC(UdevCtrl*, udev_ctrl_unref);