diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-10 21:26:24 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-06-10 21:26:24 +0200 |
commit | d6d1bdfefafff50b7b6d15d218c0a188570be541 (patch) | |
tree | 15ee8de727d0be5d126efda146b2879de0a72773 /src/libc/string.c | |
parent | eea5bf4b859eb56c5772c58ca54937a90a10e7ee (diff) | |
download | abaos-d6d1bdfefafff50b7b6d15d218c0a188570be541.tar.gz abaos-d6d1bdfefafff50b7b6d15d218c0a188570be541.tar.bz2 |
some big renames into subdirs of aspects
updated README
removed size_t in sys/types.h and sys/types.h itself, size_t is in stddef.h
Diffstat (limited to 'src/libc/string.c')
-rw-r--r-- | src/libc/string.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/libc/string.c b/src/libc/string.c new file mode 100644 index 0000000..8d4f876 --- /dev/null +++ b/src/libc/string.c @@ -0,0 +1,75 @@ +#include "string.h" + +void *memset( void *s, int c, size_t n ) +{ + for( size_t i = 0; i < n; i++ ) { + ((char *)s)[i] = c; + } + + return s; +} + +void *memmove( void *d, const void *s, size_t n ) +{ + const char *ss = (const char *)s; + char *dd = (char *)d; + + if( dd == ss ) return d; + + if( dd <= ss ) { + while( n > 0 ) { + *dd++ = *ss++; + n--; + } + } else { + dd += n; + ss += n; + while( n > 0 ) { + *--dd = *--ss; + n--; + } + } + + return d; +} + +size_t strlen( const char *s ) +{ + size_t len; + const char *p = s; + + for( len = 0; *p; len++, p++ ); + + return len; +} + +int strcmp( const char *s1, const char *s2 ) +{ + while( *s1 && *s2 && *s1 == *s2 ) { + s1++; + s2++; + } + + return *s1 - *s2; +} + +size_t strlcpy( char *d, const char *s, size_t n ) +{ + size_t len = 0; + + while( len < n && s[len] != '\0' ) { + d[len] = s[len]; + len++; + } + d[len] = '\0'; + + while( s[len] != '\0' ) { + len++; + } + + if( len >= n ) { + d[n-1] = '\0'; + } + + return len; +} |