#include <log/log.h>
#include <talloc/talloc.h>
#include <waiter/waiter.h>
+#include <system/system.h>
#include "event.h"
#include "udev.h"
#define max(a, b) ((a) > (b) ? (a) : (b))
-struct udev {
+struct pb_udev {
struct device_handler *handler;
int socket;
};
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;
static int udev_process(void *arg)
{
- struct udev *udev = arg;
+ struct pb_udev *udev = arg;
char buf[4096];
int len;
static int udev_destructor(void *p)
{
- struct udev *udev = p;
+ struct pb_udev *udev = p;
if (udev->socket >= 0)
close(udev->socket);
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;
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);
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));
return WEXITSTATUS(rc);
}
-void udev_destroy(struct udev *udev)
+void udev_destroy(struct pb_udev *udev)
{
talloc_free(udev);
}