From ba40d1a872dabb323c1c901929d5db6da1fc5059 Mon Sep 17 00:00:00 2001 From: Samuel Nevala Date: Mon, 30 Nov 2015 15:49:36 +0200 Subject: Combine environment variable implementations Environment variable storage implementations on Windows Runtime and CE are very similar. For better maintainability have just one implementation. Change-Id: I12ec38f7bde3fcc0bcc56face88d5f19cf3b3504 Reviewed-by: Marc Mutz Reviewed-by: Andreas Holzammer Reviewed-by: Friedemann Kleint Reviewed-by: Maurice Kalinowski --- src/corelib/kernel/kernel.pri | 2 + src/corelib/kernel/qfunctions_fake_env_p.h | 101 +++++++++++++++++++++++++++++ src/corelib/kernel/qfunctions_wince.cpp | 50 +------------- src/corelib/kernel/qfunctions_wince.h | 32 ++++----- src/corelib/kernel/qfunctions_winrt.cpp | 51 +-------------- src/corelib/kernel/qfunctions_winrt.h | 16 ++--- 6 files changed, 129 insertions(+), 123 deletions(-) create mode 100644 src/corelib/kernel/qfunctions_fake_env_p.h (limited to 'src/corelib/kernel') diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri index f09fa4debc..bc93791c2e 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 &qt_app_environment() +{ + static QHash 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::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::iterator iterator = qt_app_environment().find(varName); + QHash::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& qt_app_environment() -{ - static QHash 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 &qt_app_environment() -{ - static QHash 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..69d5c1eb52 100644 --- a/src/corelib/kernel/qfunctions_winrt.h +++ b/src/corelib/kernel/qfunctions_winrt.h @@ -65,8 +65,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 +91,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 +126,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) -- cgit v1.2.3 From 4b365cb4463858534f87dc5804bb31423dd7d518 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9rgio=20Martins?= Date: Thu, 19 Nov 2015 22:48:11 +0000 Subject: Fix typo in QObject::disconnect() documentation Change-Id: I65f95c7f22399b9fea65c44b971afc7efbb73d64 Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qobject.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/corelib/kernel') diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp index c9884cd76c..c316ebc69f 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() -- cgit v1.2.3 From df053dc642b4cb284112f63b6572ac5cfc175b35 Mon Sep 17 00:00:00 2001 From: Friedemann Kleint Date: Fri, 4 Dec 2015 12:20:50 +0100 Subject: WinRT: Add RETURN_[]_IF_FAILED_WITH_ARGS macros. Make it possible to pass arguments to the messages by introducing variadic macro versions of RETURN_[]_IF_FAILED. Change-Id: Iec27adb33d9d3211fdc299f07777fcdf33f08a93 Reviewed-by: Oliver Wolff --- src/corelib/kernel/qfunctions_winrt.h | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src/corelib/kernel') diff --git a/src/corelib/kernel/qfunctions_winrt.h b/src/corelib/kernel/qfunctions_winrt.h index 69d5c1eb52..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))); -- cgit v1.2.3