]> Savannah Git Hosting - gnulib.git/commitdiff
setlocale-null: Add standalone include file.
authorBruno Haible <bruno@clisp.org>
Sun, 22 Dec 2019 18:34:41 +0000 (19:34 +0100)
committerBruno Haible <bruno@clisp.org>
Sun, 22 Dec 2019 18:34:41 +0000 (19:34 +0100)
* lib/setlocale_null.h: New file, extracted from lib/locale.in.h.
* lib/locale.in.h: Include setlocale_null.h.
(SETLOCALE_NULL_MAX, SETLOCALE_NULL_ALL_MAX, setlocale_null_r,
setlocale_null): Remove declarations.
* lib/setlocale_null.c: Include setlocale_null.h.
* lib/localename.c: Likewise.
* modules/setlocale-null (Files): Add lib/setlocale_null.h.
(Depends-on): Add snippet/arg-nonnull.
(Include): Allow either "setlocale_null.h" or <locale.h>.

ChangeLog
lib/locale.in.h
lib/localename.c
lib/setlocale_null.c
lib/setlocale_null.h [new file with mode: 0644]
modules/setlocale-null

index 0787d67cf447b53fbfc678ce2463d340ca062202..b5dedb14da582d496a3740771e394c51ab3f4eb9 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,16 @@
+2019-12-22  Bruno Haible  <bruno@clisp.org>
+
+       setlocale-null: Add standalone include file.
+       * lib/setlocale_null.h: New file, extracted from lib/locale.in.h.
+       * lib/locale.in.h: Include setlocale_null.h.
+       (SETLOCALE_NULL_MAX, SETLOCALE_NULL_ALL_MAX, setlocale_null_r,
+       setlocale_null): Remove declarations.
+       * lib/setlocale_null.c: Include setlocale_null.h.
+       * lib/localename.c: Likewise.
+       * modules/setlocale-null (Files): Add lib/setlocale_null.h.
+       (Depends-on): Add snippet/arg-nonnull.
+       (Include): Allow either "setlocale_null.h" or <locale.h>.
+
 2019-12-22  Bruno Haible  <bruno@clisp.org>
 
        strfmon_l: Fix test failures on FreeBSD and Cygwin.
index f4eccc230ccf8ac138e79cff9a84054280110350..841bf9bdbec669bca0ec2e9d76808086ea3ec10c 100644 (file)
@@ -207,53 +207,8 @@ _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - "
 #endif
 
 #if @GNULIB_SETLOCALE_NULL@
