From 747bca3d67b019d0a6a9ae3df8e6703463201fe4 Mon Sep 17 00:00:00 2001 From: Joerg Bornemann Date: Mon, 24 Jan 2022 12:52:38 +0100 Subject: qmake: Scan source files with QFile The C API we've used so far underlies stronger restrictions regarding path length than QFile. Since qmake is not bootstrapped anymore, we can use QFile. Task-number: QTBUG-99791 Change-Id: Ic7765b0c09a8aa07c208c1b1d02efe0c54bb44f2 Reviewed-by: Dominik Holland Reviewed-by: Alexey Edelev --- qmake/generators/makefiledeps.cpp | 52 +++++++++------------------------------ 1 file changed, 11 insertions(+), 41 deletions(-) (limited to 'qmake') diff --git a/qmake/generators/makefiledeps.cpp b/qmake/generators/makefiledeps.cpp index b5a404de32..7ce47bdf72 100644 --- a/qmake/generators/makefiledeps.cpp +++ b/qmake/generators/makefiledeps.cpp @@ -29,6 +29,7 @@ #include "makefiledeps.h" #include "option.h" +#include #include #include #include @@ -40,16 +41,8 @@ # include #endif #include -#include -#include #include -#include -#include -#include #include -#if defined(_MSC_VER) && _MSC_VER >= 1400 -#include -#endif QT_BEGIN_NAMESPACE @@ -515,28 +508,17 @@ bool QMakeSourceFileInfo::findDeps(SourceFile *file) const QMakeLocalFileName sourceFile = fixPathForFile(file->file, true); - struct stat fst; char *buffer = nullptr; int buffer_len = 0; { - int fd; -#if defined(_MSC_VER) && _MSC_VER >= 1400 - if (_sopen_s(&fd, sourceFile.local().toLatin1().constData(), - _O_RDONLY, _SH_DENYNO, _S_IREAD) != 0) - fd = -1; -#else - fd = open(sourceFile.local().toLatin1().constData(), O_RDONLY); -#endif - if (fd == -1 || fstat(fd, &fst) || S_ISDIR(fst.st_mode)) { - if (fd != -1) - QT_CLOSE(fd); + QFile f(sourceFile.local()); + if (!f.open(QIODevice::ReadOnly)) return false; - } - buffer = getBuffer(fst.st_size); + const qint64 fs = f.size(); + buffer = getBuffer(fs); for(int have_read = 0; - (have_read = QT_READ(fd, buffer + buffer_len, fst.st_size - buffer_len)); + (have_read = f.read(buffer + buffer_len, fs - buffer_len)); buffer_len += have_read) ; - QT_CLOSE(fd); } if(!buffer) return false; @@ -901,25 +883,13 @@ bool QMakeSourceFileInfo::findMocs(SourceFile *file) int buffer_len = 0; char *buffer = nullptr; { - struct stat fst; - int fd; -#if defined(_MSC_VER) && _MSC_VER >= 1400 - if (_sopen_s(&fd, fixPathForFile(file->file, true).local().toLocal8Bit().constData(), - _O_RDONLY, _SH_DENYNO, _S_IREAD) != 0) - fd = -1; -#else - fd = open(fixPathForFile(file->file, true).local().toLocal8Bit().constData(), O_RDONLY); -#endif - if (fd == -1 || fstat(fd, &fst) || S_ISDIR(fst.st_mode)) { - if (fd != -1) - QT_CLOSE(fd); + QFile f(fixPathForFile(file->file, true).local()); + if (!f.open(QIODevice::ReadOnly)) return false; //shouldn't happen - } - buffer = getBuffer(fst.st_size); - while (int have_read = QT_READ(fd, buffer + buffer_len, fst.st_size - buffer_len)) + const qint64 fs = f.size(); + buffer = getBuffer(fs); + while (int have_read = f.read(buffer + buffer_len, fs - buffer_len)) buffer_len += have_read; - - QT_CLOSE(fd); } debug_msg(2, "findMocs: %s", file->file.local().toLatin1().constData()); -- cgit v1.2.3