summaryrefslogtreecommitdiff
path: root/src/rfkill/rfkill.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rfkill/rfkill.c')
-rw-r--r--src/rfkill/rfkill.c86
1 files changed, 2 insertions, 84 deletions
diff --git a/src/rfkill/rfkill.c b/src/rfkill/rfkill.c
index 1cc887df12..ac21dc064c 100644
--- a/src/rfkill/rfkill.c
+++ b/src/rfkill/rfkill.c
@@ -18,6 +18,7 @@
#include "proc-cmdline.h"
#include "string-table.h"
#include "string-util.h"
+#include "udev-util.h"
#include "util.h"
#include "list.h"
@@ -88,89 +89,6 @@ static int find_device(
return 0;
}
-struct DeviceMonitorData {
- const char *sysname;
- sd_device *device;
-};
-
-static int device_monitor_handler(sd_device_monitor *monitor, sd_device *device, void *userdata) {
- struct DeviceMonitorData *data = userdata;
- const char *sysname;
-
- assert(device);
- assert(data);
- assert(data->sysname);
-
- if (sd_device_get_sysname(device, &sysname) >= 0 && streq(sysname, data->sysname)) {
- data->device = sd_device_ref(device);
- return sd_event_exit(sd_device_monitor_get_event(monitor), 0);
- }
-
- return 0;
-}
-
-static int wait_for_initialized(
- sd_device *device,
- sd_device **ret) {
-
- _cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
- _cleanup_(sd_event_unrefp) sd_event *event = NULL;
- _cleanup_(sd_device_unrefp) sd_device *d = NULL;
- struct DeviceMonitorData data = {};
- int r;
-
- assert(device);
- assert(ret);
-
- if (sd_device_get_is_initialized(device) > 0) {
- *ret = sd_device_ref(device);
- return 0;
- }
-
- assert_se(sd_device_get_sysname(device, &data.sysname) >= 0);
-
- /* Wait until the device is initialized, so that we can get
- * access to the ID_PATH property */
-
- r = sd_event_default(&event);
- if (r < 0)
- return log_error_errno(r, "Failed to get default event: %m");
-
- r = sd_device_monitor_new(&monitor);
- if (r < 0)
- return log_error_errno(r, "Failed to acquire monitor: %m");
-
- r = sd_device_monitor_filter_add_match_subsystem_devtype(monitor, "rfkill", NULL);
- if (r < 0)
- return log_error_errno(r, "Failed to add rfkill device match to monitor: %m");
-
- r = sd_device_monitor_attach_event(monitor, event);
- if (r < 0)
- return log_error_errno(r, "Failed to attach event to device monitor: %m");
-
- r = sd_device_monitor_start(monitor, device_monitor_handler, &data);
- if (r < 0)
- return log_error_errno(r, "Failed to start device monitor: %m");
-
- /* Check again, maybe things changed */
- r = sd_device_new_from_subsystem_sysname(&d, "rfkill", data.sysname);
- if (r < 0)
- return log_full_errno(IN_SET(r, -ENOENT, -ENXIO, -ENODEV) ? LOG_DEBUG : LOG_ERR, r,
- "Failed to open device '%s': %m", data.sysname);
-
- if (sd_device_get_is_initialized(d) > 0) {
- *ret = TAKE_PTR(d);
- return 0;
- }
-
- r = sd_event_loop(event);
- if (r < 0)
- return log_error_errno(r, "Event loop failed: %m");
-
- *ret = TAKE_PTR(data.device);
- return 0;
-}
-
static int determine_state_file(
const struct rfkill_event *event,
char **ret) {
@@ -187,7 +105,7 @@ static int determine_state_file(
if (r < 0)
return r;
- r = wait_for_initialized(d, &device);
+ r = device_wait_for_initialization(d, "rfkill", &device);
if (r < 0)
return r;