mirror of
https://github.com/cahirwpz/libnix.git
synced 2026-09-12 03:30:43 +00:00
45 lines
661 B
C
Executable File
45 lines
661 B
C
Executable File
#include <string.h>
|
|
typedef union {
|
|
void *v;
|
|
char *c;
|
|
short *s;
|
|
long *l;
|
|
} val;
|
|
|
|
void bzero(void *b,size_t n)
|
|
{
|
|
val v;
|
|
size_t m;
|
|
v.v = b;
|
|
|
|
if(!n)
|
|
return;
|
|
if(n > 15) {
|
|
if((long)v.l & 1) {
|
|
*v.c++ = 0;
|
|
n--;
|
|
}
|
|
if((long)v.l & 2) {
|
|
*v.s++ = 0;
|
|
n-= 2;
|
|
}
|
|
for(m = n / (8 * sizeof(long)); m; --m) {
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
*v.l++ = 0;
|
|
}
|
|
n &= 8 * sizeof(long) - 1;
|
|
for(m = n / sizeof(long); m; --m)
|
|
*v.l++ = 0;
|
|
if((n &= sizeof(long) - 1)==0)
|
|
return;
|
|
}
|
|
do;
|
|
while(*v.c++ = 0, --n);
|
|
}
|