This is the mail archive of the glibc-cvs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[glibc/zack/no-nested-includes] Linux: Fix __glibc_has_include use for <sys/stat.h> and statx


https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=48c3c1238925410b4e777dc94e2fde4cc9132d44

commit 48c3c1238925410b4e777dc94e2fde4cc9132d44
Author: Florian Weimer <fweimer@redhat.com>
Date:   Fri Jun 14 16:28:41 2019 +0200

    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>

Diff:
---
 ChangeLog                            | 5 +++++
 sysdeps/unix/sysv/linux/bits/statx.h | 7 +++++--
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index 4aae5e7..efd86e0 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 d36f44e..2068787 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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]