[PATCH] rename strn*() macros to strmax

Hey, I wrote the strn*() macros just 10 days ago and yesterday this trap
caught me with the %c{x} bug.
The names are misleading cause we all expect that the from field is limited by
the size argument, but we actually limit the overall size of the destination
string to prevent a overflow.

Here we rename all strn*() macros to str*max(). That should be
more self-explanatory.
This commit is contained in:
kay.sievers@vrfy.org 2004-03-09 19:50:15 -08:00 committed by Greg KH
parent 3f20eac0a5
commit 17794d77b9
6 changed files with 22 additions and 22 deletions

View file

@ -247,27 +247,27 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
case 'b':
if (strlen(udev->bus_id) == 0)
break;
strnfieldcat(string, udev->bus_id, maxsize);
strfieldcatmax(string, udev->bus_id, maxsize);
dbg("substitute bus_id '%s'", udev->bus_id);
break;
case 'k':
if (strlen(udev->kernel_name) == 0)
break;
strnfieldcat(string, udev->kernel_name, maxsize);
strfieldcatmax(string, udev->kernel_name, maxsize);
dbg("substitute kernel name '%s'", udev->kernel_name);
break;
case 'n':
if (strlen(udev->kernel_number) == 0)
break;
strnfieldcat(string, udev->kernel_number, maxsize);
strfieldcatmax(string, udev->kernel_number, maxsize);
dbg("substitute kernel number '%s'", udev->kernel_number);
break;
case 'm':
strnintcat(string, udev->minor, maxsize);
strintcatmax(string, udev->minor, maxsize);
dbg("substitute minor number '%u'", udev->minor);
break;
case 'M':
strnintcat(string, udev->major, maxsize);
strintcatmax(string, udev->major, maxsize);
dbg("substitute major number '%u'", udev->major);
break;
case 'c':
@ -287,11 +287,11 @@ 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);
strfieldcpymax(temp2, spos, slen+1);
strfieldcatmax(string, temp2, maxsize);
dbg("substitute part of result string '%s'", temp2);
} else {
strnfieldcat(string, udev->program_result, maxsize);
strfieldcatmax(string, udev->program_result, maxsize);
dbg("substitute result string '%s'", udev->program_result);
}
break;
@ -302,14 +302,14 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
dbg("sysfa attribute '%s' not found", attr);
break;
}
strnfieldcat(string, tmpattr->value, maxsize);
strfieldcatmax(string, tmpattr->value, maxsize);
dbg("substitute sysfs value '%s'", tmpattr->value);
} else {
dbg("missing attribute");
}
break;
case '%':
strnfieldcat(string, "%", maxsize);
strfieldcatmax(string, "%", maxsize);
break;
default:
dbg("unknown substitution type '%%%c'", c);
@ -319,7 +319,7 @@ static void apply_format(struct udevice *udev, char *string, size_t maxsize,
if (len > 0)
pos[len] = '\0';
strnfieldcat(string, tail, maxsize);
strfieldcatmax(string, tail, maxsize);
}
}
@ -428,7 +428,7 @@ static int execute_program(char *path, char *value, int len)
dup(fds[1]);
/* copy off our path to use incase we have too many args */
strnfieldcpy(buffer, path, sizeof(buffer));
strfieldcpymax(buffer, path, sizeof(buffer));
if (strchr(path, ' ')) {
/* exec with arguments */

View file

@ -141,7 +141,7 @@ static void set_to_local_user(char *user)
struct utmp *u;
time_t recent = 0;
strnfieldcpy(user, default_owner_str, OWNER_SIZE);
strfieldcpymax(user, default_owner_str, OWNER_SIZE);
setutent();
while (1) {
u = getutent();
@ -158,7 +158,7 @@ static void set_to_local_user(char *user)
if (u->ut_time > recent) {
recent = u->ut_time;
strnfieldcpy(user, u->ut_user, OWNER_SIZE);
strfieldcpymax(user, u->ut_user, OWNER_SIZE);
dbg("local user is '%s'", user);
break;
}
@ -282,7 +282,7 @@ static int create_node(struct udevice *dev, int fake)
/* create symlink if requested */
foreach_strpart(dev->symlink, " ", pos, len) {
strnfieldcpy(linkname, pos, len+1);
strfieldcpymax(linkname, pos, len+1);
strfieldcpy(filename, udev_root);
strfieldcat(filename, linkname);
dbg("symlink '%s' to node '%s' requested", filename, dev->name);

View file

@ -103,7 +103,7 @@ static int delete_node(struct udevice *dev)
delete_path(filename);
foreach_strpart(dev->symlink, " ", pos, len) {
strnfieldcpy(linkname, pos, len+1);
strfieldcpymax(linkname, pos, len+1);
strfieldcpy(filename, udev_root);
strfieldcat(filename, linkname);

6
udev.h
View file

@ -73,13 +73,13 @@ do { \
strncat(to, from, sizeof(to) - strlen(to)-1); \
} while (0)
#define strnfieldcpy(to, from, maxsize) \
#define strfieldcpymax(to, from, maxsize) \
do { \
to[maxsize-1] = '\0'; \
strncpy(to, from, maxsize-1); \
} while (0)
#define strnfieldcat(to, from, maxsize) \
#define strfieldcatmax(to, from, maxsize) \
do { \
to[maxsize-1] = '\0'; \
strncat(to, from, maxsize - strlen(to)-1); \
@ -91,7 +91,7 @@ do { \
snprintf((to) + strlen(to), sizeof(to) - strlen(to)-1, "%u", i); \
} while (0)
#define strnintcat(to, i, maxsize) \
#define strintcatmax(to, i, maxsize) \
do { \
to[maxsize-1] = '\0'; \
snprintf((to) + strlen(to), maxsize - strlen(to)-1, "%u", i); \

View file

@ -81,7 +81,7 @@ static void init_variables(void)
#define set_var(_name, _var) \
if (strcasecmp(variable, _name) == 0) { \
dbg_parse("%s = '%s'", _name, value); \
strnfieldcpy(_var, value, sizeof(_var));\
strfieldcpymax(_var, value, sizeof(_var));\
}
#define set_bool(_name, _var) \

View file

@ -184,7 +184,7 @@ static int find_device_by_name(char *path, struct udevice *dev)
if (strncmp(dev->name, find_name, sizeof(dev->name)) == 0) {
memcpy(find_dev, dev, sizeof(struct udevice));
strnfieldcpy(find_path, path, NAME_SIZE);
strfieldcpymax(find_path, path, NAME_SIZE);
find_found = 1;
/* stop search */
return 1;
@ -198,7 +198,7 @@ static int find_device_by_name(char *path, struct udevice *dev)
continue;
memcpy(find_dev, dev, sizeof(struct udevice));
strnfieldcpy(find_path, path, NAME_SIZE);
strfieldcpymax(find_path, path, NAME_SIZE);
find_found = 1;
return 1;
}