From bb5d287cc3eb68e1e46e5c3eb0a2c3991900354d Mon Sep 17 00:00:00 2001 From: Andy Shaw Date: Mon, 16 Mar 2015 13:10:27 +0100 Subject: Windows: Don't cause a malloc before calling GetLastError() When creating a string it would cause a malloc which would reset GetLastError() so we need to ensure that GetLastError() is the first thing it calls if a Windows API call fails. Task-number: QTBUG-27765 Change-Id: I5cc4ce59aa1f03a0ec978fe54949a7931a225d52 Reviewed-by: Olivier Goffart (Woboq GmbH) --- src/corelib/kernel/qsharedmemory_android.cpp | 2 +- src/corelib/kernel/qsharedmemory_p.h | 2 +- src/corelib/kernel/qsharedmemory_posix.cpp | 4 ++-- src/corelib/kernel/qsharedmemory_systemv.cpp | 4 ++-- src/corelib/kernel/qsharedmemory_unix.cpp | 2 +- src/corelib/kernel/qsharedmemory_win.cpp | 8 ++++---- 6 files changed, 11 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/corelib/kernel/qsharedmemory_android.cpp b/src/corelib/kernel/qsharedmemory_android.cpp index f7511ea8b7..cdcd5685e0 100644 --- a/src/corelib/kernel/qsharedmemory_android.cpp +++ b/src/corelib/kernel/qsharedmemory_android.cpp @@ -47,7 +47,7 @@ QSharedMemoryPrivate::QSharedMemoryPrivate() { } -void QSharedMemoryPrivate::setErrorString(const QString &function) +void QSharedMemoryPrivate::setErrorString(QLatin1String function) { Q_UNUSED(function); qWarning() << Q_FUNC_INFO << "Not yet implemented on Android"; diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h index 0308dde57f..2bcc0d4f6a 100644 --- a/src/corelib/kernel/qsharedmemory_p.h +++ b/src/corelib/kernel/qsharedmemory_p.h @@ -133,7 +133,7 @@ public: bool attach(QSharedMemory::AccessMode mode); bool detach(); - void setErrorString(const QString &function); + void setErrorString(QLatin1String function); #ifndef QT_NO_SYSTEMSEMAPHORE bool tryLocker(QSharedMemoryLocker *locker, const QString &function) { diff --git a/src/corelib/kernel/qsharedmemory_posix.cpp b/src/corelib/kernel/qsharedmemory_posix.cpp index 74f98a158a..1142d3223c 100644 --- a/src/corelib/kernel/qsharedmemory_posix.cpp +++ b/src/corelib/kernel/qsharedmemory_posix.cpp @@ -94,7 +94,7 @@ bool QSharedMemoryPrivate::create(int size) #endif if (fd == -1) { const int errorNumber = errno; - const QString function = QLatin1String("QSharedMemory::create"); + const QLatin1String function("QSharedMemory::attach (shm_open)"); switch (errorNumber) { case ENAMETOOLONG: case EINVAL: @@ -138,7 +138,7 @@ bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode) #endif if (hand == -1) { const int errorNumber = errno; - const QString function = QLatin1String("QSharedMemory::attach (shm_open)"); + const QLatin1String function("QSharedMemory::attach (shm_open)"); switch (errorNumber) { case ENAMETOOLONG: case EINVAL: diff --git a/src/corelib/kernel/qsharedmemory_systemv.cpp b/src/corelib/kernel/qsharedmemory_systemv.cpp index 953747e41d..29fee12c0b 100644 --- a/src/corelib/kernel/qsharedmemory_systemv.cpp +++ b/src/corelib/kernel/qsharedmemory_systemv.cpp @@ -149,7 +149,7 @@ bool QSharedMemoryPrivate::create(int size) // create if (-1 == shmget(unix_key, size, 0600 | IPC_CREAT | IPC_EXCL)) { - QString function = QLatin1String("QSharedMemory::create"); + const QLatin1String function("QSharedMemory::create"); switch (errno) { case EINVAL: errorString = QSharedMemory::tr("%1: system-imposed size restrictions").arg(QLatin1String("QSharedMemory::handle")); @@ -199,7 +199,7 @@ bool QSharedMemoryPrivate::detach() { // detach from the memory segment if (-1 == shmdt(memory)) { - QString function = QLatin1String("QSharedMemory::detach"); + const QLatin1String function("QSharedMemory::detach"); switch (errno) { case EINVAL: errorString = QSharedMemory::tr("%1: not attached").arg(function); diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp index 92184a619b..ec6223142f 100644 --- a/src/corelib/kernel/qsharedmemory_unix.cpp +++ b/src/corelib/kernel/qsharedmemory_unix.cpp @@ -71,7 +71,7 @@ QSharedMemoryPrivate::QSharedMemoryPrivate() { } -void QSharedMemoryPrivate::setErrorString(const QString &function) +void QSharedMemoryPrivate::setErrorString(QLatin1String function) { // EINVAL is handled in functions so they can give better error strings switch (errno) { diff --git a/src/corelib/kernel/qsharedmemory_win.cpp b/src/corelib/kernel/qsharedmemory_win.cpp index 8e094cb458..4d37368b2e 100644 --- a/src/corelib/kernel/qsharedmemory_win.cpp +++ b/src/corelib/kernel/qsharedmemory_win.cpp @@ -47,9 +47,9 @@ QSharedMemoryPrivate::QSharedMemoryPrivate() : QObjectPrivate(), { } -void QSharedMemoryPrivate::setErrorString(const QString &function) +void QSharedMemoryPrivate::setErrorString(QLatin1String function) { - BOOL windowsError = GetLastError(); + DWORD windowsError = GetLastError(); if (windowsError == 0) return; switch (windowsError) { @@ -91,7 +91,7 @@ void QSharedMemoryPrivate::setErrorString(const QString &function) HANDLE QSharedMemoryPrivate::handle() { if (!hand) { - QString function = QLatin1String("QSharedMemory::handle"); + const QLatin1String function("QSharedMemory::handle"); if (nativeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: unable to make key").arg(function); @@ -130,7 +130,7 @@ bool QSharedMemoryPrivate::cleanHandle() bool QSharedMemoryPrivate::create(int size) { - QString function = QLatin1String("QSharedMemory::create"); + const QLatin1String function("QSharedMemory::create"); if (nativeKey.isEmpty()) { error = QSharedMemory::KeyError; errorString = QSharedMemory::tr("%1: key error").arg(function); -- cgit v1.2.3