mirror of https://gitee.com/openkylin/linux.git
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;
|
|
}
|