diff options
Diffstat (limited to 'src/util/strndup.h')
-rw-r--r-- | src/util/strndup.h | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/src/util/strndup.h b/src/util/strndup.h index a3d73984132..6d1868370fd 100644 --- a/src/util/strndup.h +++ b/src/util/strndup.h @@ -28,16 +28,34 @@ #if defined(_WIN32) +#include <string.h> + #ifdef __cplusplus extern "C" { #endif -char *strndup(const char *str, size_t max); +static inline char * +strndup(const char *str, size_t max) +{ + size_t n; + char *ptr; + + if (!str) + return NULL; + + n = strnlen(str, max); + ptr = (char *) calloc(n + 1, sizeof(char)); + if (!ptr) + return NULL; + + memcpy(ptr, str, n); + return ptr; +} #ifdef __cplusplus } #endif -#endif +#endif /* _WIN32 */ #endif /* STRNDUP_H */ |