X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namedev.c;h=0e1af9385fac995862570c30bddd9c464f63c287;hb=542bd1c0150453c94f3cc179e3aa891581a5004a;hp=4247b26693a96e2fec88d4639f8924ff151d916d;hpb=1f7148c7df35aea00f96ad52db221c0d561dbc4c;p=elogind.git diff --git a/namedev.c b/namedev.c index 4247b2669..0e1af9385 100644 --- a/namedev.c +++ b/namedev.c @@ -151,20 +151,21 @@ static mode_t get_default_mode(struct sysfs_class_device *class_dev) static void apply_format(struct udevice *udev, unsigned char *string) { - char name[NAME_SIZE]; char temp[NAME_SIZE]; + char temp1[NAME_SIZE]; char *tail; char *pos; char *pos2; char *pos3; int num; + pos = string; while (1) { num = 0; - pos = strchr(string, '%'); + pos = strchr(pos, '%'); if (pos) { - *pos = '\0'; + pos[0] = '\0'; tail = pos+1; if (isdigit(tail[0])) { num = (int) strtoul(&pos[1], &tail, 10); @@ -173,7 +174,7 @@ static void apply_format(struct udevice *udev, unsigned char *string) break; } } - strfieldcpy(name, tail+1); + strfieldcpy(temp, tail+1); switch (tail[0]) { case 'b': @@ -217,8 +218,8 @@ static void apply_format(struct udevice *udev, unsigned char *string) break; if (num) { /* get part of return string */ - strncpy(temp, udev->program_result, sizeof(temp)); - pos2 = temp; + strncpy(temp1, udev->program_result, sizeof(temp1)); + pos2 = temp1; while (num) { num--; pos3 = strsep(&pos2, " "); @@ -236,11 +237,15 @@ static void apply_format(struct udevice *udev, unsigned char *string) dbg("substitute result string '%s'", udev->program_result); } break; + case '%': + strcat(pos, "%"); + pos++; + break; default: dbg("unknown substitution type '%%%c'", pos[1]); break; } - strcat(string, name); + strcat(string, temp); } else break; } @@ -309,7 +314,7 @@ static int execute_program(char *path, char *value, int len) int value_set = 0; char buffer[256]; char *pos; - char *args[CALLOUT_MAXARG]; + char *args[PROGRAM_MAXARG]; int i; dbg("executing '%s'", path); @@ -331,7 +336,7 @@ static int execute_program(char *path, char *value, int len) if (strchr(path, ' ')) { /* exec with arguments */ pos = path; - for (i=0; i < CALLOUT_MAXARG-1; i++) { + for (i=0; i < PROGRAM_MAXARG-1; i++) { args[i] = strsep(&pos, " "); if (args[i] == NULL) break; @@ -716,7 +721,7 @@ int namedev_name_device(struct sysfs_class_device *class_dev, struct udevice *ud } /* Yup, this rule belongs to us! */ - dbg("found matching rule, '%s' becomes '%s'", dev->kernel, udev->name); + dbg("found matching rule, '%s' becomes '%s'", dev->kernel, dev->name); strfieldcpy(udev->name, dev->name); strfieldcpy(udev->symlink, dev->symlink); goto found;