1 /* 2 * Copyright 2009, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include <string.h> 8 #include <stdlib.h> 9 10 11 extern "C" char* 12 strndup(const char* string, size_t size) 13 { 14 // While POSIX does not mention it, we handle NULL pointers gracefully 15 if (string == NULL) 16 return NULL; 17 18 size_t length = strnlen(string, size); 19 char* copied = (char*)malloc(length + 1); 20 if (copied == NULL) 21 return NULL; 22 23 memcpy(copied, string, length); 24 copied[length] = '\0'; 25 26 return copied; 27 } 28