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(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)


+ 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 * 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)


+ 0
- 2
tests/test_locale.c View File

@@ -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];


Loading…
Cancel
Save