summaryrefslogtreecommitdiffstats
path: root/src/corelib
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@theqtcompany.com>2015-12-08 07:09:26 +0100
committerSimon Hausmann <simon.hausmann@theqtcompany.com>2015-12-08 07:09:47 +0100
commit3ec31ef9c5acd57a4a59c0d5f5e20b8d9a19bfa1 (patch)
tree8b55dd13dbc2a33fe7c857f622e10b817386bdb3 /src/corelib
parent6f87f2d23fb50d8183ea173fe423b7e1a24c0e2e (diff)
parent4ad8798de428b44fe4c56e1ca111940068056c57 (diff)
Merge remote-tracking branch 'origin/5.6' into dev
Diffstat (limited to 'src/corelib')
-rw-r--r--src/corelib/global/qglobal.h2
-rw-r--r--src/corelib/io/qstandardpaths_winrt.cpp3
-rw-r--r--src/corelib/itemmodels/qitemselectionmodel.cpp1
-rw-r--r--src/corelib/kernel/kernel.pri2
-rw-r--r--src/corelib/kernel/qfunctions_fake_env_p.h101
-rw-r--r--src/corelib/kernel/qfunctions_wince.cpp50
-rw-r--r--src/corelib/kernel/qfunctions_wince.h32
-rw-r--r--src/corelib/kernel/qfunctions_winrt.cpp51
-rw-r--r--src/corelib/kernel/qfunctions_winrt.h26
-rw-r--r--src/corelib/kernel/qobject.cpp2
-rw-r--r--src/corelib/tools/qbytearray.cpp4
-rw-r--r--src/corelib/tools/qtimezoneprivate_tz.cpp7
12 files changed, 152 insertions, 129 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 9b8029990c..f5a7555f23 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -769,7 +769,7 @@ inline T *q_check_ptr(T *p) { Q_CHECK_PTR(p); return p; }
typedef void (*QFunctionPointer)();
#if !defined(Q_UNIMPLEMENTED)
-# define Q_UNIMPLEMENTED() qWarning("%s:%d: %s: Unimplemented code.", __FILE__, __LINE__, Q_FUNC_INFO)
+# define Q_UNIMPLEMENTED() qWarning("Unimplemented code.")
#endif
Q_DECL_CONSTEXPR static inline bool qFuzzyCompare(double p1, double p2) Q_REQUIRED_RESULT Q_DECL_UNUSED;
diff --git a/src/corelib/io/qstandardpaths_winrt.cpp b/src/corelib/io/qstandardpaths_winrt.cpp
index b1e51c5082..cb4d1dd152 100644
--- a/src/corelib/io/qstandardpaths_winrt.cpp
+++ b/src/corelib/io/qstandardpaths_winrt.cpp
@@ -123,7 +123,8 @@ QString QStandardPaths::writableLocation(StandardLocation type)
QStringList QStandardPaths::standardLocations(StandardLocation type)
{
- return QStringList(writableLocation(type));
+ const QString writable = writableLocation(type);
+ return writable.isEmpty() ? QStringList() : QStringList(writable);
}
QT_END_NAMESPACE
diff --git a/src/corelib/itemmodels/qitemselectionmodel.cpp b/src/corelib/itemmodels/qitemselectionmodel.cpp
index 222e722c06..51c670f79e 100644
--- a/src/corelib/itemmodels/qitemselectionmodel.cpp
+++ b/src/corelib/itemmodels/qitemselectionmodel.cpp
@@ -1646,7 +1646,6 @@ QModelIndexList QItemSelectionModel::selectedIndexes() const
/*!
\since 4.2
Returns the indexes in the given \a column for the rows where all columns are selected.
- The list is not sorted.
\sa selectedIndexes(), selectedColumns()
*/
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index c51305b3d5..adcc9c5581 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -88,6 +88,7 @@ wince {
SOURCES += \
kernel/qfunctions_wince.cpp
HEADERS += \
+ kernel/qfunctions_fake_env_p.h \
kernel/qfunctions_wince.h
}
@@ -95,6 +96,7 @@ winrt {
SOURCES += \
kernel/qfunctions_winrt.cpp
HEADERS += \
+ kernel/qfunctions_fake_env_p.h \
kernel/qfunctions_winrt.h
}
diff --git a/src/corelib/kernel/qfunctions_fake_env_p.h b/src/corelib/kernel/qfunctions_fake_env_p.h
new file mode 100644
index 0000000000..8b1ab44696
--- /dev/null
+++ b/src/corelib/kernel/qfunctions_fake_env_p.h
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 The Qt Company Ltd.
+** Contact: http://www.qt.io/licensing/
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see http://www.qt.io/terms-conditions. For further
+** information use the contact form at http://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** As a special exception, The Qt Company gives you certain additional
+** rights. These rights are described in The Qt Company LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QFUNCTIONS_FAKE_ENV_P_H
+#define QFUNCTIONS_FAKE_ENV_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the QLibrary class. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qbytearray.h"
+#include "qhash.h"
+
+QT_BEGIN_NAMESPACE
+
+// Environment ------------------------------------------------------
+Q_CORE_EXPORT QHash<QByteArray, QByteArray> &qt_app_environment()
+{
+ static QHash<QByteArray, QByteArray> internalEnvironment;
+ return internalEnvironment;
+}
+
+errno_t qt_fake_getenv_s(size_t *sizeNeeded, char *buffer, size_t bufferSize, const char *varName)
+{
+ if (!sizeNeeded)
+ return EINVAL;
+
+ QHash<QByteArray, QByteArray>::const_iterator iterator = qt_app_environment().constFind(varName);
+ if (iterator == qt_app_environment().constEnd()) {
+ if (buffer)
+ buffer[0] = '\0';
+ return ENOENT;
+ }
+
+ const int size = iterator->size() + 1;
+ if (bufferSize < size_t(size)) {
+ *sizeNeeded = size;
+ return ERANGE;
+ }
+
+ qstrcpy(buffer, iterator->constData());
+ return 0;
+}
+
+errno_t qt_fake__putenv_s(const char *varName, const char *value)
+{
+ QHash<QByteArray, QByteArray>::iterator iterator = qt_app_environment().find(varName);
+ QHash<QByteArray, QByteArray>::iterator end = qt_app_environment().end();
+ if (!value || !*value) {
+ if (iterator != end)
+ qt_app_environment().erase(iterator);
+ } else {
+ if (iterator == end)
+ qt_app_environment()[varName] = QByteArray(value);
+ else
+ (*iterator) = value;
+ }
+
+ return 0;
+}
+
+QT_END_NAMESPACE
+
+#endif // QFUNCTIONS_FAKE_ENV_P_H
diff --git a/src/corelib/kernel/qfunctions_wince.cpp b/src/corelib/kernel/qfunctions_wince.cpp
index 2503a262cd..0619503c51 100644
--- a/src/corelib/kernel/qfunctions_wince.cpp
+++ b/src/corelib/kernel/qfunctions_wince.cpp
@@ -44,9 +44,8 @@
#include "qplatformdefs.h"
#include "qfunctions_wince.h"
+#include "qfunctions_fake_env_p.h"
#include "qstring.h"
-#include "qbytearray.h"
-#include "qhash.h"
QT_USE_NAMESPACE
@@ -399,51 +398,4 @@ int qt_wince__getpid()
#ifdef __cplusplus
} // extern "C"
#endif
-// Environment ------------------------------------------------------
-inline QHash<QByteArray, QByteArray>& qt_app_environment()
-{
- static QHash<QByteArray, QByteArray> internalEnvironment;
- return internalEnvironment;
-}
-
-errno_t qt_wince_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
-{
- if (!sizeNeeded)
- return EINVAL;
-
- if (!qt_app_environment().contains(varName)) {
- if (buffer)
- buffer[0] = '\0';
- return ENOENT;
- }
-
- QByteArray value = qt_app_environment().value(varName);
- if (!value.endsWith('\0')) // win32 guarantees terminated string
- value.append('\0');
-
- if (bufferSize < (size_t)value.size()) {
- *sizeNeeded = value.size();
- return 0;
- }
-
- strcpy(buffer, value.constData());
- return 0;
-}
-
-errno_t qt_wince__putenv_s(const char* varName, const char* value)
-{
- QByteArray input = value;
- if (input.isEmpty()) {
- if (qt_app_environment().contains(varName))
- qt_app_environment().remove(varName);
- } else {
- // win32 guarantees terminated string
- if (!input.endsWith('\0'))
- input.append('\0');
- qt_app_environment()[varName] = input;
- }
-
- return 0;
-}
-
#endif // Q_OS_WINCE
diff --git a/src/corelib/kernel/qfunctions_wince.h b/src/corelib/kernel/qfunctions_wince.h
index 4273070c11..347f57f95d 100644
--- a/src/corelib/kernel/qfunctions_wince.h
+++ b/src/corelib/kernel/qfunctions_wince.h
@@ -76,8 +76,8 @@ QT_END_NAMESPACE
#endif
// Environment ------------------------------------------------------
-errno_t qt_wince_getenv_s(size_t*, char*, size_t, const char*);
-errno_t qt_wince__putenv_s(const char*, const char*);
+errno_t qt_fake_getenv_s(size_t*, char*, size_t, const char*);
+errno_t qt_fake__putenv_s(const char*, const char*);
#ifdef __cplusplus // have this as tiff plugin is written in C
extern "C" {
@@ -398,20 +398,20 @@ typedef DWORD OLE_COLOR;
{ \
return qt_wince_##funcname(p1); \
}
-#define generate_inline_return_func2(funcname, returntype, param1, param2) \
+#define generate_inline_return_func2(funcname, returntype, prependnamespace, param1, param2) \
inline returntype funcname(param1 p1, param2 p2) \
{ \
- return qt_wince_##funcname(p1, p2); \
+ return prependnamespace##funcname(p1, p2); \
}
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
{ \
return qt_wince_##funcname(p1, p2, p3); \
}
-#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
+#define generate_inline_return_func4(funcname, returntype, prependnamespace, param1, param2, param3, param4) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
{ \
- return qt_wince_##funcname(p1, p2, p3, p4); \
+ return prependnamespace##funcname(p1, p2, p3, p4); \
}
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
@@ -433,28 +433,28 @@ typedef unsigned (__stdcall *StartAdressExFunc)(void *);
typedef void(*StartAdressFunc)(void *);
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
-generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
-generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
+generate_inline_return_func4(getenv_s, errno_t, qt_fake_, size_t *, char *, size_t, const char *)
+generate_inline_return_func2(_putenv_s, errno_t, qt_fake_, const char *, const char *)
generate_inline_return_func0(_getpid, int)
generate_inline_return_func1(time_tToFt, FILETIME, time_t)
generate_inline_return_func1(ftToTime_t, time_t, FILETIME)
generate_inline_return_func0(_getdrive, int)
-generate_inline_return_func2(_waccess, int, const wchar_t *, int)
+generate_inline_return_func2(_waccess, int, qt_wince_, const wchar_t *, int)
generate_inline_return_func3(_wopen, int, const wchar_t *, int, int)
-generate_inline_return_func2(_fdopen, FILE *, int, const char *)
-generate_inline_return_func2(fdopen, FILE *, int, const char *)
+generate_inline_return_func2(_fdopen, FILE *, qt_wince_, int, const char *)
+generate_inline_return_func2(fdopen, FILE *, qt_wince_, int, const char *)
generate_inline_return_func1(rewind, void, FILE *)
generate_inline_return_func0(tmpfile, FILE *)
-generate_inline_return_func2(_rename, int, const char *, const char *)
+generate_inline_return_func2(_rename, int, qt_wince_, const char *, const char *)
generate_inline_return_func1(_remove, int, const char *)
generate_inline_return_func1(SetErrorMode, int, int)
#if _WIN32_WCE < 0x800
-generate_inline_return_func2(_chmod, bool, const char *, int)
-generate_inline_return_func2(_wchmod, bool, const wchar_t *, int)
+generate_inline_return_func2(_chmod, bool, qt_wince_, const char *, int)
+generate_inline_return_func2(_wchmod, bool, qt_wince_, const wchar_t *, int)
#endif
generate_inline_return_func7(CreateFileA, HANDLE, LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE)
-generate_inline_return_func4(SetWindowOrgEx, BOOL, HDC, int, int, LPPOINT)
-generate_inline_return_func2(calloc, void *, size_t, size_t)
+generate_inline_return_func4(SetWindowOrgEx, BOOL, qt_wince_, HDC, int, int, LPPOINT)
+generate_inline_return_func2(calloc, void *, qt_wince_, size_t, size_t)
generate_inline_return_func0(GetThreadLocale, DWORD)
generate_inline_return_func3(_beginthread, HANDLE, StartAdressFunc, unsigned, void *)
generate_inline_return_func6(_beginthreadex, unsigned long, void *, unsigned, StartAdressExFunc, void *, unsigned, unsigned *)
diff --git a/src/corelib/kernel/qfunctions_winrt.cpp b/src/corelib/kernel/qfunctions_winrt.cpp
index ea7f2ac671..f8fa19464f 100644
--- a/src/corelib/kernel/qfunctions_winrt.cpp
+++ b/src/corelib/kernel/qfunctions_winrt.cpp
@@ -35,59 +35,10 @@
#ifdef Q_OS_WINRT
-#include "qstring.h"
-#include "qbytearray.h"
-#include "qhash.h"
+#include "qfunctions_fake_env_p.h"
QT_BEGIN_NAMESPACE
-// Environment ------------------------------------------------------
-inline QHash<QByteArray, QByteArray> &qt_app_environment()
-{
- static QHash<QByteArray, QByteArray> internalEnvironment;
- return internalEnvironment;
-}
-
-errno_t qt_winrt_getenv_s(size_t* sizeNeeded, char* buffer, size_t bufferSize, const char* varName)
-{
- if (!sizeNeeded)
- return EINVAL;
-
- if (!qt_app_environment().contains(varName)) {
- if (buffer)
- buffer[0] = '\0';
- return ENOENT;
- }
-
- QByteArray value = qt_app_environment().value(varName);
- if (!value.endsWith('\0')) // win32 guarantees terminated string
- value.append('\0');
-
- if (bufferSize < (size_t)value.size()) {
- *sizeNeeded = value.size();
- return ERANGE;
- }
-
- strcpy(buffer, value.constData());
- return 0;
-}
-
-errno_t qt_winrt__putenv_s(const char* varName, const char* value)
-{
- QByteArray input = value;
- if (input.isEmpty()) {
- if (qt_app_environment().contains(varName))
- qt_app_environment().remove(varName);
- } else {
- // win32 on winrt guarantees terminated string
- if (!input.endsWith('\0'))
- input.append('\0');
- qt_app_environment()[varName] = input;
- }
-
- return 0;
-}
-
void qt_winrt_tzset()
{
}
diff --git a/src/corelib/kernel/qfunctions_winrt.h b/src/corelib/kernel/qfunctions_winrt.h
index 7efd042456..ee4e050793 100644
--- a/src/corelib/kernel/qfunctions_winrt.h
+++ b/src/corelib/kernel/qfunctions_winrt.h
@@ -49,10 +49,20 @@
ret; \
}
+#define RETURN_IF_FAILED_WITH_ARGS(msg, ret, ...) \
+ if (FAILED(hr)) { \
+ qErrnoWarning(hr, msg, __VA_ARGS__); \
+ ret; \
+ }
+
#define RETURN_HR_IF_FAILED(msg) RETURN_IF_FAILED(msg, return hr)
#define RETURN_OK_IF_FAILED(msg) RETURN_IF_FAILED(msg, return S_OK)
#define RETURN_FALSE_IF_FAILED(msg) RETURN_IF_FAILED(msg, return false)
#define RETURN_VOID_IF_FAILED(msg) RETURN_IF_FAILED(msg, return)
+#define RETURN_HR_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return hr, __VA_ARGS__)
+#define RETURN_OK_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return S_OK, __VA_ARGS__)
+#define RETURN_FALSE_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return false, __VA_ARGS__)
+#define RETURN_VOID_IF_FAILED_WITH_ARGS(msg, ...) RETURN_IF_FAILED_WITH_ARGS(msg, return, __VA_ARGS__)
#define Q_ASSERT_SUCCEEDED(hr) \
Q_ASSERT_X(SUCCEEDED(hr), Q_FUNC_INFO, qPrintable(qt_error_string(hr)));
@@ -65,8 +75,8 @@ QT_BEGIN_NAMESPACE
#endif
// Environment ------------------------------------------------------
-errno_t qt_winrt_getenv_s(size_t*, char*, size_t, const char*);
-errno_t qt_winrt__putenv_s(const char*, const char*);
+errno_t qt_fake_getenv_s(size_t*, char*, size_t, const char*);
+errno_t qt_fake__putenv_s(const char*, const char*);
void qt_winrt_tzset();
void qt_winrt__tzset();
@@ -91,20 +101,20 @@ QT_END_NAMESPACE
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1); \
}
-#define generate_inline_return_func2(funcname, returntype, param1, param2) \
+#define generate_inline_return_func2(funcname, returntype, prependnamespace, param1, param2) \
inline returntype funcname(param1 p1, param2 p2) \
{ \
- return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2); \
+ return QT_PREPEND_NAMESPACE(prependnamespace##funcname)(p1, p2); \
}
#define generate_inline_return_func3(funcname, returntype, param1, param2, param3) \
inline returntype funcname(param1 p1, param2 p2, param3 p3) \
{ \
return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2, p3); \
}
-#define generate_inline_return_func4(funcname, returntype, param1, param2, param3, param4) \
+#define generate_inline_return_func4(funcname, returntype, prependnamespace, param1, param2, param3, param4) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4) \
{ \
- return QT_PREPEND_NAMESPACE(qt_winrt_##funcname)(p1, p2, p3, p4); \
+ return QT_PREPEND_NAMESPACE(prependnamespace##funcname)(p1, p2, p3, p4); \
}
#define generate_inline_return_func5(funcname, returntype, param1, param2, param3, param4, param5) \
inline returntype funcname(param1 p1, param2 p2, param3 p3, param4 p4, param5 p5) \
@@ -126,8 +136,8 @@ typedef unsigned (__stdcall *StartAdressExFunc)(void *);
typedef void(*StartAdressFunc)(void *);
typedef int ( __cdecl *CompareFunc ) (const void *, const void *) ;
-generate_inline_return_func4(getenv_s, errno_t, size_t *, char *, size_t, const char *)
-generate_inline_return_func2(_putenv_s, errno_t, const char *, const char *)
+generate_inline_return_func4(getenv_s, errno_t, qt_fake_, size_t *, char *, size_t, const char *)
+generate_inline_return_func2(_putenv_s, errno_t, qt_fake_, const char *, const char *)
generate_inline_return_func0(tzset, void)
generate_inline_return_func0(_tzset, void)
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index 4717cfbf3c..a4531e29eb 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -4822,7 +4822,7 @@ bool QObject::disconnect(const QMetaObject::Connection &connection)
\note It is not possible to use this overload to diconnect signals
connected to functors or lambda expressions. That is because it is not
- possible to compare them. Instead, use the olverload that take a
+ possible to compare them. Instead, use the overload that takes a
QMetaObject::Connection
\sa connect()
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index 319af3ca03..b972be68a3 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -2930,9 +2930,9 @@ QByteArray QByteArray::toUpper_helper(QByteArray &a)
/*! \fn void QByteArray::clear()
- Clears the contents of the byte array and makes it empty.
+ Clears the contents of the byte array and makes it null.
- \sa resize(), isEmpty()
+ \sa resize(), isNull()
*/
void QByteArray::clear()
diff --git a/src/corelib/tools/qtimezoneprivate_tz.cpp b/src/corelib/tools/qtimezoneprivate_tz.cpp
index 90ce8e3b68..85ed345869 100644
--- a/src/corelib/tools/qtimezoneprivate_tz.cpp
+++ b/src/corelib/tools/qtimezoneprivate_tz.cpp
@@ -918,6 +918,13 @@ QByteArray QTzTimeZonePrivate::systemTimeZoneId() const
if (!ianaId.isEmpty() && ianaId.at(0) == ':')
ianaId = ianaId.mid(1);
+ // The TZ value can be ":/etc/localtime" which libc considers
+ // to be a "default timezone", in which case it will be read
+ // by one of the blocks below, so unset it here so it is not
+ // considered as a valid/found ianaId
+ if (ianaId == "/etc/localtime")
+ ianaId.clear();
+
// On Debian Etch and later /etc/localtime is real file with name held in /etc/timezone
if (ianaId.isEmpty()) {
QFile tzif(QStringLiteral("/etc/timezone"));