mirror of
https://github.com/systemd/systemd.git
synced 2025-03-19 22:50:17 +03:00
[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 :)
This commit is contained in:
parent
a3fa7908e2
commit
ef672b3dc4
@ -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 {
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
||||
|
6
udev.h
6
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)
|
||||
|
5
udevdb.c
5
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))
|
||||
|
Loading…
x
Reference in New Issue
Block a user