diff --git a/headers/posix/string.h b/headers/posix/string.h index 8e29ca49fe..b5b918f9c7 100644 --- a/headers/posix/string.h +++ b/headers/posix/string.h @@ -18,6 +18,7 @@ extern "C" { extern void *memchr(const void *source, int value, size_t length); extern int memcmp(const void *buffer1, const void *buffer2, size_t length); extern void *memcpy(void *dest, const void *source, size_t length); +extern void *memccpy(void *dest, const void *source, int stopByte, size_t length); extern void *memmove(void *dest, const void *source, size_t length); extern void *memset(void *dest, int value, size_t length); diff --git a/src/system/libroot/posix/string/Jamfile b/src/system/libroot/posix/string/Jamfile index 72dd1e4d2e..3de1379cad 100644 --- a/src/system/libroot/posix/string/Jamfile +++ b/src/system/libroot/posix/string/Jamfile @@ -5,6 +5,7 @@ KernelMergeObject posix_string.o : bcopy.c bzero.c ffs.cpp + memccpy.c memchr.c memcmp.c memcpy.c diff --git a/src/system/libroot/posix/string/memccpy.c b/src/system/libroot/posix/string/memccpy.c new file mode 100644 index 0000000000..fbe4970413 --- /dev/null +++ b/src/system/libroot/posix/string/memccpy.c @@ -0,0 +1,27 @@ +/* + * Copyright 2005, Haiku Inc. All Rights Reserved. + * Distributed under the terms of the MIT license. + */ + + +#include + +#include + + +void * +memccpy(void *_dest, const void *_source, int stopByte, size_t length) +{ + if (length) { + const uint8 *source = (const uint8 *)_source; + uint8 *dest = (uint8 *)_dest; + + do { + if ((*dest++ = *source++) == (uint8)stopByte) + return dest; + } while (--length != 0); + } + + return NULL; +} +