148760Sbostic /*-
2*62364Sbostic * Copyright (c) 1988, 1993
3*62364Sbostic * The Regents of the University of California. All rights reserved.
430014Sminshall *
548760Sbostic * %sccs.include.redist.c%
630014Sminshall */
730014Sminshall
833815Sbostic #ifndef lint
9*62364Sbostic static char sccsid[] = "@(#)genbsubs.c 8.1 (Berkeley) 06/06/93";
1033815Sbostic #endif /* not lint */
1130014Sminshall
1230014Sminshall /* The output of bunequal is the offset of the byte which didn't match;
1330014Sminshall * if all the bytes match, then we return n.
1430014Sminshall * bunequal(s1, s2, n) */
1530014Sminshall
1630014Sminshall int
bunequal(s1,s2,n)1730014Sminshall bunequal(s1, s2, n)
1830014Sminshall register char *s1, *s2;
1930014Sminshall register n;
2030014Sminshall {
2130014Sminshall register int i = 0;
2230014Sminshall
2330014Sminshall while (i++ < n) {
2430014Sminshall if (*s1++ != *s2++) {
2530014Sminshall break;
2630014Sminshall }
2730014Sminshall }
2830014Sminshall return(i-1);
2930014Sminshall }
3030014Sminshall
3130014Sminshall /* bskip(s1, n, b) : finds the first occurrence of any byte != 'b' in the 'n'
3230014Sminshall * bytes beginning at 's1'.
3330014Sminshall */
3430014Sminshall
3530014Sminshall int
bskip(s1,n,b)3630014Sminshall bskip(s1, n, b)
3730014Sminshall register char *s1;
3830014Sminshall register int n;
3930014Sminshall register int b;
4030014Sminshall {
4130014Sminshall register int i = 0;
4230014Sminshall
4330014Sminshall while (i++ < n) {
4430014Sminshall if (*s1++ != b) {
4530014Sminshall break;
4630014Sminshall }
4730014Sminshall }
4830014Sminshall return(i-1);
4930014Sminshall }
5031067Sminshall
5131067Sminshall /*
5231070Sminshall * memNSchr(const void *s, int c, size_t n, int and)
5331067Sminshall *
5431067Sminshall * Like memchr, but the comparison is '((*s)&and) == c',
5531067Sminshall * and we increment our way through s by "stride" ('s += stride').
5631067Sminshall *
5731067Sminshall * We optimize for the most used strides of +1 and -1.
5831067Sminshall */
5931067Sminshall
6031067Sminshall unsigned char *
memNSchr(s,c,n,and,stride)6131067Sminshall memNSchr(s, c, n, and, stride)
6231067Sminshall char *s;
6331067Sminshall int c;
6431067Sminshall unsigned int n;
6531067Sminshall int and;
6631067Sminshall int stride;
6731067Sminshall {
6831067Sminshall register unsigned char _c, *_s, _and;
6931067Sminshall
7031067Sminshall _and = and;
7131067Sminshall _c = (c&_and);
7231067Sminshall _s = (unsigned char *)s;
7331067Sminshall switch (stride) {
7431067Sminshall case 1:
7531067Sminshall while (n--) {
7631067Sminshall if (((*_s)&_and) == _c) {
7731067Sminshall return _s;
7831067Sminshall }
7931067Sminshall _s++;
8031067Sminshall }
8131067Sminshall break;
8231067Sminshall case -1:
8331067Sminshall while (n--) {
8431067Sminshall if (((*_s)&_and) == _c) {
8531067Sminshall return _s;
8631067Sminshall }
8731067Sminshall _s--;
8831067Sminshall }
8931067Sminshall break;
9031067Sminshall default:
9131067Sminshall while (n--) {
9231067Sminshall if (((*_s)&_and) == _c) {
9331067Sminshall return _s;
9431067Sminshall }
9531067Sminshall _s += stride;
9631067Sminshall }
9731067Sminshall }
9831067Sminshall return 0;
9931067Sminshall }
100