diff --git a/src/corelib/global/minimum-linux_p.h b/src/corelib/global/minimum-linux_p.h index bad2488b4d..9c074e13ba 100644 --- a/src/corelib/global/minimum-linux_p.h +++ b/src/corelib/global/minimum-linux_p.h @@ -75,9 +75,14 @@ QT_BEGIN_NAMESPACE * - accept4 2.6.28 * - renameat2 3.16 QT_CONFIG(renameat2) * - getrandom 3.17 QT_CONFIG(getentropy) + * - statx 4.11 QT_CONFIG(statx) */ -#if QT_CONFIG(getentropy) +#if QT_CONFIG(statx) +# define MINLINUX_MAJOR 4 +# define MINLINUX_MINOR 11 +# define MINLINUX_PATCH 0 +#elif QT_CONFIG(getentropy) # define MINLINUX_MAJOR 3 # define MINLINUX_MINOR 17 # define MINLINUX_PATCH 0 diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp index deb4a9f220..40e8f82a80 100644 --- a/src/corelib/io/qfilesystemengine_unix.cpp +++ b/src/corelib/io/qfilesystemengine_unix.cpp @@ -1,6 +1,6 @@ /**************************************************************************** ** -** Copyright (C) 2017 Intel Corporation. +** Copyright (C) 2018 Intel Corporation. ** Copyright (C) 2016 The Qt Company Ltd. ** Copyright (C) 2013 Samuel Gaist ** Contact: https://www.qt.io/licensing/ @@ -88,7 +88,6 @@ extern "C" NSString *NSTemporaryDirectory(); #if defined(Q_OS_LINUX) # include -# include # include # include @@ -96,28 +95,6 @@ extern "C" NSString *NSTemporaryDirectory(); #ifndef FICLONE # define FICLONE _IOW(0x94, 9, int) #endif - -# if defined(Q_OS_ANDROID) -// renameat2() and statx() are disabled on Android because quite a few systems -// come with sandboxes that kill applications that make system calls outside a -// whitelist and several Android vendors can't be bothered to update the list. -# undef SYS_renameat2 -# undef SYS_statx -# undef STATX_BASIC_STATS -# else -# if !QT_CONFIG(renameat2) && defined(SYS_renameat2) -static int renameat2(int oldfd, const char *oldpath, int newfd, const char *newpath, unsigned flags) -{ return syscall(SYS_renameat2, oldfd, oldpath, newfd, newpath, flags); } -# endif - -# if !QT_CONFIG(statx) && defined(SYS_statx) -# include -static int statx(int dirfd, const char *pathname, int flag, unsigned mask, struct statx *statxbuf) -{ return syscall(SYS_statx, dirfd, pathname, flag, mask, statxbuf); } -# elif !QT_CONFIG(statx) && !defined(SYS_statx) -# undef STATX_BASIC_STATS -# endif -# endif // !Q_OS_ANDROID #endif #ifndef STATX_ALL @@ -331,22 +308,8 @@ mtime(const T &statBuffer, int) #ifdef STATX_BASIC_STATS static int qt_real_statx(int fd, const char *pathname, int flags, struct statx *statxBuffer) { -#ifdef Q_ATOMIC_INT8_IS_SUPPORTED - static QBasicAtomicInteger statxTested = Q_BASIC_ATOMIC_INITIALIZER(0); -#else - static QBasicAtomicInt statxTested = Q_BASIC_ATOMIC_INITIALIZER(0); -#endif - - if (statxTested.load() == -1) - return -ENOSYS; - unsigned mask = STATX_BASIC_STATS | STATX_BTIME; int ret = statx(fd, pathname, flags, mask, statxBuffer); - if (ret == -1 && errno == ENOSYS) { - statxTested.store(-1); - return -ENOSYS; - } - statxTested.store(1); return ret == -1 ? -errno : 0; } @@ -1282,14 +1245,12 @@ bool QFileSystemEngine::renameFile(const QFileSystemEntry &source, const QFileSy if (Q_UNLIKELY(srcPath.isEmpty() || tgtPath.isEmpty())) return emptyFileEntryWarning(), false; -#if defined(RENAME_NOREPLACE) && (QT_CONFIG(renameat2) || defined(SYS_renameat2)) +#if defined(RENAME_NOREPLACE) && QT_CONFIG(renameat2) if (renameat2(AT_FDCWD, srcPath, AT_FDCWD, tgtPath, RENAME_NOREPLACE) == 0) return true; - // If we're using syscall(), check for ENOSYS; - // if renameat2 came from libc, we don't accept ENOSYS. // We can also get EINVAL for some non-local filesystems. - if ((QT_CONFIG(renameat2) || errno != ENOSYS) && errno != EINVAL) { + if (errno != EINVAL) { error = QSystemError(errno, QSystemError::StandardLibraryError); return false; }