There was a missing ! on strcmp (despite the fact it worked in my testing,
authorRob Landley <rob@landley.net>
Sun, 22 Jan 2006 23:14:16 +0000 (23:14 -0000)
committerRob Landley <rob@landley.net>
Sun, 22 Jan 2006 23:14:16 +0000 (23:14 -0000)
I have no idea _how_), and a simpler fix for the extra \n problem.  I tested
this and it worked for me, for what that's worth...

util-linux/mdev.c

index 135843581ab0aa438ea00b01e25e99bfa77c1eea..a18e448357304432ce53e2e7e4daed2f350e8feb 100644 (file)
@@ -43,23 +43,13 @@ static void make_device(char *path)
        fd = open(temp, O_RDONLY);
        len = read(fd, temp, PATH_MAX-1);
        if (len<1) goto end;
-       temp[--len] = 0; // remove trailing \n
        close(fd);
        
        /* Determine device name, type, major and minor */
        
        device_name = strrchr(path, '/') + 1;
        type = strncmp(path+5, "block/" ,6) ? S_IFCHR : S_IFBLK;
-       major = minor = 0;
-       for (s = temp; *s; s++) {
-               if (*s == ':') {
-                       major = minor;
-                       minor = 0;
-               } else {
-                       minor *= 10;
-                       minor += (*s) - '0';
-               }
-       }
+       if(sscanf(temp, "%d:%d", &major, &minor) != 2) goto end;
 
        /* If we have a config file, look up permissions for this device */
        
@@ -202,7 +192,7 @@ static void find_dev(char *path)
                
                /* If there's a dev entry, mknod it */
                
-               if (strcmp(entry->d_name, "dev")) make_device(path);
+               if (!strcmp(entry->d_name, "dev")) make_device(path);
        }
        
        closedir(dir);