avoid using strok - eliminates use of hidden global variable
function old new delta udhcp_str2optset 616 650 +34 setpriv_main 950 975 +25 switch_root_main 688 706 +18 parse 958 970 +12 getopt_main 622 628 +6 parse_resolvconf 302 306 +4 mpstat_main 1139 1142 +3 static.p 4 - -4 cdcmd 717 702 -15 strtok 148 - -148 ------------------------------------------------------------------------------ (add/remove: 0/3 grow/shrink: 7/1 up/down: 102/-167) Total: -65 bytes Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
		@@ -289,12 +289,13 @@ static struct option *add_long_options(struct option *long_options, char *option
 | 
			
		||||
{
 | 
			
		||||
	int long_nr = 0;
 | 
			
		||||
	int arg_opt, tlen;
 | 
			
		||||
	char *tokptr = strtok(options, ", \t\n");
 | 
			
		||||
	char *tokptr;
 | 
			
		||||
 | 
			
		||||
	if (long_options)
 | 
			
		||||
		while (long_options[long_nr].name)
 | 
			
		||||
			long_nr++;
 | 
			
		||||
 | 
			
		||||
	tokptr = strtok_r(options, ", \t\n", &options);
 | 
			
		||||
	while (tokptr) {
 | 
			
		||||
		arg_opt = no_argument;
 | 
			
		||||
		tlen = strlen(tokptr);
 | 
			
		||||
@@ -318,7 +319,7 @@ static struct option *add_long_options(struct option *long_options, char *option
 | 
			
		||||
			long_nr++;
 | 
			
		||||
			/*memset(&long_options[long_nr], 0, sizeof(long_options[0])); - xrealloc_vector did it */
 | 
			
		||||
		}
 | 
			
		||||
		tokptr = strtok(NULL, ", \t\n");
 | 
			
		||||
		tokptr = strtok_r(NULL, ", \t\n", &options);
 | 
			
		||||
	}
 | 
			
		||||
	return long_options;
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -1230,6 +1230,7 @@ static NOINLINE int nfsmount(struct mntent *mp, unsigned long vfsflags, char *fi
 | 
			
		||||
	 * then data pointer is interpreted as a string. */
 | 
			
		||||
	struct nfs_mount_data data;
 | 
			
		||||
	char *opt;
 | 
			
		||||
	char *tokstate;
 | 
			
		||||
	struct hostent *hp;
 | 
			
		||||
	struct sockaddr_in server_addr;
 | 
			
		||||
	struct sockaddr_in mount_server_addr;
 | 
			
		||||
@@ -1348,7 +1349,7 @@ static NOINLINE int nfsmount(struct mntent *mp, unsigned long vfsflags, char *fi
 | 
			
		||||
	nfsvers = 0;
 | 
			
		||||
 | 
			
		||||
	/* parse options */
 | 
			
		||||
	if (filteropts)	for (opt = strtok(filteropts, ","); opt; opt = strtok(NULL, ",")) {
 | 
			
		||||
	if (filteropts)	for (opt = strtok_r(filteropts, ",", &tokstate); opt; opt = strtok_r(NULL, ",", &tokstate)) {
 | 
			
		||||
		char *opteq = strchr(opt, '=');
 | 
			
		||||
		if (opteq) {
 | 
			
		||||
			int val, idx;
 | 
			
		||||
 
 | 
			
		||||
@@ -144,10 +144,11 @@ static unsigned parse_cap(const char *cap)
 | 
			
		||||
static void set_inh_caps(char *capstring)
 | 
			
		||||
{
 | 
			
		||||
	struct caps caps;
 | 
			
		||||
	char *string;
 | 
			
		||||
 | 
			
		||||
	getcaps(&caps);
 | 
			
		||||
 | 
			
		||||
	capstring = strtok(capstring, ",");
 | 
			
		||||
	capstring = strtok_r(capstring, ",", &string);
 | 
			
		||||
	while (capstring) {
 | 
			
		||||
		unsigned cap;
 | 
			
		||||
 | 
			
		||||
@@ -159,7 +160,7 @@ static void set_inh_caps(char *capstring)
 | 
			
		||||
			caps.data[CAP_TO_INDEX(cap)].inheritable |= CAP_TO_MASK(cap);
 | 
			
		||||
		else
 | 
			
		||||
			caps.data[CAP_TO_INDEX(cap)].inheritable &= ~CAP_TO_MASK(cap);
 | 
			
		||||
		capstring = strtok(NULL, ",");
 | 
			
		||||
		capstring = strtok_r(NULL, ",", &string);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if (capset(&caps.header, caps.data) != 0)
 | 
			
		||||
@@ -170,7 +171,7 @@ static void set_ambient_caps(char *string)
 | 
			
		||||
{
 | 
			
		||||
	char *cap;
 | 
			
		||||
 | 
			
		||||
	cap = strtok(string, ",");
 | 
			
		||||
	cap = strtok_r(string, ",", &string);
 | 
			
		||||
	while (cap) {
 | 
			
		||||
		unsigned idx;
 | 
			
		||||
 | 
			
		||||
@@ -182,7 +183,7 @@ static void set_ambient_caps(char *string)
 | 
			
		||||
			if (prctl(PR_CAP_AMBIENT, PR_CAP_AMBIENT_LOWER, idx, 0, 0) < 0)
 | 
			
		||||
				bb_simple_perror_msg("cap_ambient_lower");
 | 
			
		||||
		}
 | 
			
		||||
		cap = strtok(NULL, ",");
 | 
			
		||||
		cap = strtok_r(NULL, ",", &string);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
#endif /* FEATURE_SETPRIV_CAPABILITIES */
 | 
			
		||||
 
 | 
			
		||||
@@ -164,7 +164,7 @@ static void drop_capabilities(char *string)
 | 
			
		||||
{
 | 
			
		||||
	char *cap;
 | 
			
		||||
 | 
			
		||||
	cap = strtok(string, ",");
 | 
			
		||||
	cap = strtok_r(string, ",", &string);
 | 
			
		||||
	while (cap) {
 | 
			
		||||
		unsigned cap_idx;
 | 
			
		||||
 | 
			
		||||
@@ -174,7 +174,7 @@ static void drop_capabilities(char *string)
 | 
			
		||||
		drop_bounding_set(cap_idx);
 | 
			
		||||
		drop_capset(cap_idx);
 | 
			
		||||
		bb_error_msg("dropped capability: %s", cap);
 | 
			
		||||
		cap = strtok(NULL, ",");
 | 
			
		||||
		cap = strtok_r(NULL, ",", &string);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user