diff options
-rw-r--r-- | include/string.h | 3 | ||||
-rw-r--r-- | libc/string/Makefile | 2 | ||||
-rw-r--r-- | libc/string/string.c | 20 |
3 files changed, 21 insertions, 4 deletions
diff --git a/include/string.h b/include/string.h index 3c03c7cee..13bdca993 100644 --- a/include/string.h +++ b/include/string.h @@ -125,8 +125,7 @@ extern char *strdup (__const char *__s) __THROW __attribute_malloc__; /* Return a malloc'd copy of at most N bytes of STRING. The resultant string is terminated even if no null terminator appears before STRING[N]. */ -#if 0 -//#if defined __USE_GNU +#if defined __USE_GNU extern char *strndup (__const char *__string, size_t __n) __THROW __attribute_malloc__; #endif diff --git a/libc/string/Makefile b/libc/string/Makefile index 748a935eb..7ef900041 100644 --- a/libc/string/Makefile +++ b/libc/string/Makefile @@ -25,7 +25,7 @@ include $(TOPDIR)Rules.mak MSRC=string.c MOBJ=strlen.o strcat.o strcpy.o strchr.o strcmp.o strncat.o strncpy.o \ - strncmp.o strrchr.o strdup.o memcpy.o memccpy.o memset.o \ + strncmp.o strrchr.o strdup.o strndup.o memcpy.o memccpy.o memset.o \ memmove.o memcmp.o memchr.o ffs.o strnlen.o strxfrm.o stpcpy.o stpncpy.o ifeq ($(HAS_LOCALE),true) diff --git a/libc/string/string.c b/libc/string/string.c index 7ccc55733..94bf542e4 100644 --- a/libc/string/string.c +++ b/libc/string/string.c @@ -274,6 +274,25 @@ char *strdup(const char *str) } #endif +/********************** Function strndup ************************************/ +#ifdef L_strndup +char *strndup(const char *str, size_t len) +{ + register size_t n; + register char *dst; + + n = strlen(str); + if (len < n) + n = len; + dst = (char *) malloc(n+1); + if (dst) { + memcpy(dst, str, n); + dst[n] = '\0'; + } + return dst; +} +#endif + /********************** Function memcpy ************************************/ #ifdef L_memcpy @@ -409,5 +428,4 @@ int ffs(int x) } #endif - /********************** THE END ********************************************/ |