From 13c751687d01dc59bfd3e0913cecadf17f025caa Mon Sep 17 00:00:00 2001 From: Andrew Waterman Date: Wed, 1 Jun 2011 00:21:04 -0700 Subject: [PATCH] [pk] fixed memset bug (again...) --- pk/memset.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/pk/memset.c b/pk/memset.c index 63815d7..d634138 100644 --- a/pk/memset.c +++ b/pk/memset.c @@ -11,6 +11,13 @@ void* memset(void* m, int ch, size_t s) char* mem = (char*)m; long* lmem; + if(s < sizeof(long)) + { + for(i = 0; i < s; i++) + mem[i] = ch; + return m; + } + long l = ch & 0xFF; l = l | (l << 8); l = l | (l << 16); @@ -22,7 +29,7 @@ void* memset(void* m, int ch, size_t s) *mem++ = ch, s--; lmem = (long*)mem; - for(i = 0; i < s/sizeof(long) - 7; i += 8) + for(i = 0; i+7 < s/sizeof(long); i += 8) { lmem[i+0] = l; lmem[i+1] = l; @@ -33,11 +40,16 @@ void* memset(void* m, int ch, size_t s) lmem[i+6] = l; lmem[i+7] = l; } + lmem += i; + s -= i*sizeof(long); - for( ; i < s/sizeof(long); i++) + for(i = 0; i < s/sizeof(long); i++) lmem[i] = l; + lmem += i; + s -= i*sizeof(long); - for(i *= sizeof(long); i < s; i++) + mem = (char*)lmem; + for(i = 0; i < s; i++) mem[i] = ch; return m;