chiark / gitweb /
[PATCH] correct udev_init_device
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>
Fri, 4 Mar 2005 20:13:18 +0000 (21:13 +0100)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 06:39:48 +0000 (23:39 -0700)
udev.c
udev.h
udev_utils.c

diff --git a/udev.c b/udev.c
index 7854bc74d0a2f4a8e7f98c3881bf4946c13de409..802e41d14719aeea9b3ea858cb4c8977fb379f16 100644 (file)
--- a/udev.c
+++ b/udev.c
@@ -96,7 +96,6 @@ static void asmlinkage sig_handler(int signum)
 
 int main(int argc, char *argv[], char *envp[])
 {
-       struct sigaction act;
        struct sysfs_class_device *class_dev;
        struct sysfs_device *devices_dev;
        struct udevice udev;
@@ -106,6 +105,7 @@ int main(int argc, char *argv[], char *envp[])
        const char *devpath;
        const char *subsystem;
        int managed_event;
+       struct sigaction act;
        int retval = -EINVAL;
 
        if (argc == 2 && strcmp(argv[1], "-V") == 0) {
@@ -153,16 +153,10 @@ int main(int argc, char *argv[], char *envp[])
        if (!subsystem && argc == 2)
                subsystem = argv[1];
 
-       if (!action) {
-               dbg("no action");
-               goto hotplug;
-       }
-       if (!subsystem) {
-               dbg("no subsystem");
-               goto hotplug;
-       }
-       if (!devpath) {
-               dbg("no devpath");
+       udev_init_device(&udev, devpath, subsystem);
+
+       if (!action || !subsystem || !devpath) {
+               dbg("action, subsystem or devpath missing");
                goto hotplug;
        }
 
@@ -170,8 +164,6 @@ int main(int argc, char *argv[], char *envp[])
        if (udev_log)
                setenv("UDEV_LOG", "1", 1);
 
-       udev_init_device(&udev, devpath, subsystem);
-
        if (udev.type == BLOCK || udev.type == CLASS || udev.type == NET) {
                if (strcmp(action, "add") == 0) {
                        /* wait for sysfs and possibly add node */
diff --git a/udev.h b/udev.h
index d6dbd7c3325dcd00dbd47562fd22eeac52b47a3f..ddcfa81c8eee1b95ad02d77257bf6fd2c1fe334f 100644 (file)
--- a/udev.h
+++ b/udev.h
@@ -31,6 +31,7 @@
 #define ALARM_TIMEOUT                  120
 #define COMMENT_CHARACTER              '#'
 
+#define LINE_SIZE                      512
 #define NAME_SIZE                      256
 #define USER_SIZE                      32
 
@@ -39,8 +40,6 @@
 #define SUBSYSTEM_SIZE                 32
 #define SEQNUM_SIZE                    32
 
-#define LINE_SIZE                      512
-
 #define DEVD_DIR                       "/etc/dev.d"
 #define DEVD_SUFFIX                    ".dev"
 
@@ -62,6 +61,7 @@ struct udevice {
        char subsystem[SUBSYSTEM_SIZE];
 
        char name[NAME_SIZE];
+       char devname[NAME_SIZE];
        char symlink[NAME_SIZE];
        char owner[USER_SIZE];
        char group[USER_SIZE];
@@ -69,7 +69,6 @@ struct udevice {
        char type;
        dev_t devt;
 
-       char devname[NAME_SIZE];
        char tmp_node[NAME_SIZE];
        int partitions;
        int ignore_remove;
index c1e497626ee4283940d1aefbe62d4b054258a1de..f2534dd331d3ade1d9da474949cdc39e44b02e4d 100644 (file)
@@ -43,52 +43,49 @@ int udev_init_device(struct udevice *udev, const char* devpath, const char *subs
 
        memset(udev, 0x00, sizeof(struct udevice));
 
+       if (subsystem)
+               strfieldcpy(udev->subsystem, subsystem);
+
        if (devpath) {
                strfieldcpy(udev->devpath, devpath);
                no_trailing_slash(udev->devpath);
-       }
-       if (subsystem)
-               strfieldcpy(udev->subsystem, subsystem);
 
-       if (strcmp(udev->subsystem, "block") == 0)
-               udev->type = BLOCK;
-       else if (strcmp(udev->subsystem, "net") == 0)
-               udev->type = NET;
-       else if (strncmp(udev->devpath, "/block/", 7) == 0)
-               udev->type = BLOCK;
-       else if (strncmp(udev->devpath, "/class/net/", 11) == 0)
-               udev->type = NET;
-       else if (strncmp(udev->devpath, "/class/", 7) == 0)
-               udev->type = CLASS;
-       else if (strncmp(udev->devpath, "/devices/", 9) == 0)
-               udev->type = PHYSDEV;
+               if (strncmp(udev->devpath, "/block/", 7) == 0)
+                       udev->type = BLOCK;
+               else if (strncmp(udev->devpath, "/class/net/", 11) == 0)
+                       udev->type = NET;
+               else if (strncmp(udev->devpath, "/class/", 7) == 0)
+                       udev->type = CLASS;
+               else if (strncmp(udev->devpath, "/devices/", 9) == 0)
+                       udev->type = PHYSDEV;
+
+               /* get kernel name */
+               pos = strrchr(udev->devpath, '/');
+               if (pos) {
+                       strfieldcpy(udev->kernel_name, &pos[1]);
+                       dbg("kernel_name='%s'", udev->kernel_name);
+
+                       /* Some block devices have '!' in their name, change that to '/' */
+                       pos = udev->kernel_name;
+                       while (pos[0] != '\0') {
+                               if (pos[0] == '!')
+                                       pos[0] = '/';
+                               pos++;
+                       }
+
+                       /* get kernel number */
+                       pos = &udev->kernel_name[strlen(udev->kernel_name)];
+                       while (isdigit(pos[-1]))
+                               pos--;
+                       strfieldcpy(udev->kernel_number, pos);
+                       dbg("kernel_number='%s'", udev->kernel_number);
+               }
+       }
 
        udev->mode = 0660;
        strcpy(udev->owner, "root");
        strcpy(udev->group, "root");
 
-       /* get kernel name */
-       pos = strrchr(udev->devpath, '/');
-       if (pos == NULL)
-               return -1;
-       strfieldcpy(udev->kernel_name, &pos[1]);
-
-       /* get kernel number */
-       pos = &udev->kernel_name[strlen(udev->kernel_name)];
-       while (isdigit(pos[-1]))
-               pos--;
-       strfieldcpy(udev->kernel_number, pos);
-       dbg("kernel_number='%s'", udev->kernel_number);
-
-       /* Some block devices have '!' in their name, change that to '/' */
-       pos = udev->kernel_name;
-       while (pos[0] != '\0') {
-               if (pos[0] == '!')
-                       pos[0] = '/';
-               pos++;
-       }
-
-       dbg("kernel_name='%s'", udev->kernel_name);
        return 0;
 }