chiark / gitweb /
libudev: get rid of udev_sysfs.c
authorKay Sievers <kay.sievers@vrfy.org>
Wed, 10 Sep 2008 12:29:07 +0000 (14:29 +0200)
committerKay Sievers <kay.sievers@vrfy.org>
Wed, 10 Sep 2008 12:29:07 +0000 (14:29 +0200)
14 files changed:
extras/ata_id/Makefile.am
extras/cdrom_id/Makefile.am
extras/edd_id/Makefile.am
extras/floppy/Makefile.am
extras/fstab_import/Makefile.am
extras/scsi_id/Makefile.am
extras/usb_id/Makefile.am
extras/volume_id/Makefile.am
udev/lib/Makefile.am
udev/lib/libudev-device.c
udev/lib/libudev-enumerate.c
udev/lib/libudev-private.h
udev/lib/libudev-utils.c
udev/lib/libudev.c

index db5f87f..f749648 100644 (file)
@@ -12,7 +12,6 @@ ata_id_SOURCES = \
        ata_id.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
index 0514a2e..9a39ee5 100644 (file)
@@ -15,7 +15,6 @@ cdrom_id_SOURCES = \
        cdrom_id.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
index 22af7e9..575de85 100644 (file)
@@ -15,7 +15,6 @@ edd_id_SOURCES = \
        edd_id.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
index a5e9c10..44e9b2f 100644 (file)
@@ -11,11 +11,9 @@ create_floppy_devices_SOURCES = \
        create_floppy_devices.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
-       ../../udev/udev_utils_string.c \
-       ../../udev/udev_utils_file.c
+       ../../udev/udev_utils_string.c
 
 if USE_SELINUX
 create_floppy_devices_LDADD = \
index c4fbdce..92be9a4 100644 (file)
@@ -15,7 +15,6 @@ fstab_import_SOURCES = \
        fstab_import.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
index f42563f..ffa9bf3 100644 (file)
@@ -15,7 +15,6 @@ scsi_id_SOURCES = \
        bsg.h \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
index aa1c4f8..9eb6f16 100644 (file)
@@ -11,8 +11,8 @@ usb_id_SOURCES = \
        usb_id.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
+       ../../udev/udev_sysfs.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
 
index 9fb2cba..8560763 100644 (file)
@@ -14,7 +14,6 @@ vol_id_SOURCES = \
        vol_id.c \
        ../../udev/lib/libudev.h \
        ../../udev/lib/libudev.c \
-       ../../udev/udev_sysfs.c \
        ../../udev/udev_sysdeps.c \
        ../../udev/udev_utils.c \
        ../../udev/udev_utils_string.c
index 33d0f63..a768daa 100644 (file)
@@ -32,7 +32,6 @@ libudev_la_SOURCES =\
        ../udev.h \
        ../udev_utils.c \
        ../udev_utils_string.c \
-       ../udev_sysfs.c \
        ../udev_sysdeps.c
 
 libudev_la_LDFLAGS = \
index e131465..416cae4 100644 (file)
@@ -205,7 +205,7 @@ struct udev_device *udev_device_new_from_devpath(struct udev *udev, const char *
 
        /* resolve possible symlink to real path */
        strlcpy(path, devpath, sizeof(path));
-       sysfs_resolve_link(udev, path, sizeof(path));
+       util_resolve_sys_link(udev, path, sizeof(path));
        device_set_devpath(udev_device, path);
        info(udev, "device %p has devpath '%s'\n", udev_device, udev_device_get_devpath(udev_device));
 
index 1ba4de8..f36eafa 100644 (file)
@@ -58,7 +58,7 @@ static int devices_scan_subsystem(struct udev *udev,
                strlcpy(devpath, &path[len], sizeof(devpath));
                strlcat(devpath, "/", sizeof(devpath));
                strlcat(devpath, dent->d_name, sizeof(devpath));
-               sysfs_resolve_link(udev, devpath, sizeof(devpath));
+               util_resolve_sys_link(udev, devpath, sizeof(devpath));
                name_list_add(udev, device_list, devpath, 1);
        }
        closedir(dir);
index daa869b..1579df6 100644 (file)
@@ -106,4 +106,5 @@ extern int udev_ctrl_get_set_max_childs(struct udev_ctrl_msg *ctrl_msg);
 /* libudev-utils */
 extern ssize_t util_get_sys_subsystem(struct udev *udev, const char *devpath, char *subsystem, size_t size);
 extern ssize_t util_get_sys_driver(struct udev *udev, const char *devpath, char *driver, size_t size);
+extern int util_resolve_sys_link(struct udev *udev, char *devpath, size_t size);
 #endif
index 82acb1a..e5f1ed7 100644 (file)
@@ -63,3 +63,34 @@ ssize_t util_get_sys_driver(struct udev *udev, const char *devpath, char *driver
        return get_sys_link(udev, "driver", devpath, driver, size);
 }
 
+int util_resolve_sys_link(struct udev *udev, char *devpath, size_t size)
+{
+       char link_path[PATH_SIZE];
+       char link_target[PATH_SIZE];
+       int len;
+       int i;
+       int back;
+
+       strlcpy(link_path, udev_get_sys_path(udev), sizeof(link_path));
+       strlcat(link_path, devpath, sizeof(link_path));
+       len = readlink(link_path, link_target, sizeof(link_target));
+       if (len <= 0)
+               return -1;
+       link_target[len] = '\0';
+       dbg(udev, "path link '%s' points to '%s'\n", devpath, link_target);
+
+       for (back = 0; strncmp(&link_target[back * 3], "../", 3) == 0; back++)
+               ;
+       dbg(udev, "base '%s', tail '%s', back %i\n", devpath, &link_target[back * 3], back);
+       for (i = 0; i <= back; i++) {
+               char *pos = strrchr(devpath, '/');
+
+               if (pos == NULL)
+                       return -1;
+               pos[0] = '\0';
+       }
+       dbg(udev, "after moving back '%s'\n", devpath);
+       strlcat(devpath, "/", size);
+       strlcat(devpath, &link_target[back * 3], size);
+       return 0;
+}
index 50fe0d1..3bcafcd 100644 (file)
@@ -295,10 +295,7 @@ struct udev *udev_new(void)
 
        if (udev->dev_path == NULL || udev->sys_path == NULL)
                goto err;
-
        selinux_init(udev);
-       sysfs_init();
-
        info(udev, "context %p created\n", udev);
        info(udev, "log_priority=%d\n", udev->log_priority);
        info(udev, "config_file='%s'\n", config_file);
@@ -306,7 +303,6 @@ struct udev *udev_new(void)
        info(udev, "sys_path='%s'\n", udev->sys_path);
        if (udev->rules_path != NULL)
                info(udev, "rules_path='%s'\n", udev->rules_path);
-
        free(config_file);
        return udev;
 err:
@@ -347,7 +343,6 @@ void udev_unref(struct udev *udev)
        udev->refcount--;
        if (udev->refcount > 0)
                return;
-       sysfs_cleanup();
        selinux_exit(udev);
        free(udev->dev_path);
        free(udev->sys_path);