Annotation of researchv9/X11/src/X.V11R1/server/os/sysV/util.c, revision 1.1.1.1

1.1       root        1: /* $Header: util.c,v 1.1 87/09/11 07:50:56 toddb Exp $ */
                      2: /*
                      3:  * These are routines fould in BDS and not found in System V.  They are
                      4:  * included so that some clients can compile.
                      5:  */
                      6: 
                      7: /* Written by Jack Palevich.  
                      8:  *            HP Labs
                      9:  *            April 1987
                     10:  */
                     11: 
                     12: bcopy (b1, b2, length)
                     13: register unsigned char *b1, *b2;
                     14: register length;
                     15: {
                     16:     if (b1 < b2) {
                     17:        b2 += length;
                     18:        b1 += length;
                     19:        while (length--) {
                     20:            *--b2 = *--b1;
                     21:        }
                     22:     }
                     23:     else {
                     24:        while (length--) {
                     25:            *b2++ = *b1++;
                     26:        }
                     27:     }
                     28: }
                     29: 
                     30: bcmp (b1, b2, length)
                     31: register unsigned char *b1, *b2;
                     32: register length;
                     33: {
                     34:     while (length--) {
                     35:        if (*b1++ != *b2++) return 1;
                     36:     }
                     37:     return 0;
                     38: }
                     39: 
                     40: bzero (b, length)
                     41: register unsigned char *b;
                     42: register length;
                     43: {
                     44:     while (length--) {
                     45:        *b++ = '\0';
                     46:     }
                     47: }
                     48: 
                     49: 
                     50: /* Find the first set bit
                     51:  * i.e. least signifigant 1 bit:
                     52:  * 0 => 0
                     53:  * 1 => 1
                     54:  * 2 => 2
                     55:  * 3 => 1
                     56:  * 4 => 3
                     57:  */
                     58: 
                     59: int
                     60: ffs(mask)
                     61: unsigned int   mask;
                     62: {
                     63:     register i;
                     64: 
                     65:     if ( ! mask ) return 0;
                     66:     i = 1;
                     67:     while (! (mask & 1)) {
                     68:        i++;
                     69:        mask = mask >> 1;
                     70:     }
                     71:     return i;
                     72: }
                     73: 
                     74: char * 
                     75: index (s, c)
                     76: char *s, c;
                     77: {
                     78:     return ((char *) strchr (s, c));
                     79: }
                     80: 
                     81: char * 
                     82: rindex (s, c)
                     83: char *s, c;
                     84: {
                     85:     return ((char *) strrchr (s, c));
                     86: }
                     87: 
                     88: /*
                     89:  * insque, remque - insert/remove element from a queue
                     90:  *
                     91:  * DESCRIPTION
                     92:  *      Insque and remque manipulate queues built from doubly linked
                     93:  *      lists.  Each element in the queue must in the form of
                     94:  *      ``struct qelem''.  Insque inserts elem in a queue immedi-
                     95:  *      ately after pred; remque removes an entry elem from a queue.
                     96:  *
                     97:  * SEE ALSO
                     98:  *      ``VAX Architecture Handbook'', pp. 228-235.
                     99:  */
                    100: 
                    101: struct qelem {
                    102:     struct    qelem *q_forw;
                    103:     struct    qelem *q_back;
                    104:     char *q_data;
                    105:     };
                    106: 
                    107: insque(elem, pred)
                    108: register struct qelem *elem, *pred;
                    109: {
                    110:     register struct qelem *q;
                    111:     /* Insert locking code here */
                    112:     if ( elem->q_forw = q = (pred ? pred->q_forw : pred) )
                    113:        q->q_back = elem;
                    114:     if ( elem->q_back = pred )
                    115:        pred->q_forw = elem;
                    116:     /* Insert unlocking code here */
                    117: }
                    118: 
                    119: remque(elem)
                    120: register struct qelem *elem;
                    121: {
                    122:     register struct qelem *q;
                    123:     if ( ! elem ) return;
                    124:     /* Insert locking code here */
                    125: 
                    126:     if ( q = elem->q_back ) q->q_forw = elem->q_forw;
                    127:     if ( q = elem->q_forw ) q->q_back = elem->q_back;
                    128: 
                    129:     /* insert unlocking code here */
                    130: }

unix.superglobalmegacorp.com

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