summaryrefslogtreecommitdiff
path: root/src/libc
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2017-07-01 14:32:21 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2017-07-01 14:32:21 +0200
commitaf70f178d8fe801d05fe83d00a09509834f4f65c (patch)
treed44c5fc05a544b10592db9701bfe32baf8181bbe /src/libc
parent554c9da1d6116eee356b45b579e5086ef66f21eb (diff)
downloadabaos-af70f178d8fe801d05fe83d00a09509834f4f65c.tar.gz
abaos-af70f178d8fe801d05fe83d00a09509834f4f65c.tar.bz2
added a strlcat
Diffstat (limited to 'src/libc')
-rw-r--r--src/libc/string.c24
-rw-r--r--src/libc/string.h1
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