diff --git a/libc/Makefile b/libc/Makefile index 1cc70b9a..791e4ec7 100644 --- a/libc/Makefile +++ b/libc/Makefile @@ -111,6 +111,7 @@ strncasecmp.o \ strncat.o \ strncmp.o \ strncpy.o \ +strndup.o \ strnlen.o \ strpbrk.o \ strrchr.o \ diff --git a/libc/include/string.h b/libc/include/string.h index cf22cbb6..f2a50c62 100644 --- a/libc/include/string.h +++ b/libc/include/string.h @@ -52,6 +52,7 @@ size_t strlen(const char*); char* strncat(char* restrict, const char* restrict, size_t); int strncmp(const char*, const char*, size_t); char* strncpy(char* restrict, const char* restrict, size_t); +char* strndup(const char*, size_t); size_t strnlen(const char*, size_t); char* strpbrk(const char*, const char*); char* strrchr(const char*, int); @@ -66,7 +67,6 @@ void* memccpy(void* restrict, const void* restrict, int, size_t); int strcoll_l(const char*, const char*, locale_t); char* strerror_l(int, locale_t); int strerror_r(int, char*, size_t); -char* strndup(const char*, size_t); char* strsignal(int); size_t strxfrm(char* restrict, const char* restrict, size_t); size_t strxfrm_l(char* restrict, const char* restrict, size_t, locale_t); diff --git a/libc/strndup.cpp b/libc/strndup.cpp new file mode 100644 index 00000000..958a3d60 --- /dev/null +++ b/libc/strndup.cpp @@ -0,0 +1,39 @@ +/******************************************************************************* + + Copyright(C) Jonas 'Sortie' Termansen 2011, 2012. + + This file is part of the Sortix C Library. + + The Sortix C Library is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 3 of the License, or (at your + option) any later version. + + The Sortix C Library is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public + License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with the Sortix C Library. If not, see . + + strndup.cpp + Creates a copy of a string. + +*******************************************************************************/ + +#include +#include + +extern "C" char* strndup(const char* input, size_t n) +{ + size_t inputsize = strlen(input); + if ( n < inputsize ) + inputsize = n; + char* result = (char*) malloc(inputsize + 1); + if ( !result ) + return NULL; + memcpy(result, input, inputsize); + result[inputsize] = 0; + return result; +}