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;
 | 
						|
}
 |