|
|
researchv9-SUN3(old)
/* $Header: /var/lib/cvsd/repos/research/researchv9/X11/src/X.V11R1/server/os/sysV/util.c,v 1.1.1.1 2018/04/24 17:22:00 root Exp $ */
/*
* These are routines fould in BDS and not found in System V. They are
* included so that some clients can compile.
*/
/* Written by Jack Palevich.
* HP Labs
* April 1987
*/
bcopy (b1, b2, length)
register unsigned char *b1, *b2;
register length;
{
if (b1 < b2) {
b2 += length;
b1 += length;
while (length--) {
*--b2 = *--b1;
}
}
else {
while (length--) {
*b2++ = *b1++;
}
}
}
bcmp (b1, b2, length)
register unsigned char *b1, *b2;
register length;
{
while (length--) {
if (*b1++ != *b2++) return 1;
}
return 0;
}
bzero (b, length)
register unsigned char *b;
register length;
{
while (length--) {
*b++ = '\0';
}
}
/* Find the first set bit
* i.e. least signifigant 1 bit:
* 0 => 0
* 1 => 1
* 2 => 2
* 3 => 1
* 4 => 3
*/
int
ffs(mask)
unsigned int mask;
{
register i;
if ( ! mask ) return 0;
i = 1;
while (! (mask & 1)) {
i++;
mask = mask >> 1;
}
return i;
}
char *
index (s, c)
char *s, c;
{
return ((char *) strchr (s, c));
}
char *
rindex (s, c)
char *s, c;
{
return ((char *) strrchr (s, c));
}
/*
* insque, remque - insert/remove element from a queue
*
* DESCRIPTION
* Insque and remque manipulate queues built from doubly linked
* lists. Each element in the queue must in the form of
* ``struct qelem''. Insque inserts elem in a queue immedi-
* ately after pred; remque removes an entry elem from a queue.
*
* SEE ALSO
* ``VAX Architecture Handbook'', pp. 228-235.
*/
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char *q_data;
};
insque(elem, pred)
register struct qelem *elem, *pred;
{
register struct qelem *q;
/* Insert locking code here */
if ( elem->q_forw = q = (pred ? pred->q_forw : pred) )
q->q_back = elem;
if ( elem->q_back = pred )
pred->q_forw = elem;
/* Insert unlocking code here */
}
remque(elem)
register struct qelem *elem;
{
register struct qelem *q;
if ( ! elem ) return;
/* Insert locking code here */
if ( q = elem->q_back ) q->q_forw = elem->q_forw;
if ( q = elem->q_forw ) q->q_back = elem->q_back;
/* insert unlocking code here */
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.