Replace index_in_[sub]str_array with index_in_[sub]strings,
which scans thru "abc\0def\0123\0\0" type strings. Saves 250 bytes. text data bss dec hex filename 781266 1328 11844 794438 c1f46 busybox_old 781010 1328 11844 794182 c1e46 busybox_unstripped
This commit is contained in:
		| @@ -19,8 +19,23 @@ int index_in_str_array(const char * const string_array[], const char *key) | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| int index_in_strings(const char *strings, const char *key) | ||||
| { | ||||
| 	int idx = 0; | ||||
|  | ||||
| 	while (strings[0]) { | ||||
| 		if (strcmp(strings, key) == 0) { | ||||
| 			return idx; | ||||
| 		} | ||||
| 		strings += strlen(strings) + 1; /* skip NUL */ | ||||
| 		idx++; | ||||
| 	} | ||||
| 	return -1; | ||||
| } | ||||
|  | ||||
| /* returns the array index of the string, even if it matches only a beginning */ | ||||
| /* (index of first match is returned, or -1) */ | ||||
| #ifdef UNUSED | ||||
| int index_in_substr_array(const char * const string_array[], const char *key) | ||||
| { | ||||
| 	int i; | ||||
| @@ -34,3 +49,21 @@ int index_in_substr_array(const char * const string_array[], const char *key) | ||||
| 	} | ||||
| 	return -1; | ||||
| } | ||||
| #endif | ||||
|  | ||||
| int index_in_substrings(const char *strings, const char *key) | ||||
| { | ||||
| 	int len = strlen(key); | ||||
|  | ||||
| 	if (len) { | ||||
| 		int idx = 0; | ||||
| 		while (strings[0]) { | ||||
| 			if (strncmp(strings, key, len) == 0) { | ||||
| 				return idx; | ||||
| 			} | ||||
| 			strings += strlen(strings) + 1; /* skip NUL */ | ||||
| 			idx++; | ||||
| 		} | ||||
| 	} | ||||
| 	return -1; | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user