mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 06:55:13 +08:00
48 lines
669 B
C
48 lines
669 B
C
|
#include <linux/types.h>
|
||
|
|
||
|
void * memset(void * s, int c, size_t count)
|
||
|
{
|
||
|
void *xs = s;
|
||
|
size_t temp;
|
||
|
|
||
|
if (!count)
|
||
|
return xs;
|
||
|
c &= 0xff;
|
||
|
c |= c << 8;
|
||
|
c |= c << 16;
|
||
|
if ((long) s & 1)
|
||
|
{
|
||
|
char *cs = s;
|
||
|
*cs++ = c;
|
||
|
s = cs;
|
||
|
count--;
|
||
|
}
|
||
|
if (count > 2 && (long) s & 2)
|
||
|
{
|
||
|
short *ss = s;
|
||
|
*ss++ = c;
|
||
|
s = ss;
|
||
|
count -= 2;
|
||
|
}
|
||
|
temp = count >> 2;
|
||
|
if (temp)
|
||
|
{
|
||
|
long *ls = s;
|
||
|
for (; temp; temp--)
|
||
|
*ls++ = c;
|
||
|
s = ls;
|
||
|
}
|
||
|
if (count & 2)
|
||
|
{
|
||
|
short *ss = s;
|
||
|
*ss++ = c;
|
||
|
s = ss;
|
||
|
}
|
||
|
if (count & 1)
|
||
|
{
|
||
|
char *cs = s;
|
||
|
*cs = c;
|
||
|
}
|
||
|
return xs;
|
||
|
}
|