chiark / gitweb /
[PATCH] fix NAME="foo-%c{N}" gets a truncated name
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>
Thu, 4 Mar 2004 08:54:13 +0000 (00:54 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:35:08 +0000 (21:35 -0700)
On Wed, Mar 03, 2004 at 02:43:34PM -0800, Patrick Mansfield wrote:
> Here is a fix and a new test for the problem Atul hit, where if we have a
> NAME based on a result of the form:
>
>  NAME="foo-%c{7}"
>
> udev truncates the name. Without any prefix (the foo- in this example),
> the rule was working OK.

Here is a fix for the fix :)

Sorry, I broke it yesterday.

namedev.c

index 74d4d76..e9b3bab 100644 (file)
--- a/namedev.c
+++ b/namedev.c
@@ -214,6 +214,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
                         struct sysfs_device *sysfs_device)
 {
        char temp[NAME_SIZE];
+       char temp2[NAME_SIZE];
        char *tail;
        char *pos;
        char *attr;
@@ -277,6 +278,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
                                i = atoi(attr);
                        if (i > 0) {
                                foreach_strpart(udev->program_result, " \n\r", spos, slen) {
+                                       strnfieldcpy(temp2, udev->program_result + spos, slen+1);
                                        i--;
                                        if (i == 0)
                                                break;
@@ -285,8 +287,8 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
                                        dbg("requested part of result string not found");
                                        break;
                                }
-                               strnfieldcat(string, udev->program_result + spos, slen+1);
-                               dbg("substitute part of result string '%s'", pos);
+                               strnfieldcat(string, temp2, maxsize);
+                               dbg("substitute part of result string '%s'", temp2);
                        } else {
                                strnfieldcat(string, udev->program_result, maxsize);
                                dbg("substitute result string '%s'", udev->program_result);