Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Toggle main menu visibility
Loading...
Searching...
No Matches
qlibrary_p.h
Go to the documentation of this file.
1
// Copyright (C) 2020 The Qt Company Ltd.
2
// Copyright (C) 2021 Intel Corporation.
3
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
// Qt-Security score:significant reason:default
5
6
#
ifndef
QLIBRARY_P_H
7
#
define
QLIBRARY_P_H
8
9
//
10
// W A R N I N G
11
// -------------
12
//
13
// This file is not part of the Qt API. It exists for the convenience
14
// of the QLibrary class. This header file may change from
15
// version to version without notice, or even be removed.
16
//
17
// We mean it.
18
//
19
20
#
include
"QtCore/qlibrary.h"
21
22
#
include
"QtCore/private/qplugin_p.h"
23
#
include
"QtCore/qloggingcategory.h"
24
#
include
"QtCore/qmutex.h"
25
#
include
"QtCore/qplugin.h"
26
#
include
"QtCore/qpointer.h"
27
#
include
"QtCore/qstringlist.h"
28
#
ifdef
Q_OS_WIN
29
#
include
"QtCore/qt_windows.h"
30
#
endif
31
32
#
include
<
memory
>
33
34
QT_REQUIRE_CONFIG
(
library
);
35
36
QT_BEGIN_NAMESPACE
37
38
Q_DECLARE_LOGGING_CATEGORY
(
qt_lcDebugPlugins
)
39
40
struct
QLibraryScanResult
41
{
42
qsizetype
pos
;
43
qsizetype
length
;
44
#
if
defined
(
Q_OF_MACH_O
)
45
bool
isEncrypted
=
false
;
46
#
endif
47
};
48
49
class
QLibraryStore
;
50
class
QLibraryPrivate
51
{
52
public
:
53
#
ifdef
Q_OS_WIN
54
using
Handle
=
HINSTANCE
;
55
#
else
56
using
Handle
=
void
*;
57
#
endif
58
enum
UnloadFlag
{
UnloadSys
,
NoUnloadSys
};
59
60
struct
Deleter
{
61
// QLibraryPrivate::release() is not, yet, and cannot easily be made, noexcept:
62
void
operator
()(
QLibraryPrivate
*p)
const
{ p
->
release
(
)
; }
63
};
64
using
UniquePtr
=
std
::unique_ptr<
QLibraryPrivate
,
Deleter
>;
65
66
const
QString
fileName
;
67
const
QString
fullVersion
;
68
69
bool
load
();
70
QtPluginInstanceFunction
loadPlugin
();
// loads and resolves instance
71
Q_AUTOTEST_EXPORT
bool
unload
(
UnloadFlag
flag =
UnloadSys
);
72
void
release
();
73
QFunctionPointer
resolve
(
const
char
*);
74
75
QLibrary
::
LoadHints
loadHints
()
const
76
{
return
QLibrary::LoadHints(loadHintsInt.loadRelaxed()); }
77
void
setLoadHints
(QLibrary::LoadHints lh);
78
QObject
*
pluginInstance
();
79
80
static
QLibraryPrivate
*
findOrCreate
(
const
QString &fileName,
const
QString &version = QString(),
81
QLibrary::LoadHints loadHints = { });
82
static
QStringList
suffixes_sys
(
const
QString &fullVersion);
83
static
constexpr
QStringView
prefix_sys
()
84
{
85
#
ifdef
Q_OS_WIN
86
return
{};
87
#
elif
defined
(
Q_OS_CYGWIN
)
88
return
u"cyg";
89
#
else
90
return
u"lib";
91
#
endif
92
}
93
94
QAtomicPointer
<
std
::
remove_pointer
<
QtPluginInstanceFunction
>::
type
>
instanceFactory
;
95
QAtomicPointer
<
std
::
remove_pointer
<
Handle
>::
type
>
pHnd
;
96
97
// the mutex protects the fields below
98
QMutex
mutex
;
99
QPointer
<
QObject
>
inst
;
// used by QFactoryLoader
100
QPluginParsedMetaData
metaData
;
101
QString
errorString
;
102
QString
qualifiedFileName
;
103
104
void
updatePluginState
();
105
bool
isPlugin
();
106
107
static
QLibraryPrivate
*
get
(QLibrary* lib)
108
{
109
return
lib->d.data();
110
}
111
112
private
:
113
explicit
QLibraryPrivate(
const
QString &canonicalFileName,
const
QString &version, QLibrary::LoadHints loadHints);
114
~QLibraryPrivate();
115
void
mergeLoadHints(QLibrary::LoadHints loadHints);
116
117
bool
load_sys();
118
bool
unload_sys();
119
QFunctionPointer resolve_sys(
const
char
*);
120
121
QAtomicInt loadHintsInt;
122
123
/// counts how many QLibrary or QPluginLoader are attached to us, plus 1 if it's loaded
124
QAtomicInt libraryRefCount;
125
/// counts how many times load() or loadPlugin() were called
126
QAtomicInt libraryUnloadCount;
127
128
enum
{ IsAPlugin, IsNotAPlugin, MightBeAPlugin } pluginState;
129
friend
class
QLibraryStore
;
130
};
131
132
QT_END_NAMESPACE
133
134
#
endif
// QLIBRARY_P_H
QLibraryPrivate
Definition
qlibrary_p.h:51
QLibraryPrivate::errorString
QString errorString
Definition
qlibrary_p.h:101
QLibraryPrivate::Handle
void * Handle
Definition
qlibrary_p.h:56
QLibraryPrivate::unload
Q_AUTOTEST_EXPORT bool unload(UnloadFlag flag=UnloadSys)
Definition
qlibrary.cpp:556
QLibraryPrivate::qualifiedFileName
QString qualifiedFileName
Definition
qlibrary_p.h:102
QLibraryPrivate::loadPlugin
QtPluginInstanceFunction loadPlugin()
Definition
qlibrary.cpp:583
QLibraryPrivate::pHnd
QAtomicPointer< std::remove_pointer< Handle >::type > pHnd
Definition
qlibrary_p.h:95
QLibraryPrivate::prefix_sys
static constexpr QStringView prefix_sys()
Definition
qlibrary_p.h:83
QLibraryPrivate::suffixes_sys
static QStringList suffixes_sys(const QString &fullVersion)
Definition
qlibrary_unix.cpp:34
QLibraryPrivate::setLoadHints
void setLoadHints(QLibrary::LoadHints lh)
Definition
qlibrary.cpp:487
QLibraryPrivate::fileName
const QString fileName
Definition
qlibrary_p.h:66
QLibraryPrivate::fullVersion
const QString fullVersion
Definition
qlibrary_p.h:67
QLibraryPrivate::updatePluginState
void updatePluginState()
Definition
qlibrary.cpp:724
QLibraryPrivate::release
void release()
Definition
qlibrary.cpp:578
QLibraryPrivate::instanceFactory
QAtomicPointer< std::remove_pointer< QtPluginInstanceFunction >::type > instanceFactory
Definition
qlibrary_p.h:94
QLibraryPrivate::metaData
QPluginParsedMetaData metaData
Definition
qlibrary_p.h:100
QLibraryPrivate::resolve
QFunctionPointer resolve(const char *)
Definition
qlibrary.cpp:480
QLibraryPrivate::isPlugin
bool isPlugin()
Definition
qlibrary.cpp:716
QLibraryPrivate::inst
QPointer< QObject > inst
Definition
qlibrary_p.h:99
QLibraryPrivate::UnloadFlag
UnloadFlag
Definition
qlibrary_p.h:58
QLibraryPrivate::NoUnloadSys
@ NoUnloadSys
Definition
qlibrary_p.h:58
QLibraryPrivate::UnloadSys
@ UnloadSys
Definition
qlibrary_p.h:58
QLibraryPrivate::UniquePtr
std::unique_ptr< QLibraryPrivate, Deleter > UniquePtr
Definition
qlibrary_p.h:64
QLibraryPrivate::pluginInstance
QObject * pluginInstance()
Definition
qlibrary.cpp:501
QLibraryPrivate::findOrCreate
static QLibraryPrivate * findOrCreate(const QString &fileName, const QString &version=QString(), QLibrary::LoadHints loadHints={ })
Definition
qlibrary.cpp:461
QLibraryPrivate::load
bool load()
Definition
qlibrary.cpp:528
QLibraryPrivate::get
static QLibraryPrivate * get(QLibrary *lib)
Definition
qlibrary_p.h:107
QLibraryPrivate::loadHints
QLibrary::LoadHints loadHints() const
Definition
qlibrary_p.h:75
QLibraryPrivate::mutex
QMutex mutex
Definition
qlibrary_p.h:98
QLibraryStore
Definition
qlibrary.cpp:315
std
[33]
Definition
src_corelib_tools_qhash.cpp:421
findSectionTable
static std::optional< size_t > findSectionTable(QByteArrayView data, const NtHeaders &ntHeaders, const ErrorMaker &error)
Definition
qcoffpeparser.cpp:259
ExpectedMachine
static QT_WARNING_PUSH const WORD ExpectedMachine
Definition
qcoffpeparser.cpp:43
findSectionName
static QLatin1StringView findSectionName(const IMAGE_SECTION_HEADER *section, QByteArrayView stringTable)
Definition
qcoffpeparser.cpp:313
checkNtHeaders
static std::optional< NtHeaders > checkNtHeaders(QByteArrayView data, const ErrorMaker &error)
Definition
qcoffpeparser.cpp:213
metadataSectionName
static constexpr auto metadataSectionName() noexcept
Definition
qcoffpeparser.cpp:26
peDebug
#define peDebug
Definition
qcoffpeparser.cpp:37
IncludeValidityChecks
static constexpr bool IncludeValidityChecks
Definition
qcoffpeparser.cpp:24
findStringTable
static std::optional< QByteArrayView > findStringTable(QByteArrayView data, const IMAGE_NT_HEADERS *ntHeader, const ErrorMaker &error)
Definition
qcoffpeparser.cpp:285
truncatedSectionName
static constexpr QLatin1StringView truncatedSectionName
Definition
qcoffpeparser.cpp:27
ExpectedOptionalHeaderSignature
static const WORD ExpectedOptionalHeaderSignature
Definition
qcoffpeparser.cpp:68
Q_DECLARE_LOGGING_CATEGORY
QT_BEGIN_NAMESPACE Q_DECLARE_LOGGING_CATEGORY(lcQIORing)
QT_REQUIRE_CONFIG
QT_REQUIRE_CONFIG(library)
QLibraryPrivate::Deleter
Definition
qlibrary_p.h:60
QLibraryPrivate::Deleter::operator()
void operator()(QLibraryPrivate *p) const
Definition
qlibrary_p.h:62
QLibraryScanResult
Definition
qlibrary_p.h:41
QLibraryScanResult::length
qsizetype length
Definition
qlibrary_p.h:43
QLibraryScanResult::pos
qsizetype pos
Definition
qlibrary_p.h:42
QT_WARNING_POP::NtHeaders
Definition
qcoffpeparser.cpp:206
QT_WARNING_POP::NtHeaders::offset
size_t offset
Definition
qcoffpeparser.cpp:208
QT_WARNING_POP::NtHeaders::h
IMAGE_NT_HEADERS h
Definition
qcoffpeparser.cpp:207
qtbase
src
corelib
plugin
qlibrary_p.h
Generated on
for Qt by
1.18.0