Browse Source

Issue #705: disable locale handling when building for a uClibc system because its duplocale() function (intentionally) crashes.

tags/json-c-0.17-20230812
Eric Haszlakiewicz 3 years ago
parent
commit
253a5fa99d
3 changed files with 14 additions and 2 deletions
  1. +12
    -0
      CMakeLists.txt
  2. +2
    -0
      ChangeLog
  3. +0
    -2
      tests/test_locale.c

+ 12
- 0
CMakeLists.txt View File

@@ -192,6 +192,18 @@ if (HAVE_LOCALE_H)
check_symbol_exists(setlocale "locale.h" HAVE_SETLOCALE)
check_symbol_exists(uselocale "locale.h" HAVE_USELOCALE)
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)
check_symbol_exists(strcasecmp "strings.h" HAVE_STRCASECMP)
check_symbol_exists(strncasecmp "strings.h" HAVE_STRNCASECMP)


+ 2
- 0
ChangeLog View File

@@ -14,6 +14,8 @@ Significant changes and bug fixes
---------------------------------
* 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.
* 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
- 2
tests/test_locale.c View File

@@ -24,8 +24,6 @@ int main(int argc, char **argv)
json_object *new_obj;
#ifdef HAVE_SETLOCALE
setlocale(LC_NUMERIC, "de_DE");
#else
printf("No locale\n");
#endif

char buf1[10], buf2[10];


Loading…
Cancel
Save