diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-01 14:32:21 +0200 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2017-07-01 14:32:21 +0200 |
commit | af70f178d8fe801d05fe83d00a09509834f4f65c (patch) | |
tree | d44c5fc05a544b10592db9701bfe32baf8181bbe /src/libc | |
parent | 554c9da1d6116eee356b45b579e5086ef66f21eb (diff) | |
download | abaos-af70f178d8fe801d05fe83d00a09509834f4f65c.tar.gz abaos-af70f178d8fe801d05fe83d00a09509834f4f65c.tar.bz2 |
added a strlcat
Diffstat (limited to 'src/libc')
-rw-r--r-- | src/libc/string.c | 24 | ||||
-rw-r--r-- | src/libc/string.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/src/libc/string.c b/src/libc/string.c index 904f33c..2dd351d 100644 --- a/src/libc/string.c +++ b/src/libc/string.c @@ -88,3 +88,27 @@ size_t strlcpy( char *d, const char *s, size_t n ) return len; } + +size_t strlcat( char *d, const char *s, size_t n ) +{ + size_t len = 0; + const char *ss = s; + char *dd = d; + + while( len < n && *dd != '\0' ) { + len++; + dd++; + } + + if( len == n ) { + return len + strlen( s ); + } + + while( len + 1 < n && ( *dd++ = *ss++ ) ) { + len++; + } + + *dd = '\0'; + + return len; +} diff --git a/src/libc/string.h b/src/libc/string.h index fc29ae9..6c0fa01 100644 --- a/src/libc/string.h +++ b/src/libc/string.h @@ -10,5 +10,6 @@ void *memcpy( void *d, const void *s, size_t n ); size_t strlen( const char *s ); int strcmp( const char *s1, const char *s2 ); size_t strlcpy( char *d, const char *s, size_t n ); +size_t strlcat( char *d, const char *s, size_t n ); #endif // STRING_H |