1*48760Sbostic /*- 2*48760Sbostic * Copyright (c) 1988 The Regents of the University of California. 333815Sbostic * All rights reserved. 430014Sminshall * 5*48760Sbostic * %sccs.include.redist.c% 630014Sminshall */ 730014Sminshall 833815Sbostic #ifndef lint 9*48760Sbostic static char sccsid[] = "@(#)genbsubs.c 4.2 (Berkeley) 04/26/91"; 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 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 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 * 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