-/* Recommended size of a buffer for a locale name for a single category.
-   On glibc systems, you can have locale names that are relative file names;
-   assume a maximum length 256.
-   In native Windows, in 2018 the longest locale name was of length 58
-   ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251").  */
-# define SETLOCALE_NULL_MAX (256+1)
-/* Recommended size of a buffer for a locale name with all categories.
-   On glibc systems, you can have locale names that are relative file names;
-   assume maximum length 256 for each.  There are 12 categories; so, the
-   maximum total length is 148+12*256.
-   In native Windows, there are 5 categories, and the maximum total length is
-   55+5*58.  */
-# define SETLOCALE_NULL_ALL_MAX (148+12*256+1)
-/* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL),
-   except that
-     - it is guaranteed to be multithread-safe,
-     - it returns the resulting locale category name or locale name in the
-       user-supplied buffer BUF, which must be BUFSIZE bytes long.
-   The recommended minimum buffer size is
-     - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and
-     - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL.
-   The return value is an error code: 0 if the call is successful, EINVAL if
-   CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed
-   size (including the trailing NUL byte).  In the latter case, a truncated
-   result is returned in BUF, but still NUL-terminated if BUFSIZE > 0.
-   For this call to be multithread-safe, *all* calls to
-   setlocale (CATEGORY, NULL) in all other threads must have been converted
-   to use setlocale_null_r or setlocale_null as well, and the other threads
-   must not make other setlocale invocations (since changing the global locale
-   has side effects on all threads).  */
-_GL_FUNCDECL_SYS (setlocale_null_r, int,
-                  (int category, char *buf, size_t bufsize)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_SYS (setlocale_null_r, int,
-                  (int category, char *buf, size_t bufsize));
-_GL_CXXALIASWARN (setlocale_null_r);
-/* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that
-   it is guaranteed to be multithread-safe.
-   The return value is NULL if CATEGORY is invalid.
-   For this call to be multithread-safe, *all* calls to
-   setlocale (CATEGORY, NULL) in all other threads must have been converted
-   to use setlocale_null_r or setlocale_null as well, and the other threads
-   must not make other setlocale invocations (since changing the global locale
-   has side effects on all threads).  */
-_GL_FUNCDECL_SYS (setlocale_null, const char *, (int category));
-_GL_CXXALIAS_SYS (setlocale_null, const char *, (int category));
-_GL_CXXALIASWARN (setlocale_null);
+/* Included here for convenience.  */
+# include "setlocale_null.h"
 #endif
 
 #if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @HAVE_NEWLOCALE@)
index 5e51201a9272012c25ebb6f8296fb5c196ba2fd3..180caefc3a50d9b8f7822a545b75890844b4191b 100644 (file)
@@ -34,6 +34,7 @@
 #include <string.h>
 
 #include "flexmember.h"
+#include "setlocale_null.h"
 
 /* We cannot support uselocale() on platforms where the locale_t type is fake.
    See intl-thread-locale.m4 for details.  */
index c20125709a82c07592e5c692049abc1bc5bf38ab..d676630a6aeea35a233152903251e47e23778a88 100644 (file)
 #include <config.h>
 
 /* Specification.  */
-#include <locale.h>
+#include "setlocale_null.h"
 
 #include <errno.h>
+#include <locale.h>
 #include <stdlib.h>
 #include <string.h>
 #if defined _WIN32 && !defined __CYGWIN__
diff --git a/lib/setlocale_null.h b/lib/setlocale_null.h
new file mode 100644 (file)
index 0000000..de58e80
--- /dev/null
@@ -0,0 +1,82 @@
+/* Query the name of the current global locale.
+   Copyright (C) 2019 Free Software Foundation, Inc.
+
+   This program is free software: you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 3 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2019.  */
+
+#ifndef _SETLOCALE_NULL_H
+#define _SETLOCALE_NULL_H
+
+#include <stddef.h>
+
+#include "arg-nonnull.h"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Recommended size of a buffer for a locale name for a single category.
+   On glibc systems, you can have locale names that are relative file names;
+   assume a maximum length 256.
+   In native Windows, in 2018 the longest locale name was of length 58
+   ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251").  */
+#define SETLOCALE_NULL_MAX (256+1)
+
+/* Recommended size of a buffer for a locale name with all categories.
+   On glibc systems, you can have locale names that are relative file names;
+   assume maximum length 256 for each.  There are 12 categories; so, the
+   maximum total length is 148+12*256.
+   In native Windows, there are 5 categories, and the maximum total length is
+   55+5*58.  */
+#define SETLOCALE_NULL_ALL_MAX (148+12*256+1)
+
+/* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL),
+   except that
+     - it is guaranteed to be multithread-safe,
+     - it returns the resulting locale category name or locale name in the
+       user-supplied buffer BUF, which must be BUFSIZE bytes long.
+   The recommended minimum buffer size is
+     - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and
+     - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL.
+   The return value is an error code: 0 if the call is successful, EINVAL if
+   CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed
+   size (including the trailing NUL byte).  In the latter case, a truncated
+   result is returned in BUF, but still NUL-terminated if BUFSIZE > 0.
+   For this call to be multithread-safe, *all* calls to
+   setlocale (CATEGORY, NULL) in all other threads must have been converted
+   to use setlocale_null_r or setlocale_null as well, and the other threads
+   must not make other setlocale invocations (since changing the global locale
+   has side effects on all threads).  */
+extern int setlocale_null_r (int category, char *buf, size_t bufsize)
+  _GL_ARG_NONNULL ((2));
+
+/* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that
+   it is guaranteed to be multithread-safe.
+   The return value is NULL if CATEGORY is invalid.
+   For this call to be multithread-safe, *all* calls to
+   setlocale (CATEGORY, NULL) in all other threads must have been converted
+   to use setlocale_null_r or setlocale_null as well, and the other threads
+   must not make other setlocale invocations (since changing the global locale
+   has side effects on all threads).  */
+extern const char *setlocale_null (int category);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _SETLOCALE_NULL_H */
index 17e8d9d7450628ee5db0cdfbb01bdaada953fa58..52403692c548fbe9eb655a459054556bd6f40383 100644 (file)
@@ -2,6 +2,7 @@ Description:
 setlocale_null() function: query the name of the current global locale.
 
 Files:
+lib/setlocale_null.h
 lib/setlocale_null.c
 lib/setlocale-lock.c
 lib/windows-initguard.h
@@ -10,6 +11,7 @@ m4/threadlib.m4
 
 Depends-on:
 locale
+snippet/arg-nonnull
 
 configure.ac:
 gl_FUNC_SETLOCALE_NULL
@@ -22,7 +24,7 @@ Makefile.am:
 lib_SOURCES += setlocale_null.c
 
 Include:
-<locale.h>
+#include "setlocale_null.h" or #include <locale.h>
 
 Link:
 $(LIB_SETLOCALE_NULL)