diff options
Diffstat (limited to 'src/corelib/plugin')
-rw-r--r-- | src/corelib/plugin/plugin.pri | 4 | ||||
-rw-r--r-- | src/corelib/plugin/qelfparser_p.h | 2 | ||||
-rw-r--r-- | src/corelib/plugin/qfactoryloader.cpp | 12 | ||||
-rw-r--r-- | src/corelib/plugin/qlibrary.cpp | 8 | ||||
-rw-r--r-- | src/corelib/plugin/qlibrary_p.h | 1 | ||||
-rw-r--r-- | src/corelib/plugin/qlibrary_unix.cpp | 16 | ||||
-rw-r--r-- | src/corelib/plugin/qlibrary_win.cpp | 21 | ||||
-rw-r--r-- | src/corelib/plugin/qmachparser.cpp | 3 | ||||
-rw-r--r-- | src/corelib/plugin/qmachparser_p.h | 2 | ||||
-rw-r--r-- | src/corelib/plugin/qpluginloader.cpp | 5 | ||||
-rw-r--r-- | src/corelib/plugin/qsystemlibrary.cpp | 16 | ||||
-rw-r--r-- | src/corelib/plugin/qsystemlibrary_p.h | 6 | ||||
-rw-r--r-- | src/corelib/plugin/quuid.cpp | 37 | ||||
-rw-r--r-- | src/corelib/plugin/quuid.h | 6 | ||||
-rw-r--r-- | src/corelib/plugin/quuid_darwin.mm | 75 |
15 files changed, 31 insertions, 183 deletions
diff --git a/src/corelib/plugin/plugin.pri b/src/corelib/plugin/plugin.pri index 544dd41742..473480eb55 100644 --- a/src/corelib/plugin/plugin.pri +++ b/src/corelib/plugin/plugin.pri @@ -35,8 +35,4 @@ integrity { SOURCES += plugin/qlibrary_unix.cpp } -darwin { - OBJECTIVE_SOURCES += plugin/quuid_darwin.mm -} - !no-libdl: LIBS_PRIVATE += $$QMAKE_LIBS_DYNLOAD diff --git a/src/corelib/plugin/qelfparser_p.h b/src/corelib/plugin/qelfparser_p.h index 145f00df43..bcda19e8b5 100644 --- a/src/corelib/plugin/qelfparser_p.h +++ b/src/corelib/plugin/qelfparser_p.h @@ -52,7 +52,7 @@ // #include <qendian.h> -#include <qglobal.h> +#include <private/qglobal_p.h> #ifndef QT_NO_LIBRARY #if defined (Q_OF_ELF) && defined(Q_CC_GNU) diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp index 6cd02e3a3f..c09dc6c22b 100644 --- a/src/corelib/plugin/qfactoryloader.cpp +++ b/src/corelib/plugin/qfactoryloader.cpp @@ -108,7 +108,11 @@ void QFactoryLoader::update() if (!QDir(path).exists(QLatin1String("."))) continue; - QStringList plugins = QDir(path).entryList(QDir::Files); + QStringList plugins = QDir(path).entryList( +#ifdef Q_OS_WIN + QStringList(QStringLiteral("*.dll")), +#endif + QDir::Files); QLibraryPrivate *library = 0; #ifdef Q_OS_MAC @@ -187,10 +191,12 @@ void QFactoryLoader::update() ++keyUsageCount; } } - if (keyUsageCount || keys.isEmpty()) + if (keyUsageCount || keys.isEmpty()) { + library->setLoadHints(QLibrary::PreventUnloadHint); // once loaded, don't unload d->libraryList += library; - else + } else { library->release(); + } } } #else diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index 2b6c983cb8..93a901d614 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -621,12 +621,12 @@ bool QLibrary::isLibrary(const QString &fileName) QString completeSuffix = QFileInfo(fileName).completeSuffix(); if (completeSuffix.isEmpty()) return false; - QStringList suffixes = completeSuffix.split(QLatin1Char('.')); + const QVector<QStringRef> suffixes = completeSuffix.splitRef(QLatin1Char('.')); # if defined(Q_OS_DARWIN) // On Mac, libs look like libmylib.1.0.0.dylib - const QString lastSuffix = suffixes.at(suffixes.count() - 1); - const QString firstSuffix = suffixes.at(0); + const QStringRef &lastSuffix = suffixes.at(suffixes.count() - 1); + const QStringRef &firstSuffix = suffixes.at(0); bool valid = (lastSuffix == QLatin1String("dylib") || firstSuffix == QLatin1String("so") @@ -662,7 +662,7 @@ bool QLibrary::isLibrary(const QString &fileName) int suffix; int suffixPos = -1; for (suffix = 0; suffix < validSuffixList.count() && suffixPos == -1; ++suffix) - suffixPos = suffixes.indexOf(validSuffixList.at(suffix)); + suffixPos = suffixes.indexOf(QStringRef(&validSuffixList.at(suffix))); bool valid = suffixPos != -1; for (int i = suffixPos + 1; i < suffixes.count() && valid; ++i) diff --git a/src/corelib/plugin/qlibrary_p.h b/src/corelib/plugin/qlibrary_p.h index c3bdc5a832..f883e74843 100644 --- a/src/corelib/plugin/qlibrary_p.h +++ b/src/corelib/plugin/qlibrary_p.h @@ -52,6 +52,7 @@ // We mean it. // +#include <QtCore/private/qglobal_p.h> #include "QtCore/qlibrary.h" #include "QtCore/qpointer.h" #include "QtCore/qstringlist.h" diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp index f6a947b61a..9db0b7ff39 100644 --- a/src/corelib/plugin/qlibrary_unix.cpp +++ b/src/corelib/plugin/qlibrary_unix.cpp @@ -50,10 +50,6 @@ # include <private/qcore_mac_p.h> #endif -#if defined(QT_AOUT_UNDERSCORE) -#include <string.h> -#endif - #if (defined(Q_OS_VXWORKS) && !defined(VXWORKS_RTP)) || defined (Q_OS_NACL) #define QT_NO_DYNAMIC_LIBRARY #endif @@ -171,9 +167,6 @@ bool QLibraryPrivate::load_sys() } #if !defined(Q_OS_CYGWIN) else { -#if defined(Q_OS_MAC) - if (QSysInfo::MacintoshVersion >= QSysInfo::MV_10_4) -#endif dlFlags |= RTLD_LOCAL; } #endif @@ -308,14 +301,7 @@ Q_CORE_EXPORT QFunctionPointer qt_mac_resolve_sys(void *handle, const char *symb QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol) { -#if defined(QT_AOUT_UNDERSCORE) - // older a.out systems add an underscore in front of symbols - char* undrscr_symbol = new char[strlen(symbol)+2]; - undrscr_symbol[0] = '_'; - strcpy(undrscr_symbol+1, symbol); - QFunctionPointer address = QFunctionPointer(dlsym(pHnd, undrscr_symbol)); - delete [] undrscr_symbol; -#elif defined(QT_HPUX_LD) +#if defined(QT_HPUX_LD) QFunctionPointer address = 0; if (shl_findsym((shl_t*)&pHnd, symbol, TYPE_UNDEFINED, &address) < 0) address = 0; diff --git a/src/corelib/plugin/qlibrary_win.cpp b/src/corelib/plugin/qlibrary_win.cpp index 46fbba151c..48aa0cdbb6 100644 --- a/src/corelib/plugin/qlibrary_win.cpp +++ b/src/corelib/plugin/qlibrary_win.cpp @@ -71,15 +71,6 @@ bool QLibraryPrivate::load_sys() #endif // We make the following attempts at locating the library: // - // WinCE - // if (absolute) - // fileName - // fileName + ".dll" - // else - // fileName + ".dll" - // fileName - // QFileInfo(fileName).absoluteFilePath() - // // Windows // if (absolute) // fileName @@ -97,14 +88,10 @@ bool QLibraryPrivate::load_sys() // If the fileName is an absolute path we try that first, otherwise we // use the system-specific suffix first QFileSystemEntry fsEntry(fileName); - if (fsEntry.isAbsolute()) { + if (fsEntry.isAbsolute()) attempts.prepend(fileName); - } else { + else attempts.append(fileName); -#if defined(Q_OS_WINCE) - attempts.append(QFileInfo(fileName).absoluteFilePath()); -#endif - } #ifdef Q_OS_WINRT if (fileName.startsWith(QLatin1Char('/'))) attempts.prepend(QDir::rootPath() + fileName); @@ -176,11 +163,7 @@ bool QLibraryPrivate::unload_sys() QFunctionPointer QLibraryPrivate::resolve_sys(const char* symbol) { -#ifdef Q_OS_WINCE - FARPROC address = GetProcAddress(pHnd, (const wchar_t*)QString::fromLatin1(symbol).utf16()); -#else FARPROC address = GetProcAddress(pHnd, symbol); -#endif if (!address) { errorString = QLibrary::tr("Cannot resolve symbol \"%1\" in %2: %3").arg( QString::fromLatin1(symbol)).arg( diff --git a/src/corelib/plugin/qmachparser.cpp b/src/corelib/plugin/qmachparser.cpp index c136ef3797..a599fbcb23 100644 --- a/src/corelib/plugin/qmachparser.cpp +++ b/src/corelib/plugin/qmachparser.cpp @@ -59,6 +59,9 @@ static const cpu_type_t my_cputype = CPU_TYPE_X86; static const cpu_type_t my_cputype = CPU_TYPE_POWERPC64; #elif defined(Q_PROCESSOR_POWER_32) static const cpu_type_t my_cputype = CPU_TYPE_POWERPC; +#elif defined(Q_PROCESSOR_ARM_64) +# define MACHO64 +static const cpu_type_t my_cputype = CPU_TYPE_ARM64; #elif defined(Q_PROCESSOR_ARM) static const cpu_type_t my_cputype = CPU_TYPE_ARM; #else diff --git a/src/corelib/plugin/qmachparser_p.h b/src/corelib/plugin/qmachparser_p.h index 0df7a98f96..ff7eaadb70 100644 --- a/src/corelib/plugin/qmachparser_p.h +++ b/src/corelib/plugin/qmachparser_p.h @@ -52,7 +52,7 @@ // #include <qendian.h> -#include <qglobal.h> +#include <private/qglobal_p.h> #ifndef QT_NO_LIBRARY #if defined(Q_OF_MACH_O) diff --git a/src/corelib/plugin/qpluginloader.cpp b/src/corelib/plugin/qpluginloader.cpp index 62067c7ef7..4752f69ff3 100644 --- a/src/corelib/plugin/qpluginloader.cpp +++ b/src/corelib/plugin/qpluginloader.cpp @@ -154,6 +154,7 @@ QPluginLoader::QPluginLoader(const QString &fileName, QObject *parent) : QObject(parent), d(0), did_load(false) { setFileName(fileName); + setLoadHints(QLibrary::PreventUnloadHint); } /*! @@ -348,7 +349,7 @@ static QString locatePlugin(const QString& fileName) void QPluginLoader::setFileName(const QString &fileName) { #if defined(QT_SHARED) - QLibrary::LoadHints lh; + QLibrary::LoadHints lh = QLibrary::PreventUnloadHint; if (d) { lh = d->loadHints(); d->release(); @@ -394,7 +395,7 @@ QString QPluginLoader::errorString() const \brief Give the load() function some hints on how it should behave. You can give hints on how the symbols in the plugin are - resolved. By default, none of the hints are set. + resolved. By default since Qt 5.7, QLibrary::PreventUnloadHint is set. See the documentation of QLibrary::loadHints for a complete description of how this property works. diff --git a/src/corelib/plugin/qsystemlibrary.cpp b/src/corelib/plugin/qsystemlibrary.cpp index 178a33f987..7c80fbbd42 100644 --- a/src/corelib/plugin/qsystemlibrary.cpp +++ b/src/corelib/plugin/qsystemlibrary.cpp @@ -68,23 +68,11 @@ DLL Safe search mode is documented in the "Dynamic-Link Library Search Order" document on MSDN. - - Since library loading code is sometimes shared between Windows and WinCE, - this class can also be used on WinCE. However, its implementation just - calls the LoadLibrary() function. This is ok since it is documented as not - loading from the current directory on WinCE. This behaviour is documented - in the documentation for LoadLibrary for Windows CE at MSDN. - (http://msdn.microsoft.com/en-us/library/ms886736.aspx) */ QT_BEGIN_NAMESPACE -#if defined(Q_OS_WINCE) -HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirectory /* = true */) -{ - return ::LoadLibrary(libraryName); -} -#elif defined(Q_OS_WINRT) +#if defined(Q_OS_WINRT) HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirectory /* = true */) { Q_UNUSED(onlySystemDirectory); @@ -141,6 +129,6 @@ HINSTANCE QSystemLibrary::load(const wchar_t *libraryName, bool onlySystemDirect } -#endif //Q_OS_WINCE +#endif // Q_OS_WINRT QT_END_NAMESPACE diff --git a/src/corelib/plugin/qsystemlibrary_p.h b/src/corelib/plugin/qsystemlibrary_p.h index 469376d81b..4e093c0b7c 100644 --- a/src/corelib/plugin/qsystemlibrary_p.h +++ b/src/corelib/plugin/qsystemlibrary_p.h @@ -51,7 +51,7 @@ // We mean it. // -#include <QtCore/qglobal.h> +#include <QtCore/private/qglobal_p.h> #ifdef Q_OS_WIN # include <QtCore/qstring.h> # include <qt_windows.h> @@ -93,11 +93,7 @@ public: load(); if (!m_handle) return 0; -#ifdef Q_OS_WINCE - return QFunctionPointer(GetProcAddress(m_handle, (const wchar_t*)QString::fromLatin1(symbol).utf16())); -#else return QFunctionPointer(GetProcAddress(m_handle, symbol)); -#endif } static QFunctionPointer resolve(const QString &libraryName, const char *symbol) diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp index 5876bb84c3..f11ac6548b 100644 --- a/src/corelib/plugin/quuid.cpp +++ b/src/corelib/plugin/quuid.cpp @@ -809,39 +809,6 @@ QUuid::Version QUuid::version() const Q_DECL_NOTHROW return ver; } -/*! \fn QUuid QUuid::fromCFUUID(CFUUIDRef uuid) - \since 5.7 - - Constructs a new QUuid containing a copy of the \a uuid CFUUID. - - \note this function is only available on Apple platforms. -*/ - -/*! \fn CFUUIDRef QUuid::toCFUUID() const - \since 5.7 - - Creates a CFUUID from a QUuid. The caller owns the CFUUID and is - responsible for releasing it. - - \note this function is only available on Apple platforms. -*/ - -/*! \fn QUuid QUuid::fromNSUUID(const NSUUID *uuid) - \since 5.7 - - Constructs a new QUuid containing a copy of the \a uuid NSUUID. - - \note this function is only available on Apple platforms. -*/ - -/*! \fn NSUUID QUuid::toNSUUID() const - \since 5.7 - - Creates a NSUUID from a QUuid. The NSUUID is autoreleased. - - \note this function is only available on Apple platforms. -*/ - /*! \fn bool QUuid::operator<(const QUuid &other) const @@ -1002,7 +969,7 @@ QUuid QUuid::createUuid() { int *pseed = new int; static QBasicAtomicInt serial = Q_BASIC_ATOMIC_INITIALIZER(2); - qsrand(*pseed = QDateTime::currentDateTimeUtc().toTime_t() + qsrand(*pseed = QDateTime::currentSecsSinceEpoch() + quintptr(&pseed) + serial.fetchAndAddRelaxed(1)); uuidseed.setLocalData(pseed); @@ -1010,7 +977,7 @@ QUuid QUuid::createUuid() #else static bool seeded = false; if (!seeded) - qsrand(QDateTime::currentDateTimeUtc().toTime_t() + qsrand(QDateTime::currentSecsSinceEpoch() + quintptr(&seeded)); #endif diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h index a1d16b449e..264f572993 100644 --- a/src/corelib/plugin/quuid.h +++ b/src/corelib/plugin/quuid.h @@ -55,11 +55,9 @@ typedef struct _GUID #endif #endif -#ifdef Q_OS_DARWIN +#if defined(Q_OS_DARWIN) || defined(Q_QDOC) Q_FORWARD_DECLARE_CF_TYPE(CFUUID); -# ifdef __OBJC__ Q_FORWARD_DECLARE_OBJC_CLASS(NSUUID); -# endif #endif QT_BEGIN_NAMESPACE @@ -210,10 +208,8 @@ public: #if defined(Q_OS_DARWIN) || defined(Q_QDOC) static QUuid fromCFUUID(CFUUIDRef uuid); CFUUIDRef toCFUUID() const Q_DECL_CF_RETURNS_RETAINED; -# if defined(__OBJC__) || defined(Q_QDOC) static QUuid fromNSUUID(const NSUUID *uuid); NSUUID *toNSUUID() const Q_DECL_NS_RETURNS_AUTORELEASED; -# endif #endif uint data1; diff --git a/src/corelib/plugin/quuid_darwin.mm b/src/corelib/plugin/quuid_darwin.mm deleted file mode 100644 index c2a7240f3b..0000000000 --- a/src/corelib/plugin/quuid_darwin.mm +++ /dev/null @@ -1,75 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2016 The Qt Company Ltd. -** Contact: https://www.qt.io/licensing/ -** -** This file is part of the QtCore module of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** Commercial License Usage -** Licensees holding valid commercial Qt licenses may use this file in -** accordance with the commercial license agreement provided with the -** Software or, alternatively, in accordance with the terms contained in -** a written agreement between you and The Qt Company. For licensing terms -** and conditions see https://www.qt.io/terms-conditions. For further -** information use the contact form at https://www.qt.io/contact-us. -** -** GNU Lesser General Public License Usage -** Alternatively, this file may be used under the terms of the GNU Lesser -** General Public License version 3 as published by the Free Software -** Foundation and appearing in the file LICENSE.LGPL3 included in the -** packaging of this file. Please review the following information to -** ensure the GNU Lesser General Public License version 3 requirements -** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU -** General Public License version 2.0 or (at your option) the GNU General -** Public license version 3 or any later version approved by the KDE Free -** Qt Foundation. The licenses are as published by the Free Software -** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 -** included in the packaging of this file. Please review the following -** information to ensure the GNU General Public License requirements will -** be met: https://www.gnu.org/licenses/gpl-2.0.html and -** https://www.gnu.org/licenses/gpl-3.0.html. -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#include "quuid.h" - -#import <Foundation/Foundation.h> - -QT_BEGIN_NAMESPACE - -QUuid QUuid::fromCFUUID(CFUUIDRef uuid) -{ - if (!uuid) - return QUuid(); - const CFUUIDBytes bytes = CFUUIDGetUUIDBytes(uuid); - return QUuid::fromRfc4122(QByteArray::fromRawData(reinterpret_cast<const char *>(&bytes), sizeof(bytes))); -} - -CFUUIDRef QUuid::toCFUUID() const -{ - const QByteArray bytes = toRfc4122(); - return CFUUIDCreateFromUUIDBytes(0, *reinterpret_cast<const CFUUIDBytes *>(bytes.constData())); -} - -QUuid QUuid::fromNSUUID(const NSUUID *uuid) -{ - if (!uuid) - return QUuid(); - uuid_t bytes; - [uuid getUUIDBytes:bytes]; - return QUuid::fromRfc4122(QByteArray::fromRawData(reinterpret_cast<const char *>(bytes), sizeof(bytes))); -} - -NSUUID *QUuid::toNSUUID() const -{ - const QByteArray bytes = toRfc4122(); - return [[[NSUUID alloc] initWithUUIDBytes:*reinterpret_cast<const uuid_t *>(bytes.constData())] autorelease]; -} - -QT_END_NAMESPACE |