memset.c 669 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. #include <linux/types.h>
  2. void * memset(void * s, int c, size_t count)
  3. {
  4. void *xs = s;
  5. size_t temp;
  6. if (!count)
  7. return xs;
  8. c &= 0xff;
  9. c |= c << 8;
  10. c |= c << 16;
  11. if ((long) s & 1)
  12. {
  13. char *cs = s;
  14. *cs++ = c;
  15. s = cs;
  16. count--;
  17. }
  18. if (count > 2 && (long) s & 2)
  19. {
  20. short *ss = s;
  21. *ss++ = c;
  22. s = ss;
  23. count -= 2;
  24. }
  25. temp = count >> 2;
  26. if (temp)
  27. {
  28. long *ls = s;
  29. for (; temp; temp--)
  30. *ls++ = c;
  31. s = ls;
  32. }
  33. if (count & 2)
  34. {
  35. short *ss = s;
  36. *ss++ = c;
  37. s = ss;
  38. }
  39. if (count & 1)
  40. {
  41. char *cs = s;
  42. *cs = c;
  43. }
  44. return xs;
  45. }