X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namedev.c;h=b3a2a8ae4b0bcb2bf0eb62955d47f71bf57153d8;hb=1eae2f3f712ff839bf80721bf9c44a76a78460dc;hp=7b70f8bcdfd40dea8f19dd23e23fe01a655d8666;hpb=949e32f2249da55890a6a49208023df30b6b5227;p=elogind.git diff --git a/namedev.c b/namedev.c index 7b70f8bcd..b3a2a8ae4 100644 --- a/namedev.c +++ b/namedev.c @@ -32,6 +32,9 @@ #include #include #include +#ifndef __KLIBC__ +#include +#endif #include "libsysfs/sysfs/libsysfs.h" #include "list.h" @@ -196,23 +199,21 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, struct sysfs_attribute *tmpattr; pos = string; - while (1) { - pos = strchr(string, '%'); - if (pos != NULL) { - pos[0] = '\0'; - tail = pos+1; - len = get_format_len(&tail); - c = tail[0]; - strfieldcpy(temp, tail+1); - tail = temp; - } else { + pos = strchr(pos, '%'); + if (pos == NULL) break; - } - dbg("format=%c, string='%s', tail='%s'",c , string, tail); + pos[0] = '\0'; + tail = pos+1; + len = get_format_len(&tail); + c = tail[0]; + strfieldcpy(temp, tail+1); + tail = temp; + dbg("format=%c, string='%s', tail='%s'",c , string, tail); attr = get_format_attribute(&tail); + switch (c) { case 'b': if (strlen(udev->bus_id) == 0) @@ -283,6 +284,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize, break; case '%': strfieldcatmax(string, "%", maxsize); + pos++; break; default: dbg("unknown substitution type '%%%c'", c); @@ -454,7 +456,7 @@ static int execute_program(char *path, char *value, int len) retval = -1; } - if (i > 0 && value[i] == '\n') + if (i > 0 && value[i-1] == '\n') i--; value[i] = '\0'; dbg("result is '%s'", value); @@ -776,6 +778,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud struct sysfs_device *sysfs_device = NULL; struct config_device *dev; struct perm_device *perm; + struct sysinfo info; char *pos; udev->mode = 0; @@ -837,33 +840,29 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud } } } - - /* no rule was found for the net device */ - if (udev->type == 'n') { - dbg("no name for net device '%s' configured", udev->kernel_name); - return -1; - } - /* no rule was found so we use the kernel name */ strfieldcpy(udev->name, udev->kernel_name); - goto done; + if (udev->type == 'n') + goto done; + else + goto perms; found: apply_format(udev, udev->name, sizeof(udev->name), class_dev, sysfs_device); + strfieldcpy(udev->config_file, dev->config_file); + udev->config_line = dev->config_line; if (udev->type == 'n') - return 0; + goto done; udev->partitions = dev->partitions; - strfieldcpy(udev->config_file, dev->config_file); - udev->config_line = dev->config_line; /* get permissions given in rule */ set_empty_perms(udev, dev->mode, dev->owner, dev->group); -done: +perms: /* get permissions given in config file or set defaults */ perm = find_perm(udev->name); if (perm != NULL) { @@ -879,8 +878,10 @@ done: dbg("name, '%s' is going to have owner='%s', group='%s', mode = %#o", udev->name, udev->owner, udev->group, udev->mode); +done: /* store time of action */ - udev->config_time = time(NULL); + sysinfo(&info); + udev->config_uptime = info.uptime; return 0; }