]> git.ipfire.org Git - thirdparty/util-linux.git/commitdiff
libmount: fix statx() includes
authorKarel Zak <kzak@redhat.com>
Wed, 23 Aug 2023 09:50:37 +0000 (11:50 +0200)
committerKarel Zak <kzak@redhat.com>
Fri, 24 Nov 2023 09:37:55 +0000 (10:37 +0100)
Using sys/stat.h and linux/stat is too tricky.h together. It seems
better to rely on libc and use sys/stat.h only. Users affected
by old libc must update to use recent util-linux.

Fixes: https://github.com/util-linux/util-linux/issues/2448
Signed-off-by: Karel Zak <kzak@redhat.com>
configure.ac
include/fileutils.h
libmount/src/hook_mount.c
libmount/src/utils.c
meson.build

index 6509e481222e175f0b121909f27e836ce3b72016..7591a896af8dfe3bc3064ee34839acac08056414 100644 (file)
@@ -315,7 +315,6 @@ AC_CHECK_HEADERS([ \
        linux/nsfs.h \
        linux/pr.h \
        linux/raw.h \
-       linux/stat.h \
        linux/securebits.h \
        linux/tiocl.h \
        linux/version.h \
@@ -507,7 +506,6 @@ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
 ])
 
 AC_CHECK_TYPES([struct mount_attr], [], [], [[#include <linux/mount.h>]])
-AC_CHECK_TYPES([struct statx], [], [], [[#include <linux/stat.h>]])
 AC_CHECK_TYPES([enum fsconfig_command], [], [], [[#include <linux/mount.h>]])
 
 AC_CHECK_MEMBERS([struct termios.c_line],,,
@@ -516,8 +514,9 @@ AC_CHECK_MEMBERS([struct termios.c_line],,,
 AC_CHECK_MEMBERS([struct stat.st_mtim.tv_nsec],,,
     [[#include <sys/stat.h>]])
 
+AC_CHECK_TYPES([struct statx], [], [], [[#include <sys/stat.h>]])
 AC_CHECK_MEMBERS([struct statx.stx_mnt_id],,,
-    [[#include <linux/stat.h>]])
+    [[#include <sys/stat.h>]])
 
 AC_CHECK_DECLS([_NL_TIME_WEEK_1STDAY],[],[],[[#include <langinfo.h>]])
 
index a5fe517266f516b4f19d2e5961bbf29dbf90e646..538eab0b74eb250f767926290728a053396a63ca 100644 (file)
@@ -94,13 +94,13 @@ static inline int close_range(unsigned int first, unsigned int last, int flags)
 #  define HAVE_CLOSE_RANGE 1
 # endif        /* SYS_close_range */
 
-# if !defined(HAVE_STATX) && defined(HAVE_STRUCT_STATX) && defined(SYS_statx) && defined(HAVE_LINUX_STAT_H)
-#  include <linux/stat.h>
+# if !defined(HAVE_STATX) && defined(HAVE_STRUCT_STATX) && defined(SYS_statx)
 static inline int statx(int fd, const char *restrict path, int flags,
                    unsigned int mask, struct statx *stx)
 {
        return syscall(SYS_statx, fd, path, flags, mask, stx);
 }
+#  define HAVE_STATX 1
 # endif /* SYS_statx */
 
 #endif /* HAVE_SYS_SYSCALL_H */
index 056338c491424b5d68528a9c7e4259cc6346cdec..0ebb8299853974acdbb4d28e5aced4339126481e 100644 (file)
@@ -294,7 +294,7 @@ static int hook_create_mount(struct libmnt_context *cxt,
                /* cleanup after fail (libmount may only try the FS type) */
                close_sysapi_fds(api);
 
-#if defined(HAVE_STRUCT_STATX) && defined(HAVE_STRUCT_STATX_STX_MNT_ID)
+#if defined(HAVE_STATX) && defined(HAVE_STRUCT_STATX) && defined(HAVE_STRUCT_STATX_STX_MNT_ID)
        if (!rc && cxt->fs) {
                struct statx st;
 
index 1d3f4abcecec73d2be5708ee0c07b6ba749312cd..3817b392711c89e3f272749d34fe853f0f6da729 100644 (file)
@@ -111,7 +111,7 @@ static int safe_stat(const char *target, struct stat *st, int nofollow)
 
        memset(st, 0, sizeof(struct stat));
 
-#if defined(AT_STATX_DONT_SYNC) && defined (HAVE_STRUCT_STATX)
+#if defined(HAVE_STATX) && defined(HAVE_STRUCT_STATX) && defined(AT_STATX_DONT_SYNC)
        {
                int rc;
                struct statx stx = { 0 };
index f6ba6908c2cac5f2807d756eef2c21e3d74d257f..d13e0eac4a49fc12b70ccf91201cf6620cdd7286 100644 (file)
@@ -81,7 +81,7 @@ have_mountfd_api = cc.sizeof('struct mount_attr', prefix : '#include <linux/moun
 conf.set('HAVE_STRUCT_MOUNT_ATTR', have_mountfd_api ? 1 : false)
 conf.set('HAVE_MOUNTFD_API', have_mountfd_api ? 1 : false)
 
-have_struct_statx = cc.sizeof('struct statx', prefix : '#include <linux/stat.h>') > 0
+have_struct_statx = cc.sizeof('struct statx', prefix : '#include <sys/stat.h>') > 0
 conf.set('HAVE_STRUCT_STATX', have_struct_statx ? 1 : false)
 
 build_libmount = not get_option('build-libmount').disabled()
@@ -179,7 +179,6 @@ headers = '''
         linux/nsfs.h
         linux/mount.h
         linux/pr.h
-        linux/stat.h
         linux/securebits.h
         linux/tiocl.h
         linux/version.h
@@ -636,7 +635,7 @@ have = cc.has_member('struct stat', 'st_mtim.tv_nsec',
 conf.set('HAVE_STRUCT_STAT_ST_MTIM_TV_NSEC', have ? 1 : false)
 
 have = cc.has_member('struct statx', 'stx_mnt_id',
-                     prefix : '#include <linux/stat.h>')
+                     prefix : '#include <sys/stat.h>')
 conf.set('HAVE_STRUCT_STATX_STX_MNT_ID', have ? 1 : false)
 
 # replacement for AC_STRUCT_TIMEZONE