diff options
author | Bruno Haible <bruno@clisp.org> | 2019-12-24 17:23:23 +0100 |
---|---|---|
committer | Bruno Haible <bruno@clisp.org> | 2019-12-24 17:23:23 +0100 |
commit | 7f41a8405ac02cf00bc6bf775f604f638f938a18 (patch) | |
tree | ddc5f3eadc42e5ada412e27497efbe6b00a8efdb /lib/setlocale-lock.c | |
parent | 7d96c6af2b60538da1267528cb917bd496f95854 (diff) | |
download | gnulib-7f41a8405ac02cf00bc6bf775f604f638f938a18.tar.gz |
setlocale-null: Make it easy to rely on the lock in another library.
* lib/setlocale-lock.c: Do not define anything if OMIT_SETLOCALE_LOCK is
defined.
Diffstat (limited to 'lib/setlocale-lock.c')
-rw-r--r-- | lib/setlocale-lock.c | 62 |
1 files changed, 37 insertions, 25 deletions
diff --git a/lib/setlocale-lock.c b/lib/setlocale-lock.c index 60c1ba32a8..a71ba64ce9 100644 --- a/lib/setlocale-lock.c +++ b/lib/setlocale-lock.c @@ -18,32 +18,42 @@ #include <config.h> +/* When it is known that the gl_get_setlocale_null_lock function is defined + by a dependency library, it should not be defined here. */ +#if OMIT_SETLOCALE_LOCK + +/* This declaration is solely to ensure that after preprocessing + this file is never empty. */ +typedef int dummy; + +#else + /* This file defines the internal lock used by setlocale_null_r. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ -#undef gl_get_setlocale_null_lock +# undef gl_get_setlocale_null_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ -#ifndef DLL_EXPORTED -# if HAVE_VISIBILITY +# ifndef DLL_EXPORTED +# if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ -# define DLL_EXPORTED __attribute__((__visibility__("default"))) -# elif defined _WIN32 || defined __CYGWIN__ -# define DLL_EXPORTED __declspec(dllexport) -# else -# define DLL_EXPORTED +# define DLL_EXPORTED __attribute__((__visibility__("default"))) +# elif defined _WIN32 || defined __CYGWIN__ +# define DLL_EXPORTED __declspec(dllexport) +# else +# define DLL_EXPORTED +# endif # endif -#endif -#if defined _WIN32 && !defined __CYGWIN__ +# if defined _WIN32 && !defined __CYGWIN__ -# define WIN32_LEAN_AND_MEAN /* avoid including junk */ -# include <windows.h> +# define WIN32_LEAN_AND_MEAN /* avoid including junk */ +# include <windows.h> -# include "windows-initguard.h" +# include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ @@ -79,9 +89,9 @@ gl_get_setlocale_null_lock (void) return &lock; } -#elif HAVE_PTHREAD_API +# elif HAVE_PTHREAD_API -# include <pthread.h> +# include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; @@ -95,10 +105,10 @@ gl_get_setlocale_null_lock (void) return &mutex; } -#elif HAVE_THREADS_H +# elif HAVE_THREADS_H -# include <threads.h> -# include <stdlib.h> +# include <threads.h> +# include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; @@ -124,15 +134,17 @@ gl_get_setlocale_null_lock (void) return &mutex; } -#endif +# endif -#if defined _WIN32 || defined __CYGWIN__ +# if defined _WIN32 || defined __CYGWIN__ /* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause a link failure when no DLLs are involved. */ -# if defined _WIN64 || defined _LP64 -# define IMP(x) __imp_##x -# else -# define IMP(x) _imp__##x -# endif +# if defined _WIN64 || defined _LP64 +# define IMP(x) __imp_##x +# else +# define IMP(x) _imp__##x +# endif void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; +# endif + #endif |