strlcpy/strlcat: Add these newer BSD string functions
authorAlan Cox <alan@linux.intel.com>
Fri, 2 Jan 2015 22:33:59 +0000 (22:33 +0000)
committerAlan Cox <alan@linux.intel.com>
Fri, 2 Jan 2015 22:33:59 +0000 (22:33 +0000)
Library/include/string.h
Library/libs/Makefile
Library/libs/strlcpy.c [new file with mode: 0644]

index ed3bd18..8d60d3c 100644 (file)
@@ -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)
index 6a6e439..9433c8e 100644 (file)
@@ -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 (file)
index 0000000..e565d8b
--- /dev/null
@@ -0,0 +1,21 @@
+#include <string.h>
+
+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