#include <getopt.h>
-#include "libudev.h"
#include "sd-bus.h"
+#include "sd-device.h"
+#include "device-enumerator-private.h"
#include "bus-error.h"
#include "bus-unit-util.h"
#include "bus-util.h"
#include "spawn-polkit-agent.h"
#include "stat-util.h"
#include "strv.h"
-#include "udev-util.h"
#include "unit-def.h"
#include "unit-name.h"
#include "user-util.h"
}
static int umount_by_device(sd_bus *bus, const char *what) {
- _cleanup_(udev_device_unrefp) struct udev_device *d = NULL;
- _cleanup_(udev_unrefp) struct udev *udev = NULL;
+ _cleanup_(sd_device_unrefp) sd_device *d = NULL;
_cleanup_strv_free_ char **list = NULL;
struct stat st;
const char *v;
return -ENOTBLK;
}
- udev = udev_new();
- if (!udev)
- return log_oom();
+ r = sd_device_new_from_devnum(&d, 'b', st.st_rdev);
+ if (r < 0)
+ return log_error_errno(r, "Failed to get device from device number: %m");
- d = udev_device_new_from_devnum(udev, 'b', st.st_rdev);
- if (!d)
- return log_oom();
+ r = sd_device_get_property_value(d, "ID_FS_USAGE", &v);
+ if (r < 0)
+ return log_error_errno(r, "Failed to get device property: %m");
- v = udev_device_get_property_value(d, "ID_FS_USAGE");
- if (!streq_ptr(v, "filesystem")) {
+ if (!streq(v, "filesystem")) {
log_error("%s does not contain a known file system.", what);
return -EINVAL;
}
- v = udev_device_get_property_value(d, "SYSTEMD_MOUNT_WHERE");
- if (!isempty(v))
+ if (sd_device_get_property_value(d, "SYSTEMD_MOUNT_WHERE", &v) >= 0)
r2 = stop_mounts(bus, v);
r = find_mount_points(what, &list);
return r2;
}
-static int acquire_mount_type(struct udev_device *d) {
+static int acquire_mount_type(sd_device *d) {
const char *v;
assert(d);
if (arg_mount_type)
return 0;
- v = udev_device_get_property_value(d, "ID_FS_TYPE");
- if (isempty(v))
+ if (sd_device_get_property_value(d, "ID_FS_TYPE", &v) < 0)
return 0;
arg_mount_type = strdup(v);
return 1;
}
-static int acquire_mount_options(struct udev_device *d) {
+static int acquire_mount_options(sd_device *d) {
const char *v;
+ assert(d);
+
if (arg_mount_options)
return 0;
- v = udev_device_get_property_value(d, "SYSTEMD_MOUNT_OPTIONS");
- if (isempty(v))
+ if (sd_device_get_property_value(d, "SYSTEMD_MOUNT_OPTIONS", &v) < 0)
return 0;
arg_mount_options = strdup(v);
return 1;
}
-static const char *get_model(struct udev_device *d) {
+static const char *get_model(sd_device *d) {
const char *model;
assert(d);
- model = udev_device_get_property_value(d, "ID_MODEL_FROM_DATABASE");
- if (model)
+ if (sd_device_get_property_value(d, "ID_MODEL_FROM_DATABASE", &model) >= 0)
return model;
- return udev_device_get_property_value(d, "ID_MODEL");
+ if (sd_device_get_property_value(d, "ID_MODEL", &model) >= 0)
+ return model;
+
+ return NULL;
}
-static const char* get_label(struct udev_device *d) {
+static const char* get_label(sd_device *d) {
const char *label;
assert(d);
- label = udev_device_get_property_value(d, "ID_FS_LABEL");
- if (label)
+ if (sd_device_get_property_value(d, "ID_FS_LABEL", &label) >= 0)
+ return label;
+
+ if (sd_device_get_property_value(d, "ID_PART_ENTRY_NAME", &label) >= 0)
return label;
- return udev_device_get_property_value(d, "ID_PART_ENTRY_NAME");
+ return NULL;
}
-static int acquire_mount_where(struct udev_device *d) {
+static int acquire_mount_where(sd_device *d) {
const char *v;
if (arg_mount_where)
return 0;
- v = udev_device_get_property_value(d, "SYSTEMD_MOUNT_WHERE");
- if (isempty(v)) {
+ if (sd_device_get_property_value(d, "SYSTEMD_MOUNT_WHERE", &v) < 0) {
_cleanup_free_ char *escaped = NULL;
const char *name;
if (!name) {
const char *dn;
- dn = udev_device_get_devnode(d);
- if (!dn)
+ if (sd_device_get_devname(d, &dn) < 0)
return 0;
name = basename(dn);
return 1;
}
-static int acquire_description(struct udev_device *d) {
+static int acquire_description(sd_device *d) {
const char *model, *label;
if (arg_description)
label = get_label(d);
if (!label)
- label = udev_device_get_property_value(d, "ID_PART_ENTRY_NUMBER");
+ (void) sd_device_get_property_value(d, "ID_PART_ENTRY_NUMBER", &label);
if (model && label)
arg_description = strjoin(model, " ", label);
return 1;
}
-static int acquire_removable(struct udev_device *d) {
+static int acquire_removable(sd_device *d) {
const char *v;
/* Shortcut this if there's no reason to check it */
return 0;
for (;;) {
- v = udev_device_get_sysattr_value(d, "removable");
- if (v)
+ if (sd_device_get_sysattr_value(d, "removable", &v) > 0)
break;
- d = udev_device_get_parent(d);
- if (!d)
+ if (sd_device_get_parent(d, &d) < 0)
return 0;
- if (!streq_ptr(udev_device_get_subsystem(d), "block"))
+ if (sd_device_get_subsystem(d, &v) < 0 || !streq(v, "block"))
return 0;
}
}
static int discover_loop_backing_file(void) {
- _cleanup_(udev_device_unrefp) struct udev_device *d = NULL;
- _cleanup_(udev_unrefp) struct udev *udev = NULL;
+ _cleanup_(sd_device_unrefp) sd_device *d = NULL;
_cleanup_free_ char *loop_dev = NULL;
struct stat st;
const char *v;
return -EINVAL;
}
- udev = udev_new();
- if (!udev)
- return log_oom();
-
- d = udev_device_new_from_devnum(udev, 'b', st.st_rdev);
- if (!d)
- return log_oom();
+ r = sd_device_new_from_devnum(&d, 'b', st.st_rdev);
+ if (r < 0)
+ return log_error_errno(r, "Failed to get device from device number: %m");
- v = udev_device_get_property_value(d, "ID_FS_USAGE");
- if (!streq_ptr(v, "filesystem")) {
+ if (sd_device_get_property_value(d, "ID_FS_USAGE", &v) < 0 || !streq(v, "filesystem")) {
log_error("%s does not contain a known file system.", arg_mount_what);
return -EINVAL;
}
}
static int discover_device(void) {
- _cleanup_(udev_device_unrefp) struct udev_device *d = NULL;
- _cleanup_(udev_unrefp) struct udev *udev = NULL;
+ _cleanup_(sd_device_unrefp) sd_device *d = NULL;
struct stat st;
const char *v;
int r;
return -EINVAL;
}
- udev = udev_new();
- if (!udev)
- return log_oom();
-
- d = udev_device_new_from_devnum(udev, 'b', st.st_rdev);
- if (!d)
- return log_oom();
+ r = sd_device_new_from_devnum(&d, 'b', st.st_rdev);
+ if (r < 0)
+ return log_error_errno(r, "Failed to get device from device number: %m");
- v = udev_device_get_property_value(d, "ID_FS_USAGE");
- if (!streq_ptr(v, "filesystem")) {
+ if (sd_device_get_property_value(d, "ID_FS_USAGE", &v) < 0 || !streq(v, "filesystem")) {
log_error("%s does not contain a known file system.", arg_mount_what);
return -EINVAL;
}
[COLUMN_UUID] = "UUID"
};
- _cleanup_(udev_enumerate_unrefp) struct udev_enumerate *e = NULL;
- _cleanup_(udev_unrefp) struct udev *udev = NULL;
- struct udev_list_entry *item = NULL, *first = NULL;
+ _cleanup_(sd_device_enumerator_unrefp) sd_device_enumerator *e = NULL;
size_t n_allocated = 0, n = 0, i;
size_t column_width[_COLUMN_MAX];
struct item *items = NULL;
+ sd_device *d;
unsigned c;
int r;
for (c = 0; c < _COLUMN_MAX; c++)
column_width[c] = strlen(titles[c]);
- udev = udev_new();
- if (!udev)
- return log_oom();
-
- e = udev_enumerate_new(udev);
- if (!e)
+ r = sd_device_enumerator_new(&e);
+ if (r < 0)
return log_oom();
- r = udev_enumerate_add_match_subsystem(e, "block");
+ r = sd_device_enumerator_add_match_subsystem(e, "block", true);
if (r < 0)
return log_error_errno(r, "Failed to add block match: %m");
- r = udev_enumerate_add_match_property(e, "ID_FS_USAGE", "filesystem");
+ r = sd_device_enumerator_add_match_property(e, "ID_FS_USAGE", "filesystem");
if (r < 0)
return log_error_errno(r, "Failed to add property match: %m");
- r = udev_enumerate_scan_devices(e);
+ r = device_enumerator_scan_devices(e);
if (r < 0)
- return log_error_errno(r, "Failed to scan devices: %m");
+ return log_error_errno(r, "Failed to enumerate devices: %m");
- first = udev_enumerate_get_list_entry(e);
- udev_list_entry_foreach(item, first) {
- _cleanup_(udev_device_unrefp) struct udev_device *d;
+ FOREACH_DEVICE_AND_SUBSYSTEM(e, d) {
struct item *j;
- d = udev_device_new_from_syspath(udev, udev_list_entry_get_name(item));
- if (!d) {
- r = log_oom();
- goto finish;
- }
-
if (!GREEDY_REALLOC0(items, n_allocated, n+1)) {
r = log_oom();
goto finish;
switch (c) {
case COLUMN_NODE:
- x = udev_device_get_devnode(d);
+ (void) sd_device_get_devname(d, &x);
break;
case COLUMN_PATH:
- x = udev_device_get_property_value(d, "ID_PATH");
+ (void) sd_device_get_property_value(d, "ID_PATH", &x);
break;
case COLUMN_MODEL:
break;
case COLUMN_WWN:
- x = udev_device_get_property_value(d, "ID_WWN");
+ (void) sd_device_get_property_value(d, "ID_WWN", &x);
break;
case COLUMN_FSTYPE:
- x = udev_device_get_property_value(d, "ID_FS_TYPE");
+ (void) sd_device_get_property_value(d, "ID_FS_TYPE", &x);
break;
case COLUMN_LABEL:
break;
case COLUMN_UUID:
- x = udev_device_get_property_value(d, "ID_FS_UUID");
+ (void) sd_device_get_property_value(d, "ID_FS_UUID", &x);
break;
}