From d4302ec6936b8b3799a266b640b5d116b3296b29 Mon Sep 17 00:00:00 2001 From: Luca Bellonda Date: Wed, 13 Jul 2016 21:44:16 +0200 Subject: QtCore: Fix QXmlStreamReader for invalid characters in XML 1.0 The XML parser uses fastScanLiteralContent() to read a block of text. The routine was not checking the range of valid characters as defined in the XML standard: https://www.w3.org/TR/2008/REC-xml-20081126/#NT-Char A check has been added to stop reading the bad character. Note that the characters are legal in XML 1.1, but QXmlStreamReader is a well-formed XML 1.0 parser [ChangeLog][QtCore][QXmlStreamReader] Fixed a bug in the XML parser that prevented to load XML that contained invalid characters for XML 1.0. Change-Id: I10aaf84fbf95ccdaf9f6d683ea7c31925efff36d Reviewed-by: Thiago Macieira --- src/corelib/xml/qxmlstream.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp index a235145669..ef7d454dca 100644 --- a/src/corelib/xml/qxmlstream.cpp +++ b/src/corelib/xml/qxmlstream.cpp @@ -1175,6 +1175,10 @@ inline int QXmlStreamReaderPrivate::fastScanLiteralContent() } // fall through default: + if (c < 0x20) { + putChar(c); + return n; + } textBuffer += QChar(c); ++n; } -- cgit v1.2.3 From 92ccb76550316072801bc26d7e393db78577544a Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Tue, 14 Jun 2016 12:28:02 +0200 Subject: QUtcTimeZonePrivate::data - skip spurious invalid start state. Most fields were over-written after setting invalid. The two that weren't (not used by QUtcTimeZonePrivate) should be (if only for uniformity with other QTimeZonePrivate variants), so set them to sensible values. Change-Id: I824ca0108d5b6bc322f76a0d1683342f789523b1 Reviewed-by: Thiago Macieira --- src/corelib/tools/qtimezoneprivate.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/tools/qtimezoneprivate.cpp b/src/corelib/tools/qtimezoneprivate.cpp index be53a07591..01055bc2c0 100644 --- a/src/corelib/tools/qtimezoneprivate.cpp +++ b/src/corelib/tools/qtimezoneprivate.cpp @@ -650,10 +650,11 @@ QTimeZonePrivate *QUtcTimeZonePrivate::clone() QTimeZonePrivate::Data QUtcTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const { - Data d = invalidData(); + Data d; d.abbreviation = m_abbreviation; d.atMSecsSinceEpoch = forMSecsSinceEpoch; - d.offsetFromUtc = m_offsetFromUtc; + d.standardTimeOffset = d.offsetFromUtc = m_offsetFromUtc; + d.daylightTimeOffset = 0; return d; } -- cgit v1.2.3 From 975d21a8c9359dd073f5d1b116f63691565550f6 Mon Sep 17 00:00:00 2001 From: Edward Welbourne Date: Tue, 14 Jun 2016 12:33:28 +0200 Subject: QTzTimeZonePrivate: missing spaces for readability. Change-Id: If19669750fab89fbe0ac24d98b89fa1ea597fbb9 Reviewed-by: Thiago Macieira --- src/corelib/tools/qtimezoneprivate_tz.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp index bfa967e67b..29544a5c37 100644 --- a/src/corelib/tools/qtimezoneprivate_tz.cpp +++ b/src/corelib/tools/qtimezoneprivate_tz.cpp @@ -894,7 +894,7 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const { // If the required time is after the last transition and we have a POSIX rule then use it if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < forMSecsSinceEpoch - &&!m_posixRule.isEmpty() && forMSecsSinceEpoch >= 0) { + && !m_posixRule.isEmpty() && forMSecsSinceEpoch >= 0) { const int year = QDateTime::fromMSecsSinceEpoch(forMSecsSinceEpoch, Qt::UTC).date().year(); const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0; QVector posixTrans = calculatePosixTransitions(m_posixRule, year - 1, @@ -938,7 +938,7 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::nextTransition(qint64 afterMSecsSince { // If the required time is after the last transition and we have a POSIX rule then use it if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < afterMSecsSinceEpoch - &&!m_posixRule.isEmpty() && afterMSecsSinceEpoch >= 0) { + && !m_posixRule.isEmpty() && afterMSecsSinceEpoch >= 0) { const int year = QDateTime::fromMSecsSinceEpoch(afterMSecsSinceEpoch, Qt::UTC).date().year(); const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0; QVector posixTrans = calculatePosixTransitions(m_posixRule, year - 1, @@ -964,7 +964,7 @@ QTimeZonePrivate::Data QTzTimeZonePrivate::previousTransition(qint64 beforeMSecs { // If the required time is after the last transition and we have a POSIX rule then use it if (m_tranTimes.size() > 0 && m_tranTimes.last().atMSecsSinceEpoch < beforeMSecsSinceEpoch - &&!m_posixRule.isEmpty() && beforeMSecsSinceEpoch > 0) { + && !m_posixRule.isEmpty() && beforeMSecsSinceEpoch > 0) { const int year = QDateTime::fromMSecsSinceEpoch(beforeMSecsSinceEpoch, Qt::UTC).date().year(); const int lastMSecs = (m_tranTimes.size() > 0) ? m_tranTimes.last().atMSecsSinceEpoch : 0; QVector posixTrans = calculatePosixTransitions(m_posixRule, year - 1, -- cgit v1.2.3 From 9467bdc9093d9b02e249c6cce508b9df3ff8b2f4 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 20 Jun 2016 15:16:55 -0700 Subject: Update QLibrary's debug output when loading failed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We were printing 'loaded library "xxx"' even when ret == false, which was misleading. So instead print the error string. Change-Id: Ib57b52598e2f452985e9fffd1459ea860ed2dfcf Reviewed-by: Jędrzej Nowacki Reviewed-by: Oswald Buddenhagen --- src/corelib/plugin/qlibrary.cpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp index f7e57461e3..2b6c983cb8 100644 --- a/src/corelib/plugin/qlibrary.cpp +++ b/src/corelib/plugin/qlibrary.cpp @@ -536,8 +536,13 @@ bool QLibraryPrivate::load() return false; bool ret = load_sys(); - if (qt_debug_component()) - qDebug() << "loaded library" << fileName; + if (qt_debug_component()) { + if (ret) { + qDebug() << "loaded library" << fileName; + } else { + qDebug() << qUtf8Printable(errorString); + } + } if (ret) { //when loading a library we add a reference to it so that the QLibraryPrivate won't get deleted //this allows to unload the library at a later time -- cgit v1.2.3 From ea582cdcbf8c5b94f9baf5bffdbedc622d39ed9f Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Wed, 15 Jun 2016 13:57:23 -0700 Subject: Work around Apple defining "check" The header says they'll stop doing that in the next release. It's been like that since at least the OS X 10.8 SDK... Change-Id: Ib57b52598e2f452985e9fffd14585d4838dc8b09 Reviewed-by: Richard J. Moore --- src/corelib/kernel/qeventdispatcher_unix_p.h | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h index df080809b6..32c9de03fa 100644 --- a/src/corelib/kernel/qeventdispatcher_unix_p.h +++ b/src/corelib/kernel/qeventdispatcher_unix_p.h @@ -84,6 +84,11 @@ public: }; +#ifdef check +// defined in Apple's /usr/include/AssertMacros.h header +# undef check +#endif + class QEventDispatcherUNIXPrivate; #ifdef Q_OS_QNX -- cgit v1.2.3 From 902a5e7aaa0ec156d19b5a7988eff1809a6a2046 Mon Sep 17 00:00:00 2001 From: Alex Trotsenko Date: Fri, 17 Jun 2016 15:07:26 +0300 Subject: QDataStream: adjust containers' deserialization in transaction mode If an error occurs during the transaction, we should prevent the containers from being successfully read. So, check the status of the stream before reading the container, because the deserialization procedure temporarily resets it on entry. Task-number: QTBUG-54022 Change-Id: Ie955c2fa3e449374f0f8403f00e487efa2bfdaf3 Reviewed-by: Oswald Buddenhagen Reviewed-by: Edward Welbourne --- src/corelib/io/qdatastream.h | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h index 260dd519e3..e8634fddef 100644 --- a/src/corelib/io/qdatastream.h +++ b/src/corelib/io/qdatastream.h @@ -63,6 +63,9 @@ template class QMap; #if !defined(QT_NO_DATASTREAM) || defined(QT_BOOTSTRAPPED) class QDataStreamPrivate; +namespace QtPrivate { +class StreamStateSaver; +} class Q_CORE_EXPORT QDataStream { public: @@ -192,6 +195,7 @@ private: Status q_status; int readBlock(char *data, int len); + friend class QtPrivate::StreamStateSaver; }; namespace QtPrivate { @@ -201,7 +205,8 @@ class StreamStateSaver public: inline StreamStateSaver(QDataStream *s) : stream(s), oldStatus(s->status()) { - stream->resetStatus(); + if (!stream->dev || !stream->dev->isTransactionStarted()) + stream->resetStatus(); } inline ~StreamStateSaver() { -- cgit v1.2.3 From cc119dee73c6cc46abf8d779a91f0ccad3ce1bd7 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Fri, 27 May 2016 15:59:16 +0300 Subject: Workaround clang explicit specializations function templates export bug Should be reverted when https://github.com/android-ndk/ndk/issues/34 is fixed Change-Id: Ic7fe394412afc25082a9689da59d36cba8b3dade Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/kernel/qjni.cpp | 300 ++++++++++++++++++++++---------------------- 1 file changed, 150 insertions(+), 150 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qjni.cpp b/src/corelib/kernel/qjni.cpp index 108a01aab7..5a894907a4 100644 --- a/src/corelib/kernel/qjni.cpp +++ b/src/corelib/kernel/qjni.cpp @@ -470,7 +470,7 @@ QJNIObjectPrivate::QJNIObjectPrivate(jobject obj) env->DeleteLocalRef(cls); } template <> -void QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT void QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jmethodID id = getCachedMethodID(env, d->m_jclass, d->m_className, methodName, sig); @@ -480,7 +480,7 @@ void QJNIObjectPrivate::callMethodV(const char *methodName, const char *si } template <> -void QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT void QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -489,7 +489,7 @@ void QJNIObjectPrivate::callMethod(const char *methodName, const char *sig } template <> -jboolean QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jboolean res = 0; @@ -501,7 +501,7 @@ jboolean QJNIObjectPrivate::callMethodV(const char *methodName, const } template <> -jboolean QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -511,7 +511,7 @@ jboolean QJNIObjectPrivate::callMethod(const char *methodName, const c } template <> -jbyte QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jbyte res = 0; @@ -523,7 +523,7 @@ jbyte QJNIObjectPrivate::callMethodV(const char *methodName, const char * } template <> -jbyte QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -533,7 +533,7 @@ jbyte QJNIObjectPrivate::callMethod(const char *methodName, const char *s } template <> -jchar QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jchar QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jchar res = 0; @@ -545,7 +545,7 @@ jchar QJNIObjectPrivate::callMethodV(const char *methodName, const char * } template <> -jchar QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jchar QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -555,7 +555,7 @@ jchar QJNIObjectPrivate::callMethod(const char *methodName, const char *s } template <> -jshort QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jshort QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jshort res = 0; @@ -567,7 +567,7 @@ jshort QJNIObjectPrivate::callMethodV(const char *methodName, const char } template <> -jshort QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jshort QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -577,7 +577,7 @@ jshort QJNIObjectPrivate::callMethod(const char *methodName, const char } template <> -jint QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jint QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jint res = 0; @@ -589,7 +589,7 @@ jint QJNIObjectPrivate::callMethodV(const char *methodName, const char *si } template <> -jint QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jint QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -599,7 +599,7 @@ jint QJNIObjectPrivate::callMethod(const char *methodName, const char *sig } template <> -jlong QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jlong QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jlong res = 0; @@ -611,7 +611,7 @@ jlong QJNIObjectPrivate::callMethodV(const char *methodName, const char * } template <> -jlong QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jlong QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -621,7 +621,7 @@ jlong QJNIObjectPrivate::callMethod(const char *methodName, const char *s } template <> -jfloat QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jfloat res = 0.f; @@ -633,7 +633,7 @@ jfloat QJNIObjectPrivate::callMethodV(const char *methodName, const char } template <> -jfloat QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -643,7 +643,7 @@ jfloat QJNIObjectPrivate::callMethod(const char *methodName, const char } template <> -jdouble QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callMethodV(const char *methodName, const char *sig, va_list args) const { QJNIEnvironmentPrivate env; jdouble res = 0.; @@ -655,7 +655,7 @@ jdouble QJNIObjectPrivate::callMethodV(const char *methodName, const ch } template <> -jdouble QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callMethod(const char *methodName, const char *sig, ...) const { va_list args; va_start(args, sig); @@ -665,61 +665,61 @@ jdouble QJNIObjectPrivate::callMethod(const char *methodName, const cha } template <> -void QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT void QJNIObjectPrivate::callMethod(const char *methodName) const { callMethod(methodName, "()V"); } template <> -jboolean QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()Z"); } template <> -jbyte QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()B"); } template <> -jchar QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jchar QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()C"); } template <> -jshort QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jshort QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()S"); } template <> -jint QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jint QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()I"); } template <> -jlong QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jlong QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()J"); } template <> -jfloat QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()F"); } template <> -jdouble QJNIObjectPrivate::callMethod(const char *methodName) const +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callMethod(const char *methodName) const { return callMethod(methodName, "()D"); } template <> -void QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -735,7 +735,7 @@ void QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -void QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -747,7 +747,7 @@ void QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -void QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -760,7 +760,7 @@ void QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -void QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -772,7 +772,7 @@ void QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jboolean QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -791,7 +791,7 @@ jboolean QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jboolean QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -804,7 +804,7 @@ jboolean QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jboolean QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -820,7 +820,7 @@ jboolean QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jboolean QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -833,7 +833,7 @@ jboolean QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jbyte QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -852,7 +852,7 @@ jbyte QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jbyte QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -865,7 +865,7 @@ jbyte QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jbyte QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -881,7 +881,7 @@ jbyte QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jbyte QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -894,7 +894,7 @@ jbyte QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jchar QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jchar QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -913,7 +913,7 @@ jchar QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jchar QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jchar QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -926,7 +926,7 @@ jchar QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jchar QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jchar QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -942,7 +942,7 @@ jchar QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jchar QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jchar QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -955,7 +955,7 @@ jchar QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jshort QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jshort QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -974,7 +974,7 @@ jshort QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jshort QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jshort QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -987,7 +987,7 @@ jshort QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jshort QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jshort QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -1003,7 +1003,7 @@ jshort QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jshort QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jshort QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -1016,7 +1016,7 @@ jshort QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jint QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jint QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -1035,7 +1035,7 @@ jint QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jint QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jint QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -1048,7 +1048,7 @@ jint QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jint QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jint QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -1064,7 +1064,7 @@ jint QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jint QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jint QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -1077,7 +1077,7 @@ jint QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jlong QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jlong QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -1096,7 +1096,7 @@ jlong QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jlong QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jlong QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -1109,7 +1109,7 @@ jlong QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jlong QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jlong QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -1125,7 +1125,7 @@ jlong QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jlong QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jlong QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -1138,7 +1138,7 @@ jlong QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jfloat QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -1157,7 +1157,7 @@ jfloat QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jfloat QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -1170,7 +1170,7 @@ jfloat QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jfloat QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -1186,7 +1186,7 @@ jfloat QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jfloat QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -1199,7 +1199,7 @@ jfloat QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -jdouble QJNIObjectPrivate::callStaticMethodV(const char *className, +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callStaticMethodV(const char *className, const char *methodName, const char *sig, va_list args) @@ -1218,7 +1218,7 @@ jdouble QJNIObjectPrivate::callStaticMethodV(const char *className, } template <> -jdouble QJNIObjectPrivate::callStaticMethod(const char *className, +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName, const char *sig, ...) @@ -1231,7 +1231,7 @@ jdouble QJNIObjectPrivate::callStaticMethod(const char *className, } template <> -jdouble QJNIObjectPrivate::callStaticMethodV(jclass clazz, +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callStaticMethodV(jclass clazz, const char *methodName, const char *sig, va_list args) @@ -1247,7 +1247,7 @@ jdouble QJNIObjectPrivate::callStaticMethodV(jclass clazz, } template <> -jdouble QJNIObjectPrivate::callStaticMethod(jclass clazz, +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName, const char *sig, ...) @@ -1260,109 +1260,109 @@ jdouble QJNIObjectPrivate::callStaticMethod(jclass clazz, } template <> -void QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT void QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { callStaticMethod(className, methodName, "()V"); } template <> -void QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT void QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { callStaticMethod(clazz, methodName, "()V"); } template <> -jboolean QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()Z"); } template <> -jboolean QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jboolean QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()Z"); } template <> -jbyte QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()B"); } template <> -jbyte QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jbyte QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()B"); } template <> -jchar QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jchar QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()C"); } template <> -jchar QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jchar QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()C"); } template <> -jshort QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jshort QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()S"); } template <> -jshort QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jshort QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()S"); } template <> -jint QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jint QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()I"); } template <> -jint QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jint QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()I"); } template <> -jlong QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jlong QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()J"); } template <> -jlong QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jlong QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()J"); } template <> -jfloat QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()F"); } template <> -jfloat QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jfloat QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()F"); } template <> -jdouble QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callStaticMethod(const char *className, const char *methodName) { return callStaticMethod(className, methodName, "()D"); } template <> -jdouble QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) +Q_CORE_EXPORT jdouble QJNIObjectPrivate::callStaticMethod(jclass clazz, const char *methodName) { return callStaticMethod(clazz, methodName, "()D"); } @@ -1397,49 +1397,49 @@ QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName, } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()Ljava/lang/String;"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[Z"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[B"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[S"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[I"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[J"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[F"); } template <> -QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const +Q_CORE_EXPORT QJNIObjectPrivate QJNIObjectPrivate::callObjectMethod(const char *methodName) const { return callObjectMethod(methodName, "()[D"); } @@ -1510,7 +1510,7 @@ QJNIObjectPrivate QJNIObjectPrivate::callStaticObjectMethod(jclass clazz, } template <> -jboolean QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jboolean QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jboolean res = 0; @@ -1522,7 +1522,7 @@ jboolean QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jbyte QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jbyte QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jbyte res = 0; @@ -1534,7 +1534,7 @@ jbyte QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jchar QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jchar QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jchar res = 0; @@ -1546,7 +1546,7 @@ jchar QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jshort QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jshort QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jshort res = 0; @@ -1558,7 +1558,7 @@ jshort QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jint QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jint QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jint res = 0; @@ -1570,7 +1570,7 @@ jint QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jlong QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jlong QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jlong res = 0; @@ -1582,7 +1582,7 @@ jlong QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jfloat QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jfloat QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jfloat res = 0.f; @@ -1594,7 +1594,7 @@ jfloat QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jdouble QJNIObjectPrivate::getField(const char *fieldName) const +Q_CORE_EXPORT jdouble QJNIObjectPrivate::getField(const char *fieldName) const { QJNIEnvironmentPrivate env; jdouble res = 0.; @@ -1606,7 +1606,7 @@ jdouble QJNIObjectPrivate::getField(const char *fieldName) const } template <> -jboolean QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jboolean QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jboolean res = 0; @@ -1618,7 +1618,7 @@ jboolean QJNIObjectPrivate::getStaticField(jclass clazz, const char *f } template <> -jboolean QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jboolean QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1633,7 +1633,7 @@ jboolean QJNIObjectPrivate::getStaticField(const char *className, cons } template <> -jbyte QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jbyte QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jbyte res = 0; @@ -1645,7 +1645,7 @@ jbyte QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldNa } template <> -jbyte QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jbyte QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1660,7 +1660,7 @@ jbyte QJNIObjectPrivate::getStaticField(const char *className, const char } template <> -jchar QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jchar QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jchar res = 0; @@ -1672,7 +1672,7 @@ jchar QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldNa } template <> -jchar QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jchar QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1687,7 +1687,7 @@ jchar QJNIObjectPrivate::getStaticField(const char *className, const char } template <> -jshort QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jshort QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jshort res = 0; @@ -1699,7 +1699,7 @@ jshort QJNIObjectPrivate::getStaticField(jclass clazz, const char *field } template <> -jshort QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jshort QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1714,7 +1714,7 @@ jshort QJNIObjectPrivate::getStaticField(const char *className, const ch } template <> -jint QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jint QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jint res = 0; @@ -1726,7 +1726,7 @@ jint QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName } template <> -jint QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jint QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1741,7 +1741,7 @@ jint QJNIObjectPrivate::getStaticField(const char *className, const char * } template <> -jlong QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jlong QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jlong res = 0; @@ -1753,7 +1753,7 @@ jlong QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldNa } template <> -jlong QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jlong QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1768,7 +1768,7 @@ jlong QJNIObjectPrivate::getStaticField(const char *className, const char } template <> -jfloat QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jfloat QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jfloat res = 0.f; @@ -1780,7 +1780,7 @@ jfloat QJNIObjectPrivate::getStaticField(jclass clazz, const char *field } template <> -jfloat QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jfloat QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1795,7 +1795,7 @@ jfloat QJNIObjectPrivate::getStaticField(const char *className, const ch } template <> -jdouble QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) +Q_CORE_EXPORT jdouble QJNIObjectPrivate::getStaticField(jclass clazz, const char *fieldName) { QJNIEnvironmentPrivate env; jdouble res = 0.; @@ -1807,7 +1807,7 @@ jdouble QJNIObjectPrivate::getStaticField(jclass clazz, const char *fie } template <> -jdouble QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) +Q_CORE_EXPORT jdouble QJNIObjectPrivate::getStaticField(const char *className, const char *fieldName) { QJNIEnvironmentPrivate env; jclass clazz = loadClass(className, env); @@ -1879,7 +1879,7 @@ QJNIObjectPrivate QJNIObjectPrivate::getStaticObjectField(jclass clazz, } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jboolean value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jboolean value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "Z"); @@ -1889,7 +1889,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jboolean value } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jbyte value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jbyte value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "B"); @@ -1899,7 +1899,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jbyte value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jchar value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jchar value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "C"); @@ -1909,7 +1909,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jchar value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jshort value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jshort value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "S"); @@ -1919,7 +1919,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jshort value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jint value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jint value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "I"); @@ -1929,7 +1929,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jint value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jlong value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jlong value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "J"); @@ -1939,7 +1939,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jlong value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jfloat value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jfloat value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "F"); @@ -1949,7 +1949,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jfloat value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jdouble value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jdouble value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "D"); @@ -1959,7 +1959,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jdouble value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jbooleanArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jbooleanArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[Z"); @@ -1969,7 +1969,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jbooleanA } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jbyteArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jbyteArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[B"); @@ -1979,7 +1979,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jbyteArray v } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jcharArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jcharArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[C"); @@ -1989,7 +1989,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jcharArray v } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jshortArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jshortArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[S"); @@ -1999,7 +1999,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jshortArray } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jintArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jintArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[I"); @@ -2009,7 +2009,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jintArray val } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jlongArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jlongArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[J"); @@ -2019,7 +2019,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jlongArray v } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jfloatArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jfloatArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[F"); @@ -2029,7 +2029,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jfloatArray } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jdoubleArray value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jdoubleArray value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "[D"); @@ -2039,7 +2039,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jdoubleArr } template <> -void QJNIObjectPrivate::setField(const char *fieldName, jstring value) +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, jstring value) { QJNIEnvironmentPrivate env; jfieldID id = getCachedFieldID(env, d->m_jclass, d->m_className, fieldName, "Ljava/lang/String;"); @@ -2049,7 +2049,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, jstring value) } template <> -void QJNIObjectPrivate::setField(const char *fieldName, +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, const char *sig, jobject value) { @@ -2061,7 +2061,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, } template <> -void QJNIObjectPrivate::setField(const char *fieldName, +Q_CORE_EXPORT void QJNIObjectPrivate::setField(const char *fieldName, const char *sig, jobjectArray value) { @@ -2073,7 +2073,7 @@ void QJNIObjectPrivate::setField(const char *fieldName, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jboolean value) { @@ -2084,7 +2084,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jboolean value) { @@ -2101,7 +2101,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jbyte value) { @@ -2112,7 +2112,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jbyte value) { @@ -2129,7 +2129,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jchar value) { @@ -2140,7 +2140,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jchar value) { @@ -2157,7 +2157,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jshort value) { @@ -2168,7 +2168,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jshort value) { @@ -2185,7 +2185,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jint value) { @@ -2196,7 +2196,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jint value) { @@ -2213,7 +2213,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jlong value) { @@ -2224,7 +2224,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jlong value) { @@ -2241,7 +2241,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jfloat value) { @@ -2252,7 +2252,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jfloat value) { @@ -2269,7 +2269,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, jdouble value) { @@ -2280,7 +2280,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, jdouble value) { @@ -2297,7 +2297,7 @@ void QJNIObjectPrivate::setStaticField(const char *className, } template <> -void QJNIObjectPrivate::setStaticField(jclass clazz, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(jclass clazz, const char *fieldName, const char *sig, jobject value) @@ -2309,7 +2309,7 @@ void QJNIObjectPrivate::setStaticField(jclass clazz, } template <> -void QJNIObjectPrivate::setStaticField(const char *className, +Q_CORE_EXPORT void QJNIObjectPrivate::setStaticField(const char *className, const char *fieldName, const char *sig, jobject value) -- cgit v1.2.3 From c14c149b51a1c7bf01e4e039f6e8cf1819e37ca6 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Tue, 19 Jul 2016 10:18:39 +0200 Subject: Fix QTemporaryDir to handle Unicode characters on Windows For platforms not providing mkdtemp(), QTemporaryDir relied on an implementation of q_mkdtemp() operating on char *, converting back and forth using QFile::encodeName()/decodeName() when passing the name to QFileSystemEngine. This caused failures on Windows (which uses "System"/Latin1 encoding) for names containing characters outside the Latin1 space. Reimplement q_mkdtemp() to operate on QString, which avoids the conversions altogether and also enables the use of larger character spaces for the pattern. Add tests. Task-number: QTBUG-54810 Change-Id: Ie4323ad73b5beb8a1b8ab81425f73d03c626d58a Reviewed-by: Thiago Macieira --- src/corelib/io/qtemporarydir.cpp | 52 +++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 22 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/io/qtemporarydir.cpp b/src/corelib/io/qtemporarydir.cpp index 71436c6497..d869318e35 100644 --- a/src/corelib/io/qtemporarydir.cpp +++ b/src/corelib/io/qtemporarydir.cpp @@ -44,8 +44,12 @@ #include "qcoreapplication.h" #endif +#if !defined(Q_OS_QNX) && !defined(Q_OS_WIN) &&!defined(Q_OS_ANDROID) +# define USE_SYSTEM_MKDTEMP +#endif + #include // mkdtemp -#if defined(Q_OS_QNX) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) +#ifndef USE_SYSTEM_MKDTEMP #include #endif @@ -91,8 +95,7 @@ static QString defaultTemplateName() return QDir::tempPath() + QLatin1Char('/') + baseName + QLatin1String("-XXXXXX"); } -#if defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) - +#ifndef USE_SYSTEM_MKDTEMP static int nextRand(int &v) { int r = v % 62; @@ -102,30 +105,28 @@ static int nextRand(int &v) return r; } -QPair q_mkdtemp(char *templateName) +QPair q_mkdtemp(QString templateName) { - static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; + Q_ASSERT(templateName.endsWith(QLatin1String("XXXXXX"))); - const size_t length = strlen(templateName); + static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; - char *XXXXXX = templateName + length - 6; + const int length = templateName.size(); - Q_ASSERT((length >= 6u) && strncmp(XXXXXX, "XXXXXX", 6) == 0); + QChar *XXXXXX = templateName.data() + length - 6; for (int i = 0; i < 256; ++i) { int v = qrand(); /* Fill in the random bits. */ - XXXXXX[0] = letters[nextRand(v)]; - XXXXXX[1] = letters[nextRand(v)]; - XXXXXX[2] = letters[nextRand(v)]; - XXXXXX[3] = letters[nextRand(v)]; - XXXXXX[4] = letters[nextRand(v)]; - XXXXXX[5] = letters[v % 62]; - - QString templateNameStr = QFile::decodeName(templateName); - - QFileSystemEntry fileSystemEntry(templateNameStr); + XXXXXX[0] = QLatin1Char(letters[nextRand(v)]); + XXXXXX[1] = QLatin1Char(letters[nextRand(v)]); + XXXXXX[2] = QLatin1Char(letters[nextRand(v)]); + XXXXXX[3] = QLatin1Char(letters[nextRand(v)]); + XXXXXX[4] = QLatin1Char(letters[nextRand(v)]); + XXXXXX[5] = QLatin1Char(letters[v % 62]); + + QFileSystemEntry fileSystemEntry(templateName); if (QFileSystemEngine::createDirectory(fileSystemEntry, false)) { QSystemError error; QFileSystemEngine::setPermissions(fileSystemEntry, @@ -134,10 +135,10 @@ QPair q_mkdtemp(char *templateName) QFile::ExeOwner, error); if (error.error() != 0) { if (!QFileSystemEngine::removeDirectory(fileSystemEntry, false)) - qWarning() << "Unable to remove unused directory" << templateNameStr; + qWarning() << "Unable to remove unused directory" << templateName; continue; } - return qMakePair(QFile::decodeName(templateName), true); + return qMakePair(templateName, true); } # ifdef Q_OS_WIN const int exists = ERROR_ALREADY_EXISTS; @@ -152,7 +153,7 @@ QPair q_mkdtemp(char *templateName) return qMakePair(qt_error_string(), false); } -#else // defined(Q_OS_QNX ) || defined(Q_OS_WIN) || defined(Q_OS_ANDROID) +#else // !USE_SYSTEM_MKDTEMP QPair q_mkdtemp(char *templateName) { @@ -160,14 +161,21 @@ QPair q_mkdtemp(char *templateName) return qMakePair(ok ? QFile::decodeName(templateName) : qt_error_string(), ok); } -#endif +#endif // USE_SYSTEM_MKDTEMP void QTemporaryDirPrivate::create(const QString &templateName) { +#ifndef USE_SYSTEM_MKDTEMP + QString buffer = templateName; + if (!buffer.endsWith(QLatin1String("XXXXXX"))) + buffer += QLatin1String("XXXXXX"); + const QPair result = q_mkdtemp(buffer); +#else // !USE_SYSTEM_MKDTEMP QByteArray buffer = QFile::encodeName(templateName); if (!buffer.endsWith("XXXXXX")) buffer += "XXXXXX"; QPair result = q_mkdtemp(buffer.data()); // modifies buffer +#endif // USE_SYSTEM_MKDTEMP pathOrError = result.first; success = result.second; } -- cgit v1.2.3 From e6034a4740756334317ab2445b518a645930f4f4 Mon Sep 17 00:00:00 2001 From: BogDan Vatra Date: Wed, 20 Jul 2016 14:56:01 +0300 Subject: Make sure JNI_OnLoad is not called more than once Since Android 5.0 Google introduce a nasty bug[1] which calls JNI_OnLoad more than once. Basically every time when a library is loaded JNI_OnLoad is called if found, but it calls *again* JNI_OnLoad of its .so dependencies! So, JNI_OnLoad of libQt5Core.so gets called may times, this is not a problem as long as it's called from Qt's java delegate class loader. The problem is that the application .so file *must* be called from default class loader to allow the user to find his custom Activity/Service stuff. [1] Workaround https://code.google.com/p/android/issues/detail?id=215069 Change-Id: Ia71209658ef56056b560018597608acf7cb0f9ea Reviewed-by: Eskil Abrahamsen Blomfeldt --- src/corelib/kernel/qjnionload.cpp | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qjnionload.cpp b/src/corelib/kernel/qjnionload.cpp index 0f7b4b69ef..3bfcf3e666 100644 --- a/src/corelib/kernel/qjnionload.cpp +++ b/src/corelib/kernel/qjnionload.cpp @@ -38,6 +38,11 @@ Q_CORE_EXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { Q_UNUSED(reserved) + static bool initialized = false; + if (initialized) + return JNI_VERSION_1_6; + initialized = true; + typedef union { JNIEnv *nenv; void *venv; -- cgit v1.2.3 From 0696566b1e19c8178e00c0d14f185935e17d9e8b Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Wed, 20 Jul 2016 16:49:33 +0200 Subject: Windows: Fix truncation in QFSFileEnginePrivate::nativeWrite() The number of bytes to write was converted to a 32bit unsigned value, causing losses. Change the type to qint64 and adapt the code determining the block size. Task-number: QTBUG-54870 Change-Id: I294da5bfe97c7e60f67228399e1244a1aba4c89c Reviewed-by: Maurice Kalinowski --- src/corelib/io/qfsfileengine_win.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/io/qfsfileengine_win.cpp b/src/corelib/io/qfsfileengine_win.cpp index 689251a6c7..391fbcc519 100644 --- a/src/corelib/io/qfsfileengine_win.cpp +++ b/src/corelib/io/qfsfileengine_win.cpp @@ -423,15 +423,13 @@ qint64 QFSFileEnginePrivate::nativeWrite(const char *data, qint64 len) if (fileHandle == INVALID_HANDLE_VALUE) return -1; - qint64 bytesToWrite = DWORD(len); // <- lossy + qint64 bytesToWrite = len; // Writing on Windows fails with ERROR_NO_SYSTEM_RESOURCES when // the chunks are too large, so we limit the block size to 32MB. - static const DWORD maxBlockSize = 32 * 1024 * 1024; - + const DWORD blockSize = DWORD(qMin(bytesToWrite, qint64(32 * 1024 * 1024))); qint64 totalWritten = 0; do { - DWORD blockSize = qMin(bytesToWrite, maxBlockSize); DWORD bytesWritten; if (!WriteFile(fileHandle, data + totalWritten, blockSize, &bytesWritten, NULL)) { if (totalWritten == 0) { -- cgit v1.2.3 From b5153d5bfab63da811b7a4615238d9e50198b412 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Mon, 18 Jul 2016 16:34:22 -0700 Subject: Windows: Disable unsupported C++11 features with Clang-cl and ICC Whenever someone installs Clang or the Intel compiler on Windows, it's very likely that the compiler will be much newer than the MS headers that came with the installed Visual Studio version. So let's make sure we disable the C++11 features that the MS headers don't support properly. For example, MS's header supplied with VS 2013 doesn't mark the max() function as constexpr, resulting compiler errors in uses of that function in Qt code declared with Q_DECL_CONSTEXPR: qdeadlinetimer.h(62,13) : note: non-constexpr function 'max' cannot be used in a constant expression : s(std::numeric_limits::max()), ns(0), type(type_) {} ^ Change-Id: I149e0540c00745fe8119fffd146286ffe480d216 Reviewed-by: Friedemann Kleint Reviewed-by: Oswald Buddenhagen Reviewed-by: Thiago Macieira --- src/corelib/global/qcompilerdetection.h | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index 33e42a944d..e152786d3f 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -1031,6 +1031,33 @@ // critical definitions. (Reported as Intel Issue ID 6000117277) # define __USE_CONSTEXPR 1 # define __USE_NOEXCEPT 1 +# elif defined(Q_CC_MSVC) && (defined(Q_CC_CLANG) || defined(Q_CC_INTEL)) +// Clang and the Intel compiler support more C++ features than the Microsoft compiler +// so make sure we don't enable them if the MS headers aren't properly adapted. +# ifndef _HAS_CONSTEXPR +# undef Q_COMPILER_CONSTEXPR +# endif +# ifndef _HAS_DECLTYPE +# undef Q_COMPILER_DECLTYPE +# endif +# ifndef _HAS_INITIALIZER_LISTS +# undef Q_COMPILER_INITIALIZER_LISTS +# endif +# ifndef _HAS_NULLPTR_T +# undef Q_COMPILER_NULLPTR +# endif +# ifndef _HAS_RVALUE_REFERENCES +# undef Q_COMPILER_RVALUE_REFS +# endif +# ifndef _HAS_SCOPED_ENUM +# undef Q_COMPILER_CLASS_ENUM +# endif +# ifndef _HAS_TEMPLATE_ALIAS +# undef Q_COMPILER_TEMPLATE_ALIAS +# endif +# ifndef _HAS_VARIADIC_TEMPLATES +# undef Q_COMPILER_VARIADIC_TEMPLATES +# endif # elif defined(_LIBCPP_VERSION) // libc++ uses __has_feature(cxx_atomic), so disable the feature if the compiler // doesn't support it. That's required for the Intel compiler 14.x or earlier on OS X, for example. -- cgit v1.2.3 From dd59118b87d779e5cbfcd0b4ee2a3d5332433da9 Mon Sep 17 00:00:00 2001 From: Oswald Buddenhagen Date: Thu, 7 Jul 2016 11:18:41 +0200 Subject: move c++11 test into qcompilerdetection.h and make it stricter it positively makes no sense to have a configure test which will be never reached due to the configure/qmake bootstrap failing with a slew of totally unhelpful error messages. pre-standardization partial c++11 implementations are now rejected, except for VS2013, which is still sufficient despite not announcing full compatibility. Change-Id: I58af10e03960af06b80cedac105cf8433f7a1745 Reviewed-by: Thiago Macieira --- src/corelib/global/qcompilerdetection.h | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h index e152786d3f..285931e794 100644 --- a/src/corelib/global/qcompilerdetection.h +++ b/src/corelib/global/qcompilerdetection.h @@ -557,6 +557,12 @@ * Q_COMPILER_RESTRICTED_VLA variable-length arrays, prior to __cpp_runtime_arrays */ +#ifdef __cplusplus +# if __cplusplus < 201103L && !(defined(Q_CC_MSVC) && Q_CC_MSVC >= 1800) +# error Qt requires a C++11 compiler and yours does not seem to be that. +# endif +#endif + #ifdef Q_CC_INTEL # define Q_COMPILER_RESTRICTED_VLA # define Q_COMPILER_VARIADIC_MACROS // C++11 feature supported as an extension in other modes, too -- cgit v1.2.3 From 726c8ca0de2ba868017b20a737cf4c3be3ae7423 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Fri, 22 Jul 2016 18:08:49 -0700 Subject: Work around ICC bug about shadowing declarations that aren't shadowing Known ICC bug, still present in version 17 beta. qdatetime.h(126): error #3280: declaration hides member "QDate::jd" (declared at line 136) Obviously a parameter to static function or to a function in a nested class can't shadow an NSDM. Intel issue IDs: 0000698329 / DPD200245740 Change-Id: I149e0540c00745fe8119fffd1463c679a3a9c8c3 Reviewed-by: Marc Mutz --- src/corelib/tools/qdatetime.h | 4 ++-- src/corelib/tools/qsharedpointer_impl.h | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'src/corelib') diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h index c44f7f8fee..389fc927c3 100644 --- a/src/corelib/tools/qdatetime.h +++ b/src/corelib/tools/qdatetime.h @@ -115,8 +115,8 @@ QT_DEPRECATED inline bool setYMD(int y, int m, int d) static bool isValid(int y, int m, int d); static bool isLeapYear(int year); - static Q_DECL_CONSTEXPR inline QDate fromJulianDay(qint64 jd) - { return jd >= minJd() && jd <= maxJd() ? QDate(jd) : QDate() ; } + static Q_DECL_CONSTEXPR inline QDate fromJulianDay(qint64 jd_) + { return jd_ >= minJd() && jd_ <= maxJd() ? QDate(jd_) : QDate() ; } Q_DECL_CONSTEXPR inline qint64 toJulianDay() const { return jd; } private: diff --git a/src/corelib/tools/qsharedpointer_impl.h b/src/corelib/tools/qsharedpointer_impl.h index 70b100d018..c408f54b04 100644 --- a/src/corelib/tools/qsharedpointer_impl.h +++ b/src/corelib/tools/qsharedpointer_impl.h @@ -486,14 +486,14 @@ private: void deref() Q_DECL_NOTHROW { deref(d); } - static void deref(Data *d) Q_DECL_NOTHROW + static void deref(Data *dd) Q_DECL_NOTHROW { - if (!d) return; - if (!d->strongref.deref()) { - d->destroy(); + if (!dd) return; + if (!dd->strongref.deref()) { + dd->destroy(); } - if (!d->weakref.deref()) - delete d; + if (!dd->weakref.deref()) + delete dd; } template -- cgit v1.2.3 From d9831a03ca3bd8a9a86ae37f1e18d48c9cc3fb9f Mon Sep 17 00:00:00 2001 From: Mitch Curtis Date: Tue, 26 Jul 2016 09:47:32 +0200 Subject: Fix grammar error in QFlags documentation Change-Id: I1c5d2be402f7e194eaa2e6f646aa5edad1bfd9d9 Reviewed-by: Marc Mutz --- src/corelib/kernel/qobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index a21dbffad5..d5f2f9bcd8 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -4262,7 +4262,7 @@ QDebug operator<<(QDebug dbg, const QObject *o) \relates QObject \since 5.5 - This macro registers a single \l{QFlags}{flags types} with the + This macro registers a single \l{QFlags}{flags type} with the meta-object system. It is typically used in a class definition to declare that values of a given enum can be used as flags and combined using the bitwise OR operator. -- cgit v1.2.3 From c9354429dd90aff3f1174d0b56515cb4a8aef9c2 Mon Sep 17 00:00:00 2001 From: David Faure Date: Fri, 19 Feb 2016 20:02:30 +0100 Subject: QSocketNotifier: improve warning to show thread names and pointers. Much like the QObject::setParent() warning, which helps a bit when debugging. Change-Id: I2abf277a12aa1ce04bd8b5759f46f8bfdcb25383 Reviewed-by: Robin Burchell Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qeventdispatcher_unix.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qeventdispatcher_unix.cpp b/src/corelib/kernel/qeventdispatcher_unix.cpp index 9afbb84abf..802962d77d 100644 --- a/src/corelib/kernel/qeventdispatcher_unix.cpp +++ b/src/corelib/kernel/qeventdispatcher_unix.cpp @@ -421,7 +421,12 @@ void QEventDispatcherUNIX::unregisterSocketNotifier(QSocketNotifier *notifier) QSocketNotifier::Type type = notifier->type(); #ifndef QT_NO_DEBUG if (notifier->thread() != thread() || thread() != QThread::currentThread()) { - qWarning("QSocketNotifier: socket notifiers cannot be disabled from another thread"); + qWarning("QSocketNotifier: socket notifier (fd %d) cannot be disabled from another thread.\n" + "(Notifier's thread is %s(%p), event dispatcher's thread is %s(%p), current thread is %s(%p))", + sockfd, + notifier->thread() ? notifier->thread()->metaObject()->className() : "QThread", notifier->thread(), + thread() ? thread()->metaObject()->className() : "QThread", thread(), + QThread::currentThread() ? QThread::currentThread()->metaObject()->className() : "QThread", QThread::currentThread()); return; } #endif -- cgit v1.2.3 From f5af4428c3ede16c742df7890bc5f5ebf8ed2535 Mon Sep 17 00:00:00 2001 From: David Faure Date: Tue, 26 Jul 2016 10:07:57 +0200 Subject: QVector: fix crash on reserve(0) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit It crashed when d was equal to Data::unsharableEmpty(). Task-number: QTBUG-51758 Change-Id: If9f2a7d11892507135f4dc0aeef909f59b7478fc Reviewed-by: Thiago Macieira Reviewed-by: Oswald Buddenhagen Reviewed-by: Jędrzej Nowacki --- src/corelib/tools/qvector.h | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h index 3154220634..eefab5905c 100644 --- a/src/corelib/tools/qvector.h +++ b/src/corelib/tools/qvector.h @@ -391,7 +391,11 @@ void QVector::reserve(int asize) { if (asize > int(d->alloc)) reallocData(d->size, asize); - if (isDetached()) + if (isDetached() +#if !defined(QT_NO_UNSHARABLE_CONTAINERS) + && d != Data::unsharableEmpty() +#endif + ) d->capacityReserved = 1; Q_ASSERT(capacity() >= asize); } -- cgit v1.2.3 From 4790ccfa7a7dcdaf5b1c3c3f71bd333a6d754fba Mon Sep 17 00:00:00 2001 From: David Faure Date: Wed, 27 Jul 2016 22:57:51 +0200 Subject: Fix gcc -Wsuggest-override warning on Q_OBJECT Same reasoning as commit 3092bd5 (which was for Clang), but for gcc >= 5.1. Change-Id: I123b17670c1a64876b01fd39fb11648fa4e8b1fd Reviewed-by: Thiago Macieira Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qobjectdefs.h | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h index 8d32795af2..0a4492dcda 100644 --- a/src/corelib/kernel/qobjectdefs.h +++ b/src/corelib/kernel/qobjectdefs.h @@ -173,6 +173,8 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {} #if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306 # define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override") +#elif defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && Q_CC_GNU >= 510 +# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_GCC("-Wsuggest-override") #else # define Q_OBJECT_NO_OVERRIDE_WARNING #endif -- cgit v1.2.3 From f24cc53cc27d8ed4be4c1d0d2df059dd6a6909a9 Mon Sep 17 00:00:00 2001 From: Denis Kormalev Date: Fri, 22 Jul 2016 19:00:35 +0300 Subject: Fix for race condition in signal activation There was a race condition between QObject::disconnect() and QMetaObject::activate() which can occur if there are multiple BlockingQueued connections to one signal from different threads and they connect/disconnect their connections often. What can happen in this case is: T1 is in activate() method and T2 is in disconnect() method T1 T2 locks sender mutex selects next connection unlocks sender mutex locks sender mutex sets isSlotObject to false creates QMetaCallEvent derefs connection posts event Two things can happen here: 1. Connection can still be valid, but it will have isSlotObject==false and callFunction will be used instead of slotObj 2. Connection can already be invalid To fix it mutex unlock should be moved after QMetaCallEvent creation. Also there is another case, when we don't disconnect but delete the receiver object. In this case it can already be invalid during postEvent, so we need to move mutex unlock after postEvent. Change-Id: I8103798324140ee11de5b4e10906562ba878ff8b Reviewed-by: Olivier Goffart (Woboq GmbH) Reviewed-by: Marc Mutz --- src/corelib/kernel/qobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/corelib') diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index d5f2f9bcd8..467b4c6780 100644 --- a/src/corelib/kernel/qobject.cpp +++ b/src/corelib/kernel/qobject.cpp @@ -3683,7 +3683,6 @@ void QMetaObject::activate(QObject *sender, int signalOffset, int local_signal_i continue; #ifndef QT_NO_THREAD } else if (c->connectionType == Qt::BlockingQueuedConnection) { - locker.unlock(); if (receiverInSameThread) { qWarning("Qt: Dead lock detected while activating a BlockingQueuedConnection: " "Sender is %s(%p), receiver is %s(%p)", @@ -3695,6 +3694,7 @@ void QMetaObject::activate(QObject *sender, int signalOffset, int local_signal_i new QMetaCallEvent(c->slotObj, sender, signal_index, 0, 0, argv ? argv : empty_argv, &semaphore) : new QMetaCallEvent(c->method_offset, c->method_relative, c->callFunction, sender, signal_index, 0, 0, argv ? argv : empty_argv, &semaphore); QCoreApplication::postEvent(receiver, ev); + locker.unlock(); semaphore.acquire(); locker.relock(); continue; -- cgit v1.2.3