summaryrefslogtreecommitdiff
path: root/udev-add.c
diff options
context:
space:
mode:
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>2004-02-26 19:37:47 -0800
committerGreg KH <gregkh@suse.de>2005-04-26 21:32:30 -0700
commitc472e3c89b9aaad90ad6398c0d2ff5dcf5a9d238 (patch)
treedf5bf5be11d19b5b29b6507055964a6d0a688a1a /udev-add.c
parent167a27e70f4010fdce561cff2ea1a07730aae28a (diff)
[PATCH] udev - safer string handling all over the place
On Tue, Feb 24, 2004 at 11:50:52PM +0100, Kay Sievers wrote: > Here is the first step towards a safer string handling. > More will follow, but for now only the easy ones :) > > Thanks to all who pointed this out. strncat() isn't a nice function. We > all should remember that the destination string is not terminated if the > given lenght is shorter than the strlen of the source string. > > And shame on the various implementers of strfieldcat() I found in the > unapplied patches on this list, it's not really better than strncpy() > and hides the real problem. Hmm, bk didn't checked in one file, maybe I edited it again as root. Nevermind, here is the more complete version.
Diffstat (limited to 'udev-add.c')
-rw-r--r--udev-add.c26
1 files changed, 13 insertions, 13 deletions
diff --git a/udev-add.c b/udev-add.c
index 736316629f..0d3131300f 100644
--- a/udev-add.c
+++ b/udev-add.c
@@ -78,7 +78,7 @@ static int create_path(char *file)
int retval;
struct stat stats;
- strncpy(p, file, sizeof(p));
+ strfieldcpy(p, file);
pos = strchr(p+1, '/');
while (1) {
pos = strchr(pos+1, '/');
@@ -145,8 +145,8 @@ static int create_node(struct udevice *dev, int fake)
int i;
int tail;
- strncpy(filename, udev_root, sizeof(filename));
- strncat(filename, dev->name, sizeof(filename));
+ strfieldcpy(filename, udev_root);
+ strfieldcat(filename, dev->name);
switch (dev->type) {
case 'b':
@@ -225,8 +225,8 @@ static int create_node(struct udevice *dev, int fake)
if (linkname == NULL || linkname[0] == '\0')
break;
- strncpy(filename, udev_root, sizeof(filename));
- strncat(filename, linkname, sizeof(filename));
+ strfieldcpy(filename, udev_root);
+ strfieldcat(filename, linkname);
dbg("symlink '%s' to node '%s' requested", filename, dev->name);
if (!fake)
if (strrchr(linkname, '/'))
@@ -243,13 +243,13 @@ static int create_node(struct udevice *dev, int fake)
}
while (linkname[i] != '\0') {
if (linkname[i] == '/')
- strcat(linktarget, "../");
+ strfieldcat(linktarget, "../");
i++;
}
if (linktarget[0] == '\0')
- strcpy(linktarget, "./");
- strcat(linktarget, &dev->name[tail]);
+ strfieldcpy(linktarget, "./");
+ strfieldcat(linktarget, &dev->name[tail]);
/* unlink existing files to ensure that our symlink is created */
if (!fake && (lstat(filename, &stats) == 0)) {
@@ -278,8 +278,8 @@ static struct sysfs_class_device *get_class_dev(char *device_name)
char dev_path[SYSFS_PATH_MAX];
struct sysfs_class_device *class_dev = NULL;
- strcpy(dev_path, sysfs_path);
- strcat(dev_path, device_name);
+ strfieldcpy(dev_path, sysfs_path);
+ strfieldcat(dev_path, device_name);
dbg("looking at '%s'", dev_path);
/* open up the sysfs class device for this thing... */
@@ -304,9 +304,9 @@ static int sleep_for_dev(char *path)
int loop = SECONDS_TO_WAIT_FOR_DEV;
int retval;
- strcpy(filename, sysfs_path);
- strcat(filename, path);
- strcat(filename, "/dev");
+ strfieldcpy(filename, sysfs_path);
+ strfieldcat(filename, path);
+ strfieldcat(filename, "/dev");
while (loop--) {
struct stat buf;