diff options
author | Andreas Baumann <abaumann@yahoo.com> | 2009-03-24 11:51:12 +0100 |
---|---|---|
committer | Andreas Baumann <abaumann@yahoo.com> | 2009-03-24 11:51:12 +0100 |
commit | 8e3274f153f89ecf1611fa8468d2d7dbe596a23f (patch) | |
tree | d53ed483e4714599826dab45a82574b9a5be2a11 /src/port | |
parent | 2f0a989a9ebd8d93fdcaf9a8530fea94877f607f (diff) | |
download | wolfbones-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.c | 43 |
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 */ |