kern

diff src/klibc/string.c @ 1:ebe5e0e44a9d

pretty much finished the code for article 1, might do minor adjustments though
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 02 Dec 2010 08:45:41 +0200
parents 662ff2170531
children 86781ef20689
line diff
     1.1 --- a/src/klibc/string.c	Wed Dec 01 22:02:42 2010 +0200
     1.2 +++ b/src/klibc/string.c	Thu Dec 02 08:45:41 2010 +0200
     1.3 @@ -1,11 +1,45 @@
     1.4  #include <string.h>
     1.5  
     1.6 -void memset(void *s, int c, size_t sz)
     1.7 +void memset(void *s, int c, size_t n)
     1.8  {
     1.9 -	int i;
    1.10  	char *ptr = s;
    1.11 -
    1.12 -	for(i=0; i<sz; i++) {
    1.13 +	while(n--) {
    1.14  		*ptr++ = c;
    1.15  	}
    1.16  }
    1.17 +
    1.18 +void *memcpy(void *dest, const void *src, size_t n)
    1.19 +{
    1.20 +	char *dptr = dest;
    1.21 +	const char *sptr = src;
    1.22 +
    1.23 +	while(n--) {
    1.24 +		*dptr++ = *sptr++;
    1.25 +	}
    1.26 +	return dest;
    1.27 +}
    1.28 +
    1.29 +void *memmove(void *dest, const void *src, size_t n)
    1.30 +{
    1.31 +	int i;
    1.32 +	char *dptr;
    1.33 +	const char *sptr;
    1.34 +
    1.35 +	if(dest <= src) {
    1.36 +		/* forward copy */
    1.37 +		dptr = dest;
    1.38 +		sptr = src;
    1.39 +		for(i=0; i<n; i++) {
    1.40 +			*dptr++ = *sptr++;
    1.41 +		}
    1.42 +	} else {
    1.43 +		/* backwards copy */
    1.44 +		dptr = dest + n - 1;
    1.45 +		sptr = src + n - 1;
    1.46 +		for(i=0; i<n; i++) {
    1.47 +			*dptr-- = *sptr--;
    1.48 +		}
    1.49 +	}
    1.50 +
    1.51 +	return dest;
    1.52 +}