- int param_len, name_len, value_len;
- struct param *param;
- char *sep;
-
- for (; len > 0; len -= param_len + 1, buf += param_len + 1) {
-
- /* find the length of the whole parameter */
- param_len = strnlen(buf, len);
- if (!param_len) {
- /* multiple NULs? skip over */
- param_len = 1;
- continue;
- }
+ struct pb_udev *udev = p;
+
+ if (udev->monitor) {
+ udev_monitor_unref(udev->monitor);
+ udev->monitor = NULL;
+ }
+
+ if (udev->udev) {
+ udev_unref(udev->udev);
+ udev->udev = NULL;
+ }
+
+ return 0;
+}
+
+static void udev_setup_device_params(struct udev_device *udev,
+ struct discover_device *dev)
+{
+ struct udev_list_entry *list, *entry;
+
+ list = udev_device_get_properties_list_entry(udev);
+ if (!list)
+ return;
+
+ udev_list_entry_foreach(entry, list)
+ discover_device_set_param(dev,
+ udev_list_entry_get_name(entry),
+ udev_list_entry_get_value(entry));
+}
+
+static int udev_handle_block_add(struct pb_udev *udev, struct udev_device *dev,
+ const char *name)
+{
+ struct discover_device *ddev;
+ const char *typestr;
+ const char *uuid;
+ const char *path;
+ const char *node;
+ const char *prop;
+ const char *type;
+ bool cdrom;
+
+ typestr = udev_device_get_devtype(dev);
+ if (!typestr) {
+ pb_debug("udev_device_get_devtype failed\n");
+ return -1;
+ }
+
+ if (!(!strcmp(typestr, "disk") || !strcmp(typestr, "partition"))) {
+ pb_log("SKIP %s: invalid type %s\n", name, typestr);
+ return 0;
+ }
+
+ node = udev_device_get_devnode(dev);
+ path = udev_device_get_devpath(dev);
+ if (path && strstr(path, "virtual/block/loop")) {
+ pb_log("SKIP: %s: ignored (path=%s)\n", name, path);
+ return 0;
+ }
+
+ if (path && strstr(path, "virtual/block/ram")) {
+ device_handler_add_ramdisk(udev->handler, node);
+ return 0;
+ }