X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namedev.c;h=41f0bc0f161743a4ab971be63f99a8c91df66e18;hb=b821330f0fce374902a1c8e32064196276006bca;hp=a5c711bdf65dd282d95ca56f74d5bca7f9856ab9;hpb=69f57c6a2b94ae3b70a0ca43b46c30f8dce0a295;p=elogind.git diff --git a/namedev.c b/namedev.c index a5c711bdf..41f0bc0f1 100644 --- a/namedev.c +++ b/namedev.c @@ -152,7 +152,7 @@ static int find_free_number(struct udevice *udev, const char *name) while (1) { dbg("look for existing node '%s'", filename); memset(&db_udev, 0x00, sizeof(struct udevice)); - if (udev_db_get_device_byname(&db_udev, filename) != 0) { + if (udev_db_get_device_by_name(&db_udev, filename) != 0) { dbg("free num=%d", num); return num; } @@ -168,8 +168,7 @@ static int find_free_number(struct udevice *udev, const char *name) } static void apply_format(struct udevice *udev, char *string, size_t maxsize, - struct sysfs_class_device *class_dev, - struct sysfs_device *sysfs_device) + struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device) { char temp[NAME_SIZE]; char temp2[NAME_SIZE]; @@ -201,29 +200,20 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, dbg("format=%c, string='%s', tail='%s'",c , string, tail); attr = get_format_attribute(&tail); - switch (c) { case 'p': - if (strlen(udev->devpath) == 0) - break; strfieldcatmax(string, udev->devpath, maxsize); dbg("substitute kernel name '%s'", udev->kernel_name); break; case 'b': - if (strlen(udev->bus_id) == 0) - break; strfieldcatmax(string, udev->bus_id, maxsize); dbg("substitute bus_id '%s'", udev->bus_id); break; case 'k': - if (strlen(udev->kernel_name) == 0) - break; strfieldcatmax(string, udev->kernel_name, maxsize); dbg("substitute kernel name '%s'", udev->kernel_name); break; case 'n': - if (strlen(udev->kernel_number) == 0) - break; strfieldcatmax(string, udev->kernel_number, maxsize); dbg("substitute kernel number '%s'", udev->kernel_number); break; @@ -236,7 +226,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, dbg("substitute major number '%u'", major(udev->devt)); break; case 'c': - if (strlen(udev->program_result) == 0) + if (udev->program_result[0] == '\0') break; /* get part part of the result string */ i = 0; @@ -343,19 +333,6 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, } } -static void fix_kernel_name(struct udevice *udev) -{ - char *temp = udev->kernel_name; - - while (*temp != 0x00) { - /* Some block devices have a ! in their name, - * we need to change that to / */ - if (*temp == '!') - *temp = '/'; - ++temp; - } -} - static int execute_program(struct udevice *udev, const char *path, char *value, int len) { int retval; @@ -549,8 +526,8 @@ static int match_id(struct config_device *dev, struct sysfs_class_device *class_ dbg("search '%s' in '%s', path='%s'", dev->id, temp, path); if (strcmp_pattern(dev->id, temp) != 0) return -ENODEV; - else - return 0; + + return 0; } static int match_place(struct config_device *dev, struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device) @@ -582,7 +559,6 @@ static int match_place(struct config_device *dev, struct sysfs_class_device *cla static int match_rule(struct udevice *udev, struct config_device *dev, struct sysfs_class_device *class_dev, struct sysfs_device *sysfs_device) { - /* check for matching kernel name */ if (dev->kernel[0] != '\0') { dbg("check for " FIELD_KERNEL " dev->kernel='%s' class_dev->name='%s'", dev->kernel, class_dev->name); @@ -593,7 +569,6 @@ static int match_rule(struct udevice *udev, struct config_device *dev, dbg(FIELD_KERNEL " matches"); } - /* check for matching subsystem */ if (dev->subsystem[0] != '\0') { dbg("check for " FIELD_SUBSYSTEM " dev->subsystem='%s' class_dev->name='%s'", dev->subsystem, class_dev->name); @@ -710,7 +685,6 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d struct sysfs_class_device *class_dev_parent; struct sysfs_device *sysfs_device = NULL; struct config_device *dev; - char *pos; dbg("class_dev->name='%s'", class_dev->name); @@ -733,16 +707,7 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d strfieldcpy(udev->bus_id, sysfs_device->bus_id); } - strfieldcpy(udev->kernel_name, class_dev->name); - fix_kernel_name(udev); - dbg("udev->kernel_name = '%s'", udev->kernel_name); - - /* get kernel number */ - pos = class_dev->name + strlen(class_dev->name); - while (isdigit(*(pos-1))) - pos--; - strfieldcpy(udev->kernel_number, pos); - dbg("kernel_number='%s'", udev->kernel_number); + dbg("udev->kernel_name='%s'", udev->kernel_name); /* look for a matching rule to apply */ list_for_each_entry(dev, &config_device_list, node) { @@ -756,7 +721,7 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d return -1; } if (dev->ignore_remove) { - udev->ignore_remove = dev->ignore_remove; + udev->ignore_remove = 1; dbg_parse("remove event should be ignored"); } /* apply all_partitions option only at a main block device */ @@ -781,7 +746,7 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d dbg("applied group='%s' to '%s'", udev->group, udev->kernel_name); } - /* collect symlinks for this or the final matching rule */ + /* collect symlinks */ if (dev->symlink[0] != '\0') { char temp[NAME_SIZE]; @@ -808,16 +773,17 @@ int namedev_name_device(struct udevice *udev, struct sysfs_class_device *class_d dbg("name, '%s' is going to have owner='%s', group='%s', mode=%#o partitions=%i", udev->name, udev->owner, udev->group, udev->mode, udev->partitions); - goto exit; + break; } } } - /* no rule matched, so we use the kernel name */ - strfieldcpy(udev->name, udev->kernel_name); - dbg("no rule found, use kernel name '%s'", udev->name); + if (udev->name[0] == '\0') { + /* no rule matched, so we use the kernel name */ + strfieldcpy(udev->name, udev->kernel_name); + dbg("no rule found, use kernel name '%s'", udev->name); + } -exit: if (udev->tmp_node[0] != '\0') { dbg("removing temporary device node"); unlink_secure(udev->tmp_node);