X-Git-Url: https://git.libre-soc.org/?p=mesa.git;a=blobdiff_plain;f=src%2Futil%2Fstrndup.h;h=dcaa429dbe81b1b0fdb6d537972d93f41e73695e;hp=a3d739841322750ff996f0a3a72fc77af612bfde;hb=HEAD;hpb=d542d2fc13fd67a444c202b706fa44a34cc53c90 diff --git a/src/util/strndup.h b/src/util/strndup.h index a3d73984132..dcaa429dbe8 100644 --- a/src/util/strndup.h +++ b/src/util/strndup.h @@ -24,20 +24,37 @@ #ifndef STRNDUP_H #define STRNDUP_H -#include // size_t - #if defined(_WIN32) +#include // size_t +#include + #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 */