summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLars Knoll <[email protected]>2020-04-25 11:11:23 +0200
committerLars Knoll <[email protected]>2020-05-14 07:48:20 +0200
commit1cab047d088a397b00f5adc8febeac467fc4831d (patch)
treeb278b9b2e0a96e2ffcaefc44aabf6273271f57ef
parent940665eff5570323f4c00b61a4fc839b14cd823e (diff)
Remove QTextCodec dependency from QCoreGobalData
As we want to move text codecs out of Qt Core, disentangle the dependency, but moving the global codec data into qtextcodec.*. Change-Id: Id7498423c7c4f9f42fd00c450947305d2af8c4be Reviewed-by: Thiago Macieira <[email protected]> Reviewed-by: Alex Blasche <[email protected]>
-rw-r--r--src/corelib/codecs/qicucodec.cpp5
-rw-r--r--src/corelib/codecs/qtextcodec.cpp41
-rw-r--r--src/corelib/codecs/qtextcodec.h2
-rw-r--r--src/corelib/codecs/qtextcodec_p.h20
-rw-r--r--src/corelib/kernel/qcoreglobaldata.cpp14
-rw-r--r--src/corelib/kernel/qcoreglobaldata_p.h11
6 files changed, 52 insertions, 41 deletions
diff --git a/src/corelib/codecs/qicucodec.cpp b/src/corelib/codecs/qicucodec.cpp
index 295cbfe97f5..6feb8a20700 100644
--- a/src/corelib/codecs/qicucodec.cpp
+++ b/src/corelib/codecs/qicucodec.cpp
@@ -43,7 +43,6 @@
#include "qutfcodec_p.h"
#include "qlatincodec_p.h"
#include "qsimplecodec_p.h"
-#include "private/qcoreglobaldata_p.h"
#include "qdebug.h"
#include "unicode/ucnv.h"
@@ -436,7 +435,7 @@ QList<int> QIcuCodec::availableMibs()
QTextCodec *QIcuCodec::defaultCodecUnlocked()
{
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (!globalData)
return nullptr;
QTextCodec *c = globalData->codecForLocale.loadAcquire();
@@ -491,7 +490,7 @@ QTextCodec *QIcuCodec::codecForNameUnlocked(const char *name)
standardName = "windows-949";
}
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
QTextCodecCache *cache = &globalData->codecCache;
QTextCodec *codec;
diff --git a/src/corelib/codecs/qtextcodec.cpp b/src/corelib/codecs/qtextcodec.cpp
index 72f9dcc0a8a..be585d04070 100644
--- a/src/corelib/codecs/qtextcodec.cpp
+++ b/src/corelib/codecs/qtextcodec.cpp
@@ -53,7 +53,6 @@
#if !defined(QT_BOOTSTRAPPED)
#include <private/qcoreapplication_p.h>
#endif
-#include "private/qcoreglobaldata_p.h"
#include "qutfcodec_p.h"
#include "qlatincodec_p.h"
@@ -103,6 +102,28 @@ typedef QList<QByteArray>::ConstIterator ByteArrayListConstIt;
Q_GLOBAL_STATIC(QRecursiveMutex, textCodecsMutex);
+Q_GLOBAL_STATIC(QTextCodecData, textCodecData)
+
+QTextCodecData::QTextCodecData()
+ : codecForLocale(nullptr)
+{
+}
+
+QTextCodecData::~QTextCodecData()
+{
+ codecForLocale = nullptr;
+ QList<QTextCodec *> tmp = allCodecs;
+ allCodecs.clear();
+ codecCache.clear();
+ for (QList<QTextCodec *>::const_iterator it = tmp.constBegin(); it != tmp.constEnd(); ++it)
+ delete *it;
+}
+
+QTextCodecData *QTextCodecData::instance()
+{
+ return textCodecData();
+}
+
class TextCodecsMutexLocker
{
using Lock = decltype(qt_unique_lock(std::declval<QRecursiveMutex&>()));
@@ -166,7 +187,7 @@ static void setup();
// setCodecForLocale(0) is called at the same time.
static QTextCodec *setupLocaleMapper()
{
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
QTextCodec *locale = nullptr;
@@ -477,7 +498,7 @@ QTextCodec::QTextCodec()
{
const TextCodecsMutexLocker locker;
- QCoreGlobalData *globalInstance = QCoreGlobalData::instance();
+ QTextCodecData *globalInstance = QTextCodecData::instance();
if (globalInstance->allCodecs.isEmpty())
setup();
@@ -493,7 +514,7 @@ QTextCodec::QTextCodec()
*/
QTextCodec::~QTextCodec()
{
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (!globalData)
return;
@@ -534,7 +555,7 @@ QTextCodec *QTextCodec::codecForName(const QByteArray &name)
const TextCodecsMutexLocker locker;
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (!globalData)
return nullptr;
setup();
@@ -578,7 +599,7 @@ QTextCodec* QTextCodec::codecForMib(int mib)
{
const TextCodecsMutexLocker locker;
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (!globalData)
return nullptr;
if (globalData->allCodecs.isEmpty())
@@ -624,7 +645,7 @@ QList<QByteArray> QTextCodec::availableCodecs()
{
const TextCodecsMutexLocker locker;
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (globalData->allCodecs.isEmpty())
setup();
@@ -656,7 +677,7 @@ QList<int> QTextCodec::availableMibs()
#else
const TextCodecsMutexLocker locker;
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (globalData->allCodecs.isEmpty())
setup();
@@ -683,7 +704,7 @@ QList<int> QTextCodec::availableMibs()
*/
void QTextCodec::setCodecForLocale(QTextCodec *c)
{
- QCoreGlobalData::instance()->codecForLocale.storeRelease(c);
+ QTextCodecData::instance()->codecForLocale.storeRelease(c);
}
/*!
@@ -697,7 +718,7 @@ void QTextCodec::setCodecForLocale(QTextCodec *c)
QTextCodec* QTextCodec::codecForLocale()
{
- QCoreGlobalData *globalData = QCoreGlobalData::instance();
+ QTextCodecData *globalData = QTextCodecData::instance();
if (!globalData)
return nullptr;
diff --git a/src/corelib/codecs/qtextcodec.h b/src/corelib/codecs/qtextcodec.h
index 84e875c91f1..17dbd08a3ba 100644
--- a/src/corelib/codecs/qtextcodec.h
+++ b/src/corelib/codecs/qtextcodec.h
@@ -117,7 +117,7 @@ protected:
virtual ~QTextCodec();
private:
- friend struct QCoreGlobalData;
+ friend struct QTextCodecData;
};
class Q_CORE_EXPORT QTextEncoder {
diff --git a/src/corelib/codecs/qtextcodec_p.h b/src/corelib/codecs/qtextcodec_p.h
index ef5758619dd..d4b22c47548 100644
--- a/src/corelib/codecs/qtextcodec_p.h
+++ b/src/corelib/codecs/qtextcodec_p.h
@@ -53,19 +53,35 @@
#include <QtCore/private/qglobal_p.h>
#include <string.h>
+#include <qhash.h>
+#if QT_CONFIG(textcodec)
+#include "qtextcodec.h"
+#endif
QT_BEGIN_NAMESPACE
#if QT_CONFIG(textcodec)
-#include "qtextcodec.h"
-
#if defined(Q_OS_MAC) || defined(Q_OS_ANDROID) || defined(Q_OS_QNX) || defined(Q_OS_WASM)
#define QT_LOCALE_IS_UTF8
#endif
typedef void (*QTextCodecStateFreeFunction)(QTextCodec::ConverterState*);
+typedef QHash<QByteArray, QTextCodec *> QTextCodecCache;
+
+struct QTextCodecData
+{
+ QTextCodecData();
+ ~QTextCodecData();
+
+ QList<QTextCodec*> allCodecs;
+ QAtomicPointer<QTextCodec> codecForLocale;
+ QTextCodecCache codecCache;
+
+ static QTextCodecData *instance();
+};
+
bool qTextCodecNameMatch(const char *a, const char *b);
#else // without textcodec:
diff --git a/src/corelib/kernel/qcoreglobaldata.cpp b/src/corelib/kernel/qcoreglobaldata.cpp
index 7ff222f170d..4df5a40e39f 100644
--- a/src/corelib/kernel/qcoreglobaldata.cpp
+++ b/src/corelib/kernel/qcoreglobaldata.cpp
@@ -38,31 +38,17 @@
****************************************************************************/
#include "qcoreglobaldata_p.h"
-#if QT_CONFIG(textcodec)
-#include "qtextcodec.h"
-#endif
QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(QCoreGlobalData, globalInstance)
QCoreGlobalData::QCoreGlobalData()
-#if QT_CONFIG(textcodec)
- : codecForLocale(nullptr)
-#endif
{
}
QCoreGlobalData::~QCoreGlobalData()
{
-#if QT_CONFIG(textcodec)
- codecForLocale = nullptr;
- QList<QTextCodec *> tmp = allCodecs;
- allCodecs.clear();
- codecCache.clear();
- for (QList<QTextCodec *>::const_iterator it = tmp.constBegin(); it != tmp.constEnd(); ++it)
- delete *it;
-#endif
}
QCoreGlobalData *QCoreGlobalData::instance()
diff --git a/src/corelib/kernel/qcoreglobaldata_p.h b/src/corelib/kernel/qcoreglobaldata_p.h
index fda6b52b6ec..2b9677efd96 100644
--- a/src/corelib/kernel/qcoreglobaldata_p.h
+++ b/src/corelib/kernel/qcoreglobaldata_p.h
@@ -57,15 +57,10 @@
#include "QtCore/qreadwritelock.h"
#include "QtCore/qhash.h"
#include "QtCore/qbytearray.h"
-#if QT_CONFIG(textcodec)
-#include "QtCore/qtextcodec.h"
-#endif
#include "QtCore/qmutex.h"
QT_BEGIN_NAMESPACE
-typedef QHash<QByteArray, QTextCodec *> QTextCodecCache;
-
struct QCoreGlobalData {
QCoreGlobalData();
~QCoreGlobalData();
@@ -73,12 +68,6 @@ struct QCoreGlobalData {
QMap<QString, QStringList> dirSearchPaths;
QReadWriteLock dirSearchPathsLock;
-#if QT_CONFIG(textcodec)
- QList<QTextCodec*> allCodecs;
- QAtomicPointer<QTextCodec> codecForLocale;
- QTextCodecCache codecCache;
-#endif
-
static QCoreGlobalData *instance();
};