Advertisement
xerpi

memset

Sep 28th, 2013
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 0.72 KB | None | 0 0
  1. void * memset1(void *ptr, int c, size_t size)
  2. {
  3.     byte *p = ptr;
  4.     int c32 = c | (c<<8) | (c<<16) | (c<<24);
  5.     byte *cp = (byte *)&c32;
  6.     while(size) {
  7.         if(size >= 4) {
  8.             *((u32*)p) = *((u32*)cp);
  9.             size -= 4; p += 4;
  10.         } else if(size >= 2) {
  11.             *((u16*)p) = *((u16*)cp);
  12.             size -= 2; p += 2;
  13.         } else {
  14.             *p++ = *cp;
  15.             --size;
  16.         }
  17.     }
  18.     return ptr;
  19. }
  20.  
  21. void * memset1(void *ptr, int c, size_t size)
  22. {
  23.     byte *p = ptr;
  24.     byte c8 = (byte)c;
  25.     u16 c16 = c8  | (c8<<8);
  26.     u32 c32 = c16 | (c16<<16);
  27.     while(size) {
  28.         if(size >= 4) {
  29.             *((u32*)p) = c32;
  30.             size -= 4; p += 4;
  31.         } else if(size >= 2) {
  32.             *((u16*)p) = c16;
  33.             size -= 2; p += 2;
  34.         } else {
  35.             *p++ = c8;
  36.             --size;
  37.         }
  38.     }
  39.     return ptr;
  40. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement