mirror of https://github.com/mgba-emu/mgba.git
Util: Add strdup implementation for platforms without it
This commit is contained in:
parent
021ada03f0
commit
bbc63a2392
|
@ -211,6 +211,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm.*")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
include(CheckFunctionExists)
|
include(CheckFunctionExists)
|
||||||
|
check_function_exists(strdup HAVE_STRDUP)
|
||||||
check_function_exists(strndup HAVE_STRNDUP)
|
check_function_exists(strndup HAVE_STRNDUP)
|
||||||
check_function_exists(snprintf_l HAVE_SNPRINTF_L)
|
check_function_exists(snprintf_l HAVE_SNPRINTF_L)
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
|
@ -223,6 +224,10 @@ check_function_exists(newlocale HAVE_NEWLOCALE)
|
||||||
check_function_exists(freelocale HAVE_FREELOCALE)
|
check_function_exists(freelocale HAVE_FREELOCALE)
|
||||||
check_function_exists(uselocale HAVE_USELOCALE)
|
check_function_exists(uselocale HAVE_USELOCALE)
|
||||||
|
|
||||||
|
if(HAVE_STRDUP)
|
||||||
|
add_definitions(-DHAVE_STRDUP)
|
||||||
|
endif()
|
||||||
|
|
||||||
if(HAVE_STRNDUP)
|
if(HAVE_STRNDUP)
|
||||||
add_definitions(-DHAVE_STRNDUP)
|
add_definitions(-DHAVE_STRNDUP)
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -17,6 +17,16 @@ char* strndup(const char* start, size_t len) {
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef HAVE_STRDUP
|
||||||
|
char* strdup(const char* str) {
|
||||||
|
size_t len = strlen(str);
|
||||||
|
char* out = malloc(len + 1);
|
||||||
|
strncpy(out, str, len);
|
||||||
|
out[len] = '\0';
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
char* strnrstr(const char* restrict haystack, const char* restrict needle, size_t len) {
|
char* strnrstr(const char* restrict haystack, const char* restrict needle, size_t len) {
|
||||||
char* last = 0;
|
char* last = 0;
|
||||||
const char* next = haystack;
|
const char* next = haystack;
|
||||||
|
|
|
@ -13,6 +13,10 @@
|
||||||
char* strndup(const char* start, size_t len);
|
char* strndup(const char* start, size_t len);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef strdup
|
||||||
|
char* strdup(const char* str);
|
||||||
|
#endif
|
||||||
|
|
||||||
char* strnrstr(const char* restrict s1, const char* restrict s2, size_t len);
|
char* strnrstr(const char* restrict s1, const char* restrict s2, size_t len);
|
||||||
|
|
||||||
int utfcmp(const uint16_t* utf16, const char* utf8, size_t utf16Length, size_t utf8Length);
|
int utfcmp(const uint16_t* utf16, const char* utf8, size_t utf16Length, size_t utf8Length);
|
||||||
|
|
Loading…
Reference in New Issue