Fix qsystemerror for WinCE

Windows CE does not have strerror(_r), so lets use string formatting
provided by windowsErrorString function.

In order to use windowsErrorString it was moved before
standardLibraryErrorString function.

Task-number: QTBUG-22498
Change-Id: Ifa20c4ac314ac8a26de6b0c5b67ced96b262c2b4
Reviewed-by: Andreas Holzammer <andreas.holzammer@kdab.com>
Reviewed-by: Shane Kearns <ext-shane.2.kearns@nokia.com>
bb10
Janne Anttila 2011-08-24 09:03:02 +03:00 committed by Qt by Nokia
parent f0841fe4cf
commit 106bab644a
1 changed files with 44 additions and 36 deletions

View File

@ -46,6 +46,10 @@
# if defined(Q_CC_MSVC)
# include <crtdbg.h>
# endif
#else
# if (_WIN32_WCE >= 0x700)
# include <errno.h>
# endif
#endif
#ifdef Q_OS_WIN
#include <windows.h>
@ -76,42 +80,6 @@ namespace {
}
#endif
static QString standardLibraryErrorString(int errorCode)
{
const char *s = 0;
QString ret;
switch (errorCode) {
case 0:
break;
case EACCES:
s = QT_TRANSLATE_NOOP("QIODevice", "Permission denied");
break;
case EMFILE:
s = QT_TRANSLATE_NOOP("QIODevice", "Too many open files");
break;
case ENOENT:
s = QT_TRANSLATE_NOOP("QIODevice", "No such file or directory");
break;
case ENOSPC:
s = QT_TRANSLATE_NOOP("QIODevice", "No space left on device");
break;
default: {
#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
QByteArray buf(1024, '\0');
ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
#else
ret = QString::fromLocal8Bit(strerror(errorCode));
#endif
break; }
}
if (s) {
// ######## this breaks moc build currently
// ret = QCoreApplication::translate("QIODevice", s);
ret = QString::fromLatin1(s);
}
return ret.trimmed();
}
#ifdef Q_OS_WIN
static QString windowsErrorString(int errorCode)
{
@ -133,6 +101,46 @@ static QString windowsErrorString(int errorCode)
}
#endif
static QString standardLibraryErrorString(int errorCode)
{
const char *s = 0;
QString ret;
switch (errorCode) {
case 0:
break;
case EACCES:
s = QT_TRANSLATE_NOOP("QIODevice", "Permission denied");
break;
case EMFILE:
s = QT_TRANSLATE_NOOP("QIODevice", "Too many open files");
break;
case ENOENT:
s = QT_TRANSLATE_NOOP("QIODevice", "No such file or directory");
break;
case ENOSPC:
s = QT_TRANSLATE_NOOP("QIODevice", "No space left on device");
break;
default: {
#ifdef Q_OS_WINCE
ret = windowsErrorString(errorCode);
#else
#if !defined(QT_NO_THREAD) && defined(_POSIX_THREAD_SAFE_FUNCTIONS) && _POSIX_VERSION >= 200112L && !defined(Q_OS_INTEGRITY) && !defined(Q_OS_QNX)
QByteArray buf(1024, '\0');
ret = fromstrerror_helper(strerror_r(errorCode, buf.data(), buf.size()), buf);
#else
ret = QString::fromLocal8Bit(strerror(errorCode));
#endif
#endif
break; }
}
if (s) {
// ######## this breaks moc build currently
// ret = QCoreApplication::translate("QIODevice", s);
ret = QString::fromLatin1(s);
}
return ret.trimmed();
}
#ifdef Q_OS_SYMBIAN
static QString symbianErrorString(int errorCode)
{