#include <sys/un.h>
#include <talloc/talloc.h>
+#include <waiter/waiter.h>
+#include <log/log.h>
#include "udev.h"
-#include "log.h"
-#include "waiter.h"
#include "pb-discover.h"
+#include "device-handler.h"
#define PBOOT_DEVICE_SOCKET "/tmp/petitboot.udev"
#define max(a, b) ((a) > (b) ? (a) : (b))
struct udev {
+ struct device_handler *handler;
int socket;
};
}
}
-static const char *event_param(struct udev_event *event, const char *name)
+const char *udev_event_param(struct udev_event *event, const char *name)
{
int i;
action = event->action == UDEV_ACTION_ADD ? "add" : "remove";
pb_log("udev %s event:\n", action);
- printf("\tdevice: %s\n", event->device);
+ pb_log("\tdevice: %s\n", event->device);
for (i = 0; params[i]; i++)
- printf("\t%-12s => %s\n",
- params[i], event_param(event, params[i]));
+ pb_log("\t%-12s => %s\n",
+ params[i], udev_event_param(event, params[i]));
}
print_event(event);
+ device_handler_event(udev->handler, event);
+
talloc_free(event);
return;
return 0;
}
-struct udev *udev_init(void)
+struct udev *udev_init(struct device_handler *handler)
{
struct sockaddr_un addr;
struct udev *udev;
udev = talloc(NULL, struct udev);
+ udev->handler = handler;
+
udev->socket = socket(PF_UNIX, SOCK_DGRAM, 0);
if (udev->socket < 0) {
pb_log("Error creating udev socket: %s\n", strerror(errno));