Skip to contentSkip to conversation

rename strn*() macros to strmax

PATCH Applied Kay Sievers 2 participants 2 messages Mar 4, 2004 – Mar 9, 2004

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 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.

thanks,
Kay

===== namedev.c 1.125 vs edited =====

namedev.c +12 -12
@@ -247,27 +247,27 @@
 		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 @@
 					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 @@
 					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 @@
 		if (len > 0)
 			pos[len] = '\0';
 
-		strnfieldcat(string, tail, maxsize);
+		strfieldcatmax(string, tail, maxsize);
 	}
 }
 
@@ -428,7 +428,7 @@
 		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 */

===== udev-add.c 1.60 vs edited =====

udev-add.c +3 -3
@@ -141,7 +141,7 @@
 	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 @@
 
 		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 @@
 
 	/* 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);

===== udev-remove.c 1.24 vs edited =====

udev-remove.c +1 -1
@@ -103,7 +103,7 @@
 		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);
 

===== udev.h 1.50 vs edited =====

udev.h +3 -3
@@ -73,13 +73,13 @@
 	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 @@
 	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); \

===== udev_config.c 1.13 vs edited =====

udev_config.c +1 -1
@@ -81,7 +81,7 @@
 #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)				\

===== udevdb.c 1.26 vs edited =====

udevdb.c +2 -2
@@ -184,7 +184,7 @@
 
 	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 @@
 			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;
 	}
Applied
#1 lore raw
Quoted 8 lines · Kay Sievers

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.

Applied, thanks.

greg k-h

-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of GenToo technologies. Learn everything from fundamentals to system administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
Linux-hotplug-devel mailing list http://linux-hotplug.sourceforge.net
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-hotplug-devel