]> git.ozlabs.org Git - petitboot/blobdiff - discover/udev.c
discover: Rename struct udev to struct pb_udev
[petitboot] / discover / udev.c
index a5d9e03006dd2af346a1418296526a47aece88ca..bb9331b02c2a98432f70933ac7ae5190522176e5 100644 (file)
@@ -13,6 +13,7 @@
 #include <log/log.h>
 #include <talloc/talloc.h>
 #include <waiter/waiter.h>
+#include <system/system.h>
 
 #include "event.h"
 #include "udev.h"
@@ -23,7 +24,7 @@
 
 #define max(a, b) ((a) > (b) ? (a) : (b))
 
-struct udev {
+struct pb_udev {
        struct device_handler *handler;
        int socket;
 };
@@ -51,7 +52,7 @@ static void udev_print_event(struct event *event)
                                params[i], event_get_param(event, params[i]));
 }
 
-static void udev_handle_message(struct udev *udev, char *buf, int len)
+static void udev_handle_message(struct pb_udev *udev, char *buf, int len)
 {
        int result;
        struct event *event;
@@ -86,7 +87,7 @@ static void udev_handle_message(struct udev *udev, char *buf, int len)
 
 static int udev_process(void *arg)
 {
-       struct udev *udev = arg;
+       struct pb_udev *udev = arg;
        char buf[4096];
        int len;
 
@@ -107,7 +108,7 @@ static int udev_process(void *arg)
 
 static int udev_destructor(void *p)
 {
-       struct udev *udev = p;
+       struct pb_udev *udev = p;
 
        if (udev->socket >= 0)
                close(udev->socket);
@@ -115,14 +116,14 @@ static int udev_destructor(void *p)
        return 0;
 }
 
-struct udev *udev_init(struct device_handler *handler)
+struct pb_udev *udev_init(struct waitset *waitset, struct device_handler *handler)
 {
        struct sockaddr_un addr;
-       struct udev *udev;
+       struct pb_udev *udev;
 
        unlink(PBOOT_DEVICE_SOCKET);
 
-       udev = talloc(NULL, struct udev);
+       udev = talloc(NULL, struct pb_udev);
 
        udev->handler = handler;
 
@@ -143,7 +144,7 @@ struct udev *udev_init(struct device_handler *handler)
                goto out_err;
        }
 
-       waiter_register(udev->socket, WAIT_IN, udev_process, udev);
+       waiter_register(waitset, udev->socket, WAIT_IN, udev_process, udev);
 
        pb_log("%s: waiting on %s\n", __func__, PBOOT_DEVICE_SOCKET);
 
@@ -154,9 +155,18 @@ out_err:
        return NULL;
 }
 
-int udev_trigger(struct udev __attribute__((unused)) *udev)
+int udev_trigger(struct pb_udev __attribute__((unused)) *udev)
 {
-       int rc = system("/sbin/udevadm trigger --subsystem-match=block --action=add");
+       const char *cmd[] = {
+               pb_system_apps.udevadm,
+               "trigger",
+               "--subsystem-match=block",
+               "--action=add",
+               NULL,
+       };
+       int rc;
+
+       rc = pb_run_cmd(cmd, 1, 0);
 
        if (rc)
                pb_log("udev trigger failed: %d (%d)\n", rc, WEXITSTATUS(rc));
@@ -164,7 +174,7 @@ int udev_trigger(struct udev __attribute__((unused)) *udev)
        return WEXITSTATUS(rc);
 }
 
-void udev_destroy(struct udev *udev)
+void udev_destroy(struct pb_udev *udev)
 {
        talloc_free(udev);
 }