chiark / gitweb /
[PATCH] Allow GROUP to have modifiers in it
[elogind.git] / udev_lib.c
index a3fab9632d28a273079b46115f2361a63edb1168..86a526f7e816ecca46aedf4dc622a355d92b7b74 100644 (file)
 #include "list.h"
 
 
-#define BLOCK_PATH             "/block/"
-#define CLASS_PATH             "/class/"
-#define NET_PATH               "/class/net/"
-
-char get_device_type(const char *path, const char *subsystem)
-{
-       if (strcmp(subsystem, "block") == 0)
-               return 'b';
-
-       if (strcmp(subsystem, "net") == 0)
-               return 'n';
-
-       if (strncmp(path, BLOCK_PATH, strlen(BLOCK_PATH)) == 0 &&
-           strlen(path) > strlen(BLOCK_PATH))
-               return 'b';
-
-       if (strncmp(path, NET_PATH, strlen(NET_PATH)) == 0 &&
-           strlen(path) > strlen(NET_PATH))
-               return 'n';
-
-       if (strncmp(path, CLASS_PATH, strlen(CLASS_PATH)) == 0 &&
-           strlen(path) > strlen(CLASS_PATH))
-               return 'c';
-
-       return '\0';
-}
-
 void udev_set_values(struct udevice *udev, const char* devpath,
                     const char *subsystem, const char* action)
 {
        memset(udev, 0x00, sizeof(struct udevice));
-       strfieldcpy(udev->devpath, devpath);
-       strfieldcpy(udev->subsystem, subsystem);
-       strfieldcpy(udev->action, action);
-       udev->type = get_device_type(devpath, subsystem);
+
+       if (devpath)
+               strfieldcpy(udev->devpath, devpath);
+       if (subsystem)
+               strfieldcpy(udev->subsystem, subsystem);
+       if (action)
+               strfieldcpy(udev->action, action);
+
+       if (strcmp(udev->subsystem, "block") == 0)
+               udev->type = 'b';
+       else if (strcmp(udev->subsystem, "net") == 0)
+               udev->type = 'n';
+       else if (strncmp(udev->devpath, "/block/", 7) == 0)
+               udev->type = 'b';
+       else if (strncmp(udev->devpath, "/class/net/", 11) == 0)
+               udev->type = 'n';
+       else if (strncmp(udev->devpath, "/class/", 7) == 0)
+               udev->type = 'c';
 }
 
 int kernel_release_satisfactory(int version, int patchlevel, int sublevel)
 {
-       static struct utsname uts;
        static int kversion = 0;
        static int kpatchlevel;
        static int ksublevel;
 
        if (kversion == 0) {
+               struct utsname uts;
                if (uname(&uts) != 0)
                        return -1;