mirror of
https://github.com/json-c/json-c.git
synced 2026-03-13 18:19:06 +08:00
Issue #705: disable locale handling when building for a uClibc system because its duplocale() function (intentionally) crashes.
This commit is contained in:
@@ -192,6 +192,18 @@ if (HAVE_LOCALE_H)
|
|||||||
check_symbol_exists(setlocale "locale.h" HAVE_SETLOCALE)
|
check_symbol_exists(setlocale "locale.h" HAVE_SETLOCALE)
|
||||||
check_symbol_exists(uselocale "locale.h" HAVE_USELOCALE)
|
check_symbol_exists(uselocale "locale.h" HAVE_USELOCALE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
# uClibc *intentionally* crashes in duplocale(), at least as of:
|
||||||
|
# https://github.com/ffainelli/uClibc/blob/266bdc1/libc/misc/locale/locale.c#L1322
|
||||||
|
# So, if it looks like we're compiling for a system like that just disable
|
||||||
|
# locale handling entirely.
|
||||||
|
exec_program(${CMAKE_C_COMPILER} ARGS -dumpmachine OUTPUT_VARIABLE CMAKE_GNU_C_MACHINE)
|
||||||
|
if (CMAKE_GNU_C_MACHINE MATCHES "uclibc")
|
||||||
|
message(STATUS "Detected uClibc compiler, disabling locale handling")
|
||||||
|
set(HAVE_SETLOCALE 0)
|
||||||
|
set(HAVE_USELOCALE 0)
|
||||||
|
endif()
|
||||||
|
|
||||||
if (HAVE_STRINGS_H)
|
if (HAVE_STRINGS_H)
|
||||||
check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
|
check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
|
||||||
check_symbol_exists(strncasecmp "strings.h" HAVE_STRNCASECMP)
|
check_symbol_exists(strncasecmp "strings.h" HAVE_STRNCASECMP)
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ Significant changes and bug fixes
|
|||||||
---------------------------------
|
---------------------------------
|
||||||
* When serializing with JSON_C_TO_STRING_PRETTY set, keep the opening and
|
* When serializing with JSON_C_TO_STRING_PRETTY set, keep the opening and
|
||||||
closing curly or square braces on same line for empty objects or arrays.
|
closing curly or square braces on same line for empty objects or arrays.
|
||||||
|
* Disable locale handling when targeting a uClibc system due to problems
|
||||||
|
with its duplocale() function.
|
||||||
|
|
||||||
|
|
||||||
0.16 (up to commit 66dcdf5, 2022-04-13)
|
0.16 (up to commit 66dcdf5, 2022-04-13)
|
||||||
|
|||||||
@@ -24,8 +24,6 @@ int main(int argc, char **argv)
|
|||||||
json_object *new_obj;
|
json_object *new_obj;
|
||||||
#ifdef HAVE_SETLOCALE
|
#ifdef HAVE_SETLOCALE
|
||||||
setlocale(LC_NUMERIC, "de_DE");
|
setlocale(LC_NUMERIC, "de_DE");
|
||||||
#else
|
|
||||||
printf("No locale\n");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
char buf1[10], buf2[10];
|
char buf1[10], buf2[10];
|
||||||
|
|||||||
Reference in New Issue
Block a user