summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-03-04 18:55:34 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:35:08 -0700
commitef672b3dc450846d540cf1a0519fe273bbd62e5f (patch)
tree360906e994de85195bc9d896495de18568a51063
parenta3fa7908e25bda3fc8627c7a91878a7825f9391f (diff)
[PATCH] better fix for NAME="foo-%c{N}" gets a truncated name
On Wed, Mar 03, 2004 at 04:56:34PM -0800, Greg KH wrote: > On Wed, Mar 03, 2004 at 03:57:04PM -0800, Patrick Mansfield wrote: > > > > Here is a patch for some new tests. > > Applied, thanks. Here is a small improvement, which looks much better. Hey Pat, thanks a lot for finding the recent bug, hope this one will not break it again :)
-rw-r--r--namedev.c5
-rw-r--r--udev-add.c5
-rw-r--r--udev-remove.c5
-rw-r--r--udev.h6
-rw-r--r--udevdb.c5
5 files changed, 15 insertions, 11 deletions
diff --git a/namedev.c b/namedev.c
index e9b3babd56..9182ed1fdc 100644
--- a/namedev.c
+++ b/namedev.c
@@ -220,8 +220,9 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
char *attr;
int len;
int i;
- int spos, slen;
char c;
+ char *spos;
+ int slen;
struct sysfs_attribute *tmpattr;
pos = string;
@@ -278,7 +279,6 @@ 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;
@@ -287,6 +287,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
dbg("requested part of result string not found");
break;
}
+ strnfieldcpy(temp2, spos, slen+1);
strnfieldcat(string, temp2, maxsize);
dbg("substitute part of result string '%s'", temp2);
} else {
diff --git a/udev-add.c b/udev-add.c
index 9562cb5dbb..de1fb953c4 100644
--- a/udev-add.c
+++ b/udev-add.c
@@ -195,7 +195,8 @@ static int create_node(struct udevice *dev, int fake)
gid_t gid = 0;
int i;
int tail;
- int pos, len;
+ char *pos;
+ int len;
strfieldcpy(filename, udev_root);
strfieldcat(filename, dev->name);
@@ -281,7 +282,7 @@ static int create_node(struct udevice *dev, int fake)
/* create symlink if requested */
foreach_strpart(dev->symlink, " ", pos, len) {
- strnfieldcpy(linkname, dev->symlink + pos, len+1);
+ strnfieldcpy(linkname, pos, len+1);
strfieldcpy(filename, udev_root);
strfieldcat(filename, linkname);
dbg("symlink '%s' to node '%s' requested", filename, dev->name);
diff --git a/udev-remove.c b/udev-remove.c
index 93adcc7806..195b987411 100644
--- a/udev-remove.c
+++ b/udev-remove.c
@@ -72,7 +72,8 @@ static int delete_node(struct udevice *dev)
char partitionname[NAME_SIZE];
int retval;
int i;
- int pos, len;
+ char *pos;
+ int len;
strfieldcpy(filename, udev_root);
strfieldcat(filename, dev->name);
@@ -102,7 +103,7 @@ static int delete_node(struct udevice *dev)
delete_path(filename);
foreach_strpart(dev->symlink, " ", pos, len) {
- strnfieldcpy(linkname, dev->symlink + pos, len+1);
+ strnfieldcpy(linkname, pos, len+1);
strfieldcpy(filename, udev_root);
strfieldcat(filename, linkname);
diff --git a/udev.h b/udev.h
index 9327e90913..32fda379e5 100644
--- a/udev.h
+++ b/udev.h
@@ -98,9 +98,9 @@ do { \
} while (0)
#define foreach_strpart(str, separator, pos, len) \
- for(pos = 0, len = strcspn(str, separator); \
- (pos) < strlen(str); \
- pos = pos + (len) + 1, len = strcspn((str) + pos, separator)) \
+ for(pos = str, len = 0; \
+ (pos) < ((str) + strlen(str)); \
+ pos = pos + len + strspn(pos, separator), len = strcspn(pos, separator)) \
if (len > 0)
static inline char *get_action(void)
diff --git a/udevdb.c b/udevdb.c
index 22d439d638..b12f5b3d46 100644
--- a/udevdb.c
+++ b/udevdb.c
@@ -179,7 +179,8 @@ static int find_found;
static int find_device_by_name(char *path, struct udevice *dev)
{
- int pos, len;
+ char *pos;
+ int len;
if (strncmp(dev->name, find_name, sizeof(dev->name)) == 0) {
memcpy(find_dev, dev, sizeof(struct udevice));
@@ -190,7 +191,7 @@ static int find_device_by_name(char *path, struct udevice *dev)
}
/* look for matching symlink*/
foreach_strpart(dev->symlink, " ", pos, len) {
- if (strncmp(&dev->symlink[pos], find_name, len) != 0)
+ if (strncmp(pos, find_name, len) != 0)
continue;
if (len != strlen(find_name))