xref: /plan9/sys/src/ape/lib/ap/gen/strcspn.c (revision 781103c4074deb8af160e8a0da2742ba6b29dc2b)
13e12c5d1SDavid du Colombier #include <string.h>
23e12c5d1SDavid du Colombier 
33e12c5d1SDavid du Colombier #define	N	256
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier size_t
strcspn(const char * s,const char * b)63e12c5d1SDavid du Colombier strcspn(const char *s, const char *b)
73e12c5d1SDavid du Colombier {
83e12c5d1SDavid du Colombier 	char map[N], *os;
93e12c5d1SDavid du Colombier 
103e12c5d1SDavid du Colombier 	memset(map, 0, N);
113e12c5d1SDavid du Colombier 	for(;;) {
123e12c5d1SDavid du Colombier 		map[*(unsigned char*)b] = 1;
133e12c5d1SDavid du Colombier 		if(*b++ == 0)
143e12c5d1SDavid du Colombier 			break;
153e12c5d1SDavid du Colombier 	}
16*781103c4SDavid du Colombier 	os = (char *)s;
173e12c5d1SDavid du Colombier 	while(map[*(unsigned char*)s++] == 0)
183e12c5d1SDavid du Colombier 		;
193e12c5d1SDavid du Colombier 	return s - os - 1;
203e12c5d1SDavid du Colombier }
21