Annotation of 43BSDTahoe/ucb/tn3270/general/genbsubs.c, revision 1.1.1.1

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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.