From: Alan Cox Date: Fri, 2 Jan 2015 22:33:59 +0000 (+0000) Subject: strlcpy/strlcat: Add these newer BSD string functions X-Git-Url: https://git.ndcode.org/public/gitweb.cgi?a=commitdiff_plain;h=0c8de4c86ce7f59c6dda43ffec111d90f8e2e444;p=FUZIX.git strlcpy/strlcat: Add these newer BSD string functions --- diff --git a/Library/include/string.h b/Library/include/string.h index ed3bd187..8d60d3ce 100644 --- a/Library/include/string.h +++ b/Library/include/string.h @@ -49,6 +49,8 @@ extern char *strtok __P ((char *, const char *)); extern size_t strcspn __P ((const char *, const char *)); extern size_t strspn __P ((const char *, const char *)); +extern size_t strlcpy __P((char *, const char *, size_t)); +extern size_t strlcat __P((char *, const char *, size_t)); #ifdef z80 #pagma inline(memcpy) #pagma inline(memset) diff --git a/Library/libs/Makefile b/Library/libs/Makefile index 6a6e439a..9433c8e0 100644 --- a/Library/libs/Makefile +++ b/Library/libs/Makefile @@ -29,7 +29,7 @@ SRC_C += popen.c printf.c putenv.c putgetch.c putpwent.c pwent.c qsort.c SRC_C += raise.c rand.c readdir.c readlink.c realloc.c regerror.c SRC_C += regsub.c remove.c rewind.c rindex.c setbuffer.c setenv.c setjmp.c SRC_C += setvbuf.c settimeofday.c sleep.c sprintf.c stat.c stdio0.c -SRC_C += strcasecmp.c strdup.c stricmp.c strncasecmp.c +SRC_C += strcasecmp.c strdup.c stricmp.c strlcpy.c strncasecmp.c SRC_C += strnicmp.c strsep.c SRC_C += strtod.c strtol.c system.c time.c tmpnam.c ttyname.c SRC_C += tzset.c ungetc.c utent.c utsname.c diff --git a/Library/libs/strlcpy.c b/Library/libs/strlcpy.c new file mode 100644 index 00000000..e565d8ba --- /dev/null +++ b/Library/libs/strlcpy.c @@ -0,0 +1,21 @@ +#include + +size_t strlcpy(char *dst, const char *src, size_t dstsize) +{ + size_t len = strlen(src); + size_t cp = len >= dstsize ? dstsize - 1 : len; + memcpy(dst, src, cp); + dst[cp] = 0; + return len; +} + +size_t strlcat(char *dst, const char *src, size_t dstsize) +{ + size_t len = strlen(dst); + /* No room at all: existing string fills the buffer */ + if (len >= dstsize - 1) + return len + strlen(src); + return strlcpy(dst + len, src, dstsize - len); +} + + \ No newline at end of file