|
|
1.1 ! root 1: /* ! 2: * Copyright (c) 1988 Regents of the University of California. ! 3: * All rights reserved. ! 4: * ! 5: * Redistribution and use in source and binary forms are permitted ! 6: * provided that this notice is preserved and that due credit is given ! 7: * to the University of California at Berkeley. The name of the University ! 8: * may not be used to endorse or promote products derived from this ! 9: * software without specific prior written permission. This software ! 10: * is provided ``as is'' without express or implied warranty. ! 11: */ ! 12: ! 13: #ifndef lint ! 14: static char sccsid[] = "@(#)genbsubs.c 3.2 (Berkeley) 3/28/88"; ! 15: #endif /* not lint */ ! 16: ! 17: /* The output of bunequal is the offset of the byte which didn't match; ! 18: * if all the bytes match, then we return n. ! 19: * bunequal(s1, s2, n) */ ! 20: ! 21: int ! 22: bunequal(s1, s2, n) ! 23: register char *s1, *s2; ! 24: register n; ! 25: { ! 26: register int i = 0; ! 27: ! 28: while (i++ < n) { ! 29: if (*s1++ != *s2++) { ! 30: break; ! 31: } ! 32: } ! 33: return(i-1); ! 34: } ! 35: ! 36: /* bskip(s1, n, b) : finds the first occurrence of any byte != 'b' in the 'n' ! 37: * bytes beginning at 's1'. ! 38: */ ! 39: ! 40: int ! 41: bskip(s1, n, b) ! 42: register char *s1; ! 43: register int n; ! 44: register int b; ! 45: { ! 46: register int i = 0; ! 47: ! 48: while (i++ < n) { ! 49: if (*s1++ != b) { ! 50: break; ! 51: } ! 52: } ! 53: return(i-1); ! 54: } ! 55: ! 56: /* ! 57: * memNSchr(const void *s, int c, size_t n, int and) ! 58: * ! 59: * Like memchr, but the comparison is '((*s)&and) == c', ! 60: * and we increment our way through s by "stride" ('s += stride'). ! 61: * ! 62: * We optimize for the most used strides of +1 and -1. ! 63: */ ! 64: ! 65: unsigned char * ! 66: memNSchr(s, c, n, and, stride) ! 67: char *s; ! 68: int c; ! 69: unsigned int n; ! 70: int and; ! 71: int stride; ! 72: { ! 73: register unsigned char _c, *_s, _and; ! 74: ! 75: _and = and; ! 76: _c = (c&_and); ! 77: _s = (unsigned char *)s; ! 78: switch (stride) { ! 79: case 1: ! 80: while (n--) { ! 81: if (((*_s)&_and) == _c) { ! 82: return _s; ! 83: } ! 84: _s++; ! 85: } ! 86: break; ! 87: case -1: ! 88: while (n--) { ! 89: if (((*_s)&_and) == _c) { ! 90: return _s; ! 91: } ! 92: _s--; ! 93: } ! 94: break; ! 95: default: ! 96: while (n--) { ! 97: if (((*_s)&_and) == _c) { ! 98: return _s; ! 99: } ! 100: _s += stride; ! 101: } ! 102: } ! 103: return 0; ! 104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.