summaryrefslogtreecommitdiff
path: root/src/port
diff options
context:
space:
mode:
authorAndreas Baumann <abaumann@yahoo.com>2009-03-24 11:51:12 +0100
committerAndreas Baumann <abaumann@yahoo.com>2009-03-24 11:51:12 +0100
commit8e3274f153f89ecf1611fa8468d2d7dbe596a23f (patch)
treed53ed483e4714599826dab45a82574b9a5be2a11 /src/port
parent2f0a989a9ebd8d93fdcaf9a8530fea94877f607f (diff)
downloadwolfbones-8e3274f153f89ecf1611fa8468d2d7dbe596a23f.tar.gz
wolfbones-8e3274f153f89ecf1611fa8468d2d7dbe596a23f.tar.bz2
added strlcpy and strlcat (safe BSD C functions)
Diffstat (limited to 'src/port')
-rw-r--r--src/port/string.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/src/port/string.c b/src/port/string.c
index 78c3685..942e688 100644
--- a/src/port/string.c
+++ b/src/port/string.c
@@ -118,3 +118,46 @@ int wolf_port_strncasecmp( const char *s1, const char *s2, size_t n ) {
}
#endif /* !defined HAVE_STRNCASECMP || defined TEST_STRNCASECMP */
+
+#if !defined HAVE_STRLCPY || defined TEST_STRLCPY
+size_t wolf_port_strlcpy( char *d, const char *s, size_t bufsize ) {
+ size_t len;
+ size_t ret;
+
+ if( !d || !s || bufsize <= 0 ) return 0;
+
+ len = strlen( s );
+ ret = len;
+ if( len >= bufsize ) {
+ len = bufsize-1;
+ }
+
+ memcpy( d, s, len );
+ d[len] = 0;
+
+ return ret;
+}
+#endif /* !defined HAVE_STRLCPY || defined TEST_STRLCPY */
+
+#if !defined HAVE_STRLCAT || defined TEST_STRLCAT
+size_t wolf_port_strlcat( char *d, const char *s, size_t bufsize ) {
+ size_t len1;
+ size_t len2;
+ size_t ret;
+
+ if( !d || !s || bufsize <= 0 ) return 0;
+
+ len1 = strlen( d );
+ len2 = strlen( s );
+ ret = len1+len2;
+ if( len1+len2 >= bufsize ) {
+ len2 = bufsize - (len1+1);
+ }
+ if( len2 >= 0 ) {
+ memcpy( d+len1, s, len2 );
+ d[len1+len2] = 0;
+ }
+
+ return ret;
+}
+#endif /* !defined HAVE_STRLCAT || defined TEST_STRLCAT */