diff options
author | Florian Weimer <fweimer@redhat.com> | 2019-06-14 16:28:41 +0200 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2019-06-14 16:28:41 +0200 |
commit | 48c3c1238925410b4e777dc94e2fde4cc9132d44 (patch) | |
tree | 47fe7ff3defaf090e7b6a37302bc1797613b0c59 | |
parent | 8d141877e07cc594e9fefc3795b8ba729288093c (diff) | |
download | glibc-48c3c1238925410b4e777dc94e2fde4cc9132d44.tar.gz glibc-48c3c1238925410b4e777dc94e2fde4cc9132d44.tar.xz glibc-48c3c1238925410b4e777dc94e2fde4cc9132d44.zip |
Linux: Fix __glibc_has_include use for <sys/stat.h> and statx
The identifier linux is used as a predefined macro, so the actually used path is 1/stat.h or 1/stat64.h. Using the quote-based version triggers a file lookup for /usr/include/bits/linux/stat.h (or whatever directory is used to store bits/statx.h), but since bits/ is pretty much reserved by glibc, this appears to be acceptable. This is related to GCC PR 80005: incorrect macro expansion of the argument of __has_include. Suggested by Zack Weinberg. Reviewed-by: Carlos O'Donell <carlos@redhat.com>
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/bits/statx.h | 7 |
2 files changed, 10 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 4aae5e74f7..efd86e05ed 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2019-06-14 Florian Weimer <fweimer@redhat.com> + * sysdeps/unix/sysv/linux/bits/statx.h: Use string literal in + argument to __glibc_has_include to inhibit macro expansion. + +2019-06-14 Florian Weimer <fweimer@redhat.com> + * misc/sys/cdefs.h (__glibc_has_include): Do not use a function-like macro, so that __has_include can inhibit expansion of its argument. diff --git a/sysdeps/unix/sysv/linux/bits/statx.h b/sysdeps/unix/sysv/linux/bits/statx.h index d36f44efc6..206878723f 100644 --- a/sysdeps/unix/sysv/linux/bits/statx.h +++ b/sysdeps/unix/sysv/linux/bits/statx.h @@ -23,8 +23,11 @@ #endif /* Use the Linux kernel header if available. */ -#if __glibc_has_include (<linux/stat.h>) -# include <linux/stat.h> + +/* Use "" to work around incorrect macro expansion of the + __has_include argument (GCC PR 80005). */ +#if __glibc_has_include ("linux/stat.h") +# include "linux/stat.h" # ifdef STATX_TYPE # define __statx_timestamp_defined 1 # define __statx_defined 1 |