From: Nick Bowler Date: Fri, 19 Jan 2024 03:58:48 +0000 (-0500) Subject: cdecl99: Avoid gnulib setlocale_null bits. X-Git-Tag: v1.3~28 X-Git-Url: https://git.draconx.ca/gitweb/cdecl99.git/commitdiff_plain/c5a45174d224bf1fe6510316aef835563b9db94f cdecl99: Avoid gnulib setlocale_null bits. As this is a single-threaded application which does nothing exciting regarding locales, we shouldn't need the setlocale_null replacement. This performs a pile of configure tests related to the thread safety of setlocale(x, NULL), which includes possibly pulling in threading libraries and a bunch of other nonsense. To do this, we replace hard-locale (the only module using this) with an inline function using setlocale directly (inline is much better, because there is only one call site). --- diff --git a/lib/local/lib/hard-locale.h b/lib/local/lib/hard-locale.h new file mode 100644 index 0000000..b5d95e3 --- /dev/null +++ b/lib/local/lib/hard-locale.h @@ -0,0 +1,41 @@ +/* Determine whether a locale is hard. + * + * Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2022 Free Software + * Foundation, Inc. + * + * Imported from Gnulib hard-locale.[ch] with modifications by Nick Bowler: + * + * - Remove all setlocale workarounds, as our use case does not do anything + * fancy with locales and does not require thread safety (2024-01). + * + * This file is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of the + * License, or (at your option) any later version. + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public License + * along with this program. If not, see . + */ + +#ifndef HARD_LOCALE_H_ +#define HARD_LOCALE_H_ + +#include +#include + +static inline int hard_locale(int locale) +{ + char *name; + + if (!(name = setlocale(locale, NULL))) + return 0; + + return strcmp(name, "C") && strcmp(name, "POSIX"); +} + +#endif diff --git a/lib/local/modules/hard-locale b/lib/local/modules/hard-locale new file mode 100644 index 0000000..eb0ec8f --- /dev/null +++ b/lib/local/modules/hard-locale @@ -0,0 +1,22 @@ +Description: +Determine whether the current locale is different from the "C" locale +(simplified version with all multithreading bits removed). + +Files: +lib/hard-locale.h + +Depends-on: +gnulib-local + +configure.ac: +m4_set_add_all([DX_GNULIB_LOCAL_DIST], [modules/hard-locale], + [lib/hard-locale.h])dnl +AC_REQUIRE([AC_C_INLINE])dnl + +Makefile.am: + +License: +LGPLv2+ + +Maintainer: +Nick Bowler