From 5ed58ad13eabfd6ed1c09ad29af4570dd3d0744e Mon Sep 17 00:00:00 2001 From: jshepher <> Date: Sat, 4 Dec 2004 00:50:37 +0000 Subject: [PATCH] Rewrote function to get rid of GCC 3.x warnings. --- libnix/sources/nix/string/memset.c | 40 ++++++++++++++---------------- 1 file changed, 18 insertions(+), 22 deletions(-) diff --git a/libnix/sources/nix/string/memset.c b/libnix/sources/nix/string/memset.c index 1c9934c..5d701d0 100755 --- a/libnix/sources/nix/string/memset.c +++ b/libnix/sources/nix/string/memset.c @@ -1,27 +1,23 @@ #include void *memset(void *s,int c,size_t n) -{ size_t m; - if(n) - { unsigned long *p=(unsigned long *)s; - if(n>15) - { c*=0x01010101; - if((long)p&1) - { *((char *)p)++=c; - n--; } - if((long)p&2) - { *((short *)p)++=c; - n-=2; } - for(m=n/(8*sizeof(long));m;--m) - { *p++=c; *p++=c; *p++=c; *p++=c; - *p++=c; *p++=c; *p++=c; *p++=c; } - n&=(8*sizeof(long)-1); - for(m=n/sizeof(long);m;--m) - *p++=c; - if((n&=sizeof(long)-1)==0) goto leave; +{ + unsigned long *p = (unsigned long *)s; + unsigned char chr = (unsigned char)c; + unsigned long lc = (chr << 24) | (chr << 16) | (chr << 8) | chr; + unsigned char *ch; + size_t i; + size_t num = n / 4; + size_t remain = n % 4; + + /* Do LONG operations most of the time to optimize memory bandwidth */ + for (i = 0; i < num; i++) { + *p++ = lc; } - do;while(*((char *)p)++=c,--n); - } -leave: - return s; + + ch = (unsigned char *)p; + for (i = 0; i < remain; i++) { + *ch++ = chr; + } + return s; }