-
Notifications
You must be signed in to change notification settings - Fork 19
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
15 changed files
with
1,868 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -24,3 +24,12 @@ config.sub | |
|
||
mingw32-config.cache | ||
|
||
/arg-nonnull.h | ||
/c++defs.h | ||
/warn-on-use.h | ||
|
||
*~ | ||
|
||
ext_deps | ||
|
||
config.h |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,6 @@ set -e | |
|
||
aclocal | ||
autoheader | ||
automake --gnu --add-missing --copy | ||
automake --add-missing --copy | ||
autoconf | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
/Makefile.am | ||
/dummy.c | ||
/memchr.c | ||
/memchr.valgrind | ||
/memmem.c | ||
/stddef.in.h | ||
/stdint.in.h | ||
/str-two-way.h | ||
/string.in.h |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools | ||
that the values passed as arguments n, ..., m must be non-NULL pointers. | ||
n = 1 stands for the first argument, n = 2 for the second argument etc. */ | ||
#ifndef _GL_ARG_NONNULL | ||
# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3 | ||
# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) | ||
# else | ||
# define _GL_ARG_NONNULL(params) | ||
# endif | ||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,255 @@ | ||
#ifndef _GL_CXXDEFS_H | ||
#define _GL_CXXDEFS_H | ||
|
||
/* The three most frequent use cases of these macros are: | ||
* For providing a substitute for a function that is missing on some | ||
platforms, but is declared and works fine on the platforms on which | ||
it exists: | ||
#if @GNULIB_FOO@ | ||
# if !@HAVE_FOO@ | ||
_GL_FUNCDECL_SYS (foo, ...); | ||
# endif | ||
_GL_CXXALIAS_SYS (foo, ...); | ||
_GL_CXXALIASWARN (foo); | ||
#elif defined GNULIB_POSIXCHECK | ||
... | ||
#endif | ||
* For providing a replacement for a function that exists on all platforms, | ||
but is broken/insufficient and needs to be replaced on some platforms: | ||
#if @GNULIB_FOO@ | ||
# if @REPLACE_FOO@ | ||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
# undef foo | ||
# define foo rpl_foo | ||
# endif | ||
_GL_FUNCDECL_RPL (foo, ...); | ||
_GL_CXXALIAS_RPL (foo, ...); | ||
# else | ||
_GL_CXXALIAS_SYS (foo, ...); | ||
# endif | ||
_GL_CXXALIASWARN (foo); | ||
#elif defined GNULIB_POSIXCHECK | ||
... | ||
#endif | ||
* For providing a replacement for a function that exists on some platforms | ||
but is broken/insufficient and needs to be replaced on some of them and | ||
is additionally either missing or undeclared on some other platforms: | ||
#if @GNULIB_FOO@ | ||
# if @REPLACE_FOO@ | ||
# if !(defined __cplusplus && defined GNULIB_NAMESPACE) | ||
# undef foo | ||
# define foo rpl_foo | ||
# endif | ||
_GL_FUNCDECL_RPL (foo, ...); | ||
_GL_CXXALIAS_RPL (foo, ...); | ||
# else | ||
# if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ | ||
_GL_FUNCDECL_SYS (foo, ...); | ||
# endif | ||
_GL_CXXALIAS_SYS (foo, ...); | ||
# endif | ||
_GL_CXXALIASWARN (foo); | ||
#elif defined GNULIB_POSIXCHECK | ||
... | ||
#endif | ||
*/ | ||
|
||
/* _GL_EXTERN_C declaration; | ||
performs the declaration with C linkage. */ | ||
#if defined __cplusplus | ||
# define _GL_EXTERN_C extern "C" | ||
#else | ||
# define _GL_EXTERN_C extern | ||
#endif | ||
|
||
/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); | ||
declares a replacement function, named rpl_func, with the given prototype, | ||
consisting of return type, parameters, and attributes. | ||
Example: | ||
_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) | ||
_GL_ARG_NONNULL ((1))); | ||
*/ | ||
#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ | ||
_GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) | ||
#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ | ||
_GL_EXTERN_C rettype rpl_func parameters_and_attributes | ||
|
||
/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); | ||
declares the system function, named func, with the given prototype, | ||
consisting of return type, parameters, and attributes. | ||
Example: | ||
_GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) | ||
_GL_ARG_NONNULL ((1))); | ||
*/ | ||
#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ | ||
_GL_EXTERN_C rettype func parameters_and_attributes | ||
|
||
/* _GL_CXXALIAS_RPL (func, rettype, parameters); | ||
declares a C++ alias called GNULIB_NAMESPACE::func | ||
that redirects to rpl_func, if GNULIB_NAMESPACE is defined. | ||
Example: | ||
_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); | ||
*/ | ||
#define _GL_CXXALIAS_RPL(func,rettype,parameters) \ | ||
_GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ | ||
namespace GNULIB_NAMESPACE \ | ||
{ \ | ||
rettype (*const func) parameters = ::rpl_func; \ | ||
} \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#else | ||
# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); | ||
is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); | ||
except that the C function rpl_func may have a slightly different | ||
declaration. A cast is used to silence the "invalid conversion" error | ||
that would otherwise occur. */ | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ | ||
namespace GNULIB_NAMESPACE \ | ||
{ \ | ||
rettype (*const func) parameters = \ | ||
reinterpret_cast<rettype(*)parameters>(::rpl_func); \ | ||
} \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#else | ||
# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
/* _GL_CXXALIAS_SYS (func, rettype, parameters); | ||
declares a C++ alias called GNULIB_NAMESPACE::func | ||
that redirects to the system provided function func, if GNULIB_NAMESPACE | ||
is defined. | ||
Example: | ||
_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); | ||
*/ | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
/* If we were to write | ||
rettype (*const func) parameters = ::func; | ||
like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls | ||
better (remove an indirection through a 'static' pointer variable), | ||
but then the _GL_CXXALIASWARN macro below would cause a warning not only | ||
for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */ | ||
# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ | ||
namespace GNULIB_NAMESPACE \ | ||
{ \ | ||
static rettype (*func) parameters = ::func; \ | ||
} \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#else | ||
# define _GL_CXXALIAS_SYS(func,rettype,parameters) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); | ||
is like _GL_CXXALIAS_SYS (func, rettype, parameters); | ||
except that the C function func may have a slightly different declaration. | ||
A cast is used to silence the "invalid conversion" error that would | ||
otherwise occur. */ | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ | ||
namespace GNULIB_NAMESPACE \ | ||
{ \ | ||
static rettype (*func) parameters = \ | ||
reinterpret_cast<rettype(*)parameters>(::func); \ | ||
} \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#else | ||
# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); | ||
is like _GL_CXXALIAS_SYS (func, rettype, parameters); | ||
except that the C function is picked among a set of overloaded functions, | ||
namely the one with rettype2 and parameters2. Two consecutive casts | ||
are used to silence the "cannot find a match" and "invalid conversion" | ||
errors that would otherwise occur. */ | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
/* The outer cast must be a reinterpret_cast. | ||
The inner cast: When the function is defined as a set of overloaded | ||
functions, it works as a static_cast<>, choosing the designated variant. | ||
When the function is defined as a single variant, it works as a | ||
reinterpret_cast<>. The parenthesized cast syntax works both ways. */ | ||
# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ | ||
namespace GNULIB_NAMESPACE \ | ||
{ \ | ||
static rettype (*func) parameters = \ | ||
reinterpret_cast<rettype(*)parameters>( \ | ||
(rettype2(*)parameters2)(::func)); \ | ||
} \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#else | ||
# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
/* _GL_CXXALIASWARN (func); | ||
causes a warning to be emitted when ::func is used but not when | ||
GNULIB_NAMESPACE::func is used. func must be defined without overloaded | ||
variants. */ | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
# define _GL_CXXALIASWARN(func) \ | ||
_GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) | ||
# define _GL_CXXALIASWARN_1(func,namespace) \ | ||
_GL_CXXALIASWARN_2 (func, namespace) | ||
/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, | ||
we enable the warning only when not optimizing. */ | ||
# if !__OPTIMIZE__ | ||
# define _GL_CXXALIASWARN_2(func,namespace) \ | ||
_GL_WARN_ON_USE (func, \ | ||
"The symbol ::" #func " refers to the system function. " \ | ||
"Use " #namespace "::" #func " instead.") | ||
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING | ||
# define _GL_CXXALIASWARN_2(func,namespace) \ | ||
extern __typeof__ (func) func | ||
# else | ||
# define _GL_CXXALIASWARN_2(func,namespace) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
# endif | ||
#else | ||
# define _GL_CXXALIASWARN(func) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); | ||
causes a warning to be emitted when the given overloaded variant of ::func | ||
is used but not when GNULIB_NAMESPACE::func is used. */ | ||
#if defined __cplusplus && defined GNULIB_NAMESPACE | ||
# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ | ||
_GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ | ||
GNULIB_NAMESPACE) | ||
# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ | ||
_GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) | ||
/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, | ||
we enable the warning only when not optimizing. */ | ||
# if !__OPTIMIZE__ | ||
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ | ||
_GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \ | ||
"The symbol ::" #func " refers to the system function. " \ | ||
"Use " #namespace "::" #func " instead.") | ||
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING | ||
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ | ||
extern __typeof__ (func) func | ||
# else | ||
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
# endif | ||
#else | ||
# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ | ||
_GL_EXTERN_C int _gl_cxxalias_dummy | ||
#endif | ||
|
||
#endif /* _GL_CXXDEFS_H */ |
Oops, something went wrong.