chiark / gitweb /
[PATCH] DESTDIR for udev
[elogind.git] / udev-add.c
index 3b0e4ddf0e495011b5900ce5926b6fbf55ece8eb..d237834c68b658a103b8c10992948b039899b2b0 100644 (file)
@@ -27,6 +27,7 @@
 #include <fcntl.h>
 #include <unistd.h>
 #include <errno.h>
+#include <sys/stat.h>
 
 #include "udev.h"
 #include "udev_version.h"
@@ -72,10 +73,17 @@ static int create_node(struct udevice *dev)
 {
        char filename[255];
        int retval = 0;
+       dev_t res;
 
        strncpy(filename, udev_root, sizeof(filename));
        strncat(filename, dev->name, sizeof(filename));
 
+#ifdef __KLIBC__
+       res = (dev->major << 8) | (dev->minor);
+#else
+       res = makedev(dev->major, dev->minor);
+#endif
+
        switch (dev->type) {
        case 'b':
                dev->mode |= S_IFBLK;
@@ -93,7 +101,7 @@ static int create_node(struct udevice *dev)
        }
 
        dbg("mknod(%s, %#o, %u, %u)", filename, dev->mode, dev->major, dev->minor);
-       retval = mknod(filename, dev->mode, makedev(dev->major, dev->minor));
+       retval = mknod(filename, dev->mode, res);
        if (retval)
                dbg("mknod(%s, %#o, %u, %u) failed with error '%s'",
                    filename, dev->mode, dev->major, dev->minor, strerror(errno));
@@ -131,26 +139,24 @@ exit:
 static int sleep_for_dev(char *path)
 {
        char filename[SYSFS_PATH_MAX + 6];
-       struct stat buf;
-       int loop = 0;
-       int retval = -ENODEV;
+       int loop = SECONDS_TO_WAIT_FOR_DEV;
+       int retval;
 
        strcpy(filename, sysfs_path);
        strcat(filename, path);
        strcat(filename, "/dev");
 
-       while (loop < SECONDS_TO_WAIT_FOR_DEV) {
+       while (loop--) {
+               struct stat buf;
+
                dbg("looking for %s", filename);
                retval = stat(filename, &buf);
-               if (retval == 0) {
-                       retval = 0;
+               if (!retval)
                        goto exit;
-               }
 
                /* sleep for a second or two to give the kernel a chance to
                 * create the dev file */
                sleep(1);
-               ++loop;
        }
        retval = -ENODEV;
 exit: