xref: /aosp_15_r20/external/musl/src/misc/getsubopt.c (revision c9945492fdd68bbe62686c5b452b4dc1be3f8453)
1*c9945492SAndroid Build Coastguard Worker #include <stdlib.h>
2*c9945492SAndroid Build Coastguard Worker #include <string.h>
3*c9945492SAndroid Build Coastguard Worker 
getsubopt(char ** opt,char * const * keys,char ** val)4*c9945492SAndroid Build Coastguard Worker int getsubopt(char **opt, char *const *keys, char **val)
5*c9945492SAndroid Build Coastguard Worker {
6*c9945492SAndroid Build Coastguard Worker 	char *s = *opt;
7*c9945492SAndroid Build Coastguard Worker 	int i;
8*c9945492SAndroid Build Coastguard Worker 
9*c9945492SAndroid Build Coastguard Worker 	*val = NULL;
10*c9945492SAndroid Build Coastguard Worker 	*opt = strchr(s, ',');
11*c9945492SAndroid Build Coastguard Worker 	if (*opt) *(*opt)++ = 0;
12*c9945492SAndroid Build Coastguard Worker 	else *opt = s + strlen(s);
13*c9945492SAndroid Build Coastguard Worker 
14*c9945492SAndroid Build Coastguard Worker 	for (i=0; keys[i]; i++) {
15*c9945492SAndroid Build Coastguard Worker 		size_t l = strlen(keys[i]);
16*c9945492SAndroid Build Coastguard Worker 		if (strncmp(keys[i], s, l)) continue;
17*c9945492SAndroid Build Coastguard Worker 		if (s[l] == '=')
18*c9945492SAndroid Build Coastguard Worker 			*val = s + l + 1;
19*c9945492SAndroid Build Coastguard Worker 		else if (s[l]) continue;
20*c9945492SAndroid Build Coastguard Worker 		return i;
21*c9945492SAndroid Build Coastguard Worker 	}
22*c9945492SAndroid Build Coastguard Worker 	return -1;
23*c9945492SAndroid Build Coastguard Worker }
24