diff options
Diffstat (limited to 'xc/lib/Xbsd/Berklib.c')
-rw-r--r-- | xc/lib/Xbsd/Berklib.c | 168 |
1 files changed, 121 insertions, 47 deletions
diff --git a/xc/lib/Xbsd/Berklib.c b/xc/lib/Xbsd/Berklib.c index 217d0532d..44829a55d 100644 --- a/xc/lib/Xbsd/Berklib.c +++ b/xc/lib/Xbsd/Berklib.c @@ -1,4 +1,4 @@ -/* $XConsortium: Berklib.c,v 1.8 91/01/10 20:21:56 rws Exp $ */ +/* $XConsortium: Berklib.c,v 1.9 91/01/11 09:16:20 rws Exp $ */ /* * These are routines found in BSD but not on all other systems. The core @@ -20,13 +20,71 @@ #define WANT_RANDOM #endif +#ifdef SVR4 +#define WANT_BFUNCS +#define WANT_FFS +#define WANT_RANDOM +#endif +/* you should use Xfuncs.h in code instead of relying on Berklib */ #ifdef WANT_BFUNCS -/* you should use Xfuncs.h instead of this in most cases */ -bcopy (b1, b2, length) +#if __STDC__ && !defined(NOSTDHDRS) + +#include <string.h> + +void bcopy (b1, b2, length) + register char *b1, *b2; + register int length; +{ + memmove((void *)b2, (void *)b1, (size_t)length); +} + +int bcmp (b1, b2, length) + register char *b1, *b2; + register int length; +{ + return memcmp((void *)b1, (void *)b2, (size_t)length); +} + +void bzero (b, length) + register char *b; + register int length; +{ + memset((void *)b, 0, (size_t)length); +} + +#else +#if defined(SVR4) || defined(hpux) + +#include <string.h> + +void bcopy (b1, b2, length) + register char *b1, *b2; + register int length; +{ + memmove(b2, b1, length); +} + +int bcmp (b1, b2, length) + register char *b1, *b2; + register int length; +{ + return memcmp(b1, b2, length); +} + +bzero (b, length) + register char *b; + register int length; +{ + memset(b, 0, length); +} + +#else + +void bcopy (b1, b2, length) register char *b1, *b2; - register length; + register int length; { if (b1 < b2) { b2 += length; @@ -39,38 +97,49 @@ bcopy (b1, b2, length) } } -/* you should use Xfuncs.h instead of this in most cases */ -bcmp (b1, b2, length) +#if defined(SYSV) + +#include <memory.h> + +int bcmp (b1, b2, length) + register char *b1, *b2; + register int length; +{ + return memcmp(b1, b2, length); +} + +bzero (b, length) + register char *b; + register int length; +{ + memset(b, 0, length); +} + +#else + +int bcmp (b1, b2, length) register char *b1, *b2; - register length; + register int length; { while (length--) { if (*b1++ != *b2++) return 1; } return 0; } -#endif -/* you should use Xfuncs.h instead of this in most cases */ -bzero (b, length) +void bzero (b, length) register char *b; - register length; + register int length; { while (length--) *b++ = '\0'; } +#endif +#endif +#endif #endif /* WANT_BFUNCS */ -/* Find the first set bit - * i.e. least signifigant 1 bit: - * 0 => 0 - * 1 => 1 - * 2 => 2 - * 3 => 1 - * 4 => 3 - */ - #ifdef WANT_FFS int ffs(mask) @@ -88,6 +157,38 @@ unsigned int mask; } #endif +#ifdef WANT_RANDOM +#if defined(SYSV) || defined(SVR4) + +long lrand48(); + +long random() +{ + return (lrand48()); +} + +void srandom(seed) + int seed; +{ + srand48(seed); +} + +#else + +long random() +{ + return (rand()); +} + +void srandom(seed) + int seed; +{ + srand(seed); +} + +#endif +#endif /* WANT_RANDOM */ + /* * insque, remque - insert/remove element from a queue * @@ -135,33 +236,6 @@ register struct qelem *elem; #endif /* WANT_QUE */ /* - * Berkeley random() - * - * We simulate via System V's rand() - */ - -#ifdef WANT_RANDOM -int -random() -{ - return (rand()); -} - -/* - * Berkeley srandom() - * - * We simulate via System V's rand() - */ - -int -srandom(seed) -int seed; -{ - return (srand(seed)); -} -#endif /* WANT_RANDOM */ - -/* * gettimeofday emulation * Caution -- emulation is incomplete * - has only second, not microsecond, resolution. |