chiark / gitweb /
libudev: add queue interface
[elogind.git] / udev / lib / libudev-device.c
index 3437d69798706cd8c3730d25df34ad932845bd50..893ec080a6159b5dc31e4f4f745b5fcd6855d952 100644 (file)
@@ -77,7 +77,7 @@ static int device_read_db(struct udev_device *udev_device)
        syspath_to_db_path(udev_device, filename, sizeof(filename));
 
        if (lstat(filename, &stats) != 0) {
-               info(udev_device->udev, "no db file to read %s: %s\n", filename, strerror(errno));
+               info(udev_device->udev, "no db file to read %s: %m\n", filename);
                return -1;
        }
        if ((stats.st_mode & S_IFMT) == S_IFLNK) {
@@ -88,7 +88,7 @@ static int device_read_db(struct udev_device *udev_device)
                if (target_len > 0)
                        target[target_len] = '\0';
                else {
-                       info(udev_device->udev, "error reading db link %s: %s\n", filename, strerror(errno));
+                       info(udev_device->udev, "error reading db link %s: %m\n", filename);
                        return -1;
                }
                if (asprintf(&udev_device->devnode, "%s/%s", udev_get_dev_path(udev_device->udev), target) < 0)
@@ -99,7 +99,7 @@ static int device_read_db(struct udev_device *udev_device)
 
        f = fopen(filename, "r");
        if (f == NULL) {
-               info(udev_device->udev, "error reading db file %s: %s\n", filename, strerror(errno));
+               info(udev_device->udev, "error reading db file %s: %m\n", filename);
                return -1;
        }
        while (fgets(line, sizeof(line), f)) {
@@ -193,7 +193,7 @@ void device_set_info_loaded(struct udev_device *device)
        device->info_loaded = 1;
 }
 
-struct udev_device *device_init(struct udev *udev)
+struct udev_device *device_new(struct udev *udev)
 {
        struct udev_device *udev_device;
 
@@ -281,7 +281,7 @@ struct udev_device *udev_device_new_from_syspath(struct udev *udev, const char *
                }
        }
 
-       udev_device = device_init(udev);
+       udev_device = device_new(udev);
        if (udev_device == NULL)
                return NULL;
 
@@ -295,7 +295,7 @@ struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, de
 {
        char path[UTIL_PATH_SIZE];
        const char *type_str;
-       struct udev_enumerate *enumerate;
+       struct udev_enumerate *udev_enumerate;
        struct udev_list_entry *list_entry;
        struct udev_device *device = NULL;
 
@@ -312,25 +312,25 @@ struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, de
        if (util_resolve_sys_link(udev, path, sizeof(path)) == 0)
                return udev_device_new_from_syspath(udev, path);
 
+       udev_enumerate = udev_enumerate_new(udev);
+       if (udev_enumerate == NULL)
+               return NULL;
+
        /* fallback to search sys devices for the major/minor */
        if (type == 'b')
-               enumerate = udev_enumerate_new_from_devices(udev, "block", NULL);
+               udev_enumerate_add_match_subsystem(udev_enumerate, "block");
        else if (type == 'c')
-               enumerate = udev_enumerate_new_from_devices(udev, "!block", NULL);
-       if (enumerate == NULL)
-               return NULL;
-       udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(enumerate)) {
+               udev_enumerate_add_nomatch_subsystem(udev_enumerate, "block");
+       udev_enumerate_scan_devices(udev_enumerate);
+       udev_list_entry_foreach(list_entry, udev_enumerate_get_list_entry(udev_enumerate)) {
                struct udev_device *device_loop;
 
                device_loop = udev_device_new_from_syspath(udev, udev_list_entry_get_name(list_entry));
                if (device_loop != NULL) {
                        if (udev_device_get_devnum(device_loop) == devnum) {
-                               const char *subsystem;
-
-                               subsystem = udev_device_get_subsystem(device_loop);
-                               if (type == 'b' && strcmp(subsystem, "block") != 0)
+                               if (type == 'b' && strcmp(udev_device_get_subsystem(device_loop), "block") != 0)
                                        continue;
-                               if (type == 'c' && strcmp(subsystem, "block") == 0)
+                               if (type == 'c' && strcmp(udev_device_get_subsystem(device_loop), "block") == 0)
                                        continue;
                                device = device_loop;
                                break;
@@ -338,7 +338,7 @@ struct udev_device *udev_device_new_from_devnum(struct udev *udev, char type, de
                        udev_device_unref(device_loop);
                }
        }
-       udev_enumerate_unref(enumerate);
+       udev_enumerate_unref(udev_enumerate);
        return device;
 }
 
@@ -651,7 +651,7 @@ const char *udev_device_get_attr_value(struct udev_device *udev_device, const ch
        util_strlcat(path, attr, sizeof(path));
 
        if (lstat(path, &statbuf) != 0) {
-               info(udev_device->udev, "stat '%s' failed: %s\n", path, strerror(errno));
+               info(udev_device->udev, "stat '%s' failed: %m\n", path);
                goto out;
        }