[PATCH v3 2/4] compat/regex: move stdlib.h up in inclusion chain
- From
Đoàn Trần Công Danh <congdanhqx@gmail.com>
- Date
- Apr 27, 2020, 14:22 UTC
- Message-ID
- <8d18c53bc813865a652be148afd2292d75e1b635.1587996766.git.congdanhqx@gmail.com>
- In-Reply-To
- <cover.1587996765.git.congdanhqx@gmail.com>
In Linux with musl libc, we have this inclusion chain:
compat/regex/regex.c:69
`-> compat/regex/regex_internal.h
`-> /usr/include/stdlib.h
`-> /usr/include/features.h
`-> /usr/include/alloca.hIn that inclusion chain, `<features.h>` claims it's _BSD_SOURCE compatible when it's NOT asked to be either {_POSIX,_GNU,_XOPEN,_BSD}_SOURCE, or __STRICT_ANSI__. And, `<stdlib.h>` will include `<alloca.h>` to be compatible with software written for GNU and BSD. Thus, redefine `alloca` macro, which was defined before at compat/regex/regex.c:66.
Considering this is only compat code, we've taken from other project, it's not our business to decide which source should we adhere to.
Include `<stdlib.h>` early to prevent the redefinition of alloca. This also remove a potential warning about alloca not defined on: #undef alloca
Helped-by: Ramsay Jones <ramsay@ramsayjones.plus.com> Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com> ---
Notes:
There is another warning about un-match declaration and definition of
re_string_context_at.
It's arguably, a bug in sparse itself.
Consider that there's a fix for it in their development version already,
and, we expect they'll fix the zero-ing pattern in 1/? before enable it again.
There're no point to change that pair of declaration/definition. This patch is technically Ramsay's work.
Since <alloca.h> is likely unportable, my patch will be likely unusable.
I took Ramsay's work and write the commit message instead.I would love to see Ramsay's SoB on reply to this patch.
compat/regex/regex.c | 1 + compat/regex/regex_internal.h | 1 - 2 files changed, 1 insertion(+), 1 deletion(-)
diff --git a/compat/regex/regex.c b/compat/regex/regex.c index f3e03a9eab..e6f4a5d177 100644 --- a/compat/regex/regex.c +++ b/compat/regex/regex.c @@ -60,6 +60,7 @@ #undefs RE_DUP_MAX and sets it to the right value. */ #include <limits.h> #include <stdint.h> +#include <stdlib.h> #ifdef GAWK #undef alloca diff --git a/compat/regex/regex_internal.h b/compat/regex/regex_internal.h index 3ee8aae59d..0bad8b841e 100644 --- a/compat/regex/regex_internal.h +++ b/compat/regex/regex_internal.h @@ -23,7 +23,6 @@ #include <assert.h> #include <ctype.h> #include <stdio.h> -#include <stdlib.h> #include <string.h> #if defined HAVE_LANGINFO_H || defined HAVE_LANGINFO_CODESET || defined _LIBC
-- 2.26.2.526.g744177e7f7