X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=udev-add.c;h=7a89076add32891c287d878a738d2c62803ab1e3;hb=606bce83da8edaa63d249a15c2d7439856526249;hp=2b27855553885821342596dcc0dfab219674381a;hpb=5b52fccb5950e26a30cd4bc44932fec45ce44227;p=elogind.git diff --git a/udev-add.c b/udev-add.c index 2b2785555..7a89076ad 100644 --- a/udev-add.c +++ b/udev-add.c @@ -27,6 +27,7 @@ #include #include #include +#include #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)); @@ -128,7 +136,7 @@ exit: * If it doesn't happen in about 10 seconds, give up. */ #define SECONDS_TO_WAIT_FOR_DEV 10 -int sleep_for_dev(char *path) +static int sleep_for_dev(char *path) { char filename[SYSFS_PATH_MAX + 6]; struct stat buf; @@ -161,7 +169,6 @@ int udev_add_device(char *path, char *subsystem) { struct sysfs_class_device *class_dev; struct udevice dev; - struct device_attr attr; int retval = -EINVAL; /* for now, the block layer is the only place where block devices are */ @@ -178,7 +185,7 @@ int udev_add_device(char *path, char *subsystem) if (class_dev == NULL) goto exit; - retval = namedev_name_device(class_dev, &attr); + retval = namedev_name_device(class_dev, &dev); if (retval) return retval; @@ -188,10 +195,10 @@ int udev_add_device(char *path, char *subsystem) goto exit; } - strcpy(dev.name, attr.name); - strcpy(dev.owner, attr.owner); - strcpy(dev.group, attr.group); - dev.mode = attr.mode; +// strcpy(dev.name, attr.name); +// strcpy(dev.owner, attr.owner); +// strcpy(dev.group, attr.group); +// dev.mode = attr.mode; retval = udevdb_add_dev(path, &dev); if (retval != 0)