QAbstractConcatenable::convertFromAscii: make len the actual length

Before, it was the length + 1, to include the ending \0 (for historical
reasons)
Having it the actual length is more intuitive and less error prone

Also added QT_ASCII_CAST_WARN to QConcatenable<QByteArray>::appendTo
to show the warnig that convertion from ascii to qstring occurs.

Change-Id: Ie7c8552b6b4e7ccb393cb09f5f0ca9b00336c714
Reviewed-by: thiago
Reviewed-on: http://codereview.qt.nokia.com/1988
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Olivier Goffart <olivier.goffart@nokia.com>
This commit is contained in:
Olivier Goffart 2011-07-21 16:39:55 +02:00 committed by Qt by Nokia
parent 769f522342
commit 7fc3203062
2 changed files with 7 additions and 10 deletions

View File

@ -108,13 +108,12 @@ QT_BEGIN_NAMESPACE
*/ */
/*! \internal /*! \internal
Note: The len contains the ending \0
*/ */
void QAbstractConcatenable::convertFromAscii(const char *a, int len, QChar *&out) void QAbstractConcatenable::convertFromAscii(const char *a, int len, QChar *&out)
{ {
#ifndef QT_NO_TEXTCODEC #ifndef QT_NO_TEXTCODEC
if (QString::codecForCStrings && len) { if (QString::codecForCStrings && len) {
QString tmp = QString::fromAscii(a, len > 0 ? len - 1 : -1); QString tmp = QString::fromAscii(a, len > 0 ? len : -1);
memcpy(out, reinterpret_cast<const char *>(tmp.constData()), sizeof(QChar) * tmp.size()); memcpy(out, reinterpret_cast<const char *>(tmp.constData()), sizeof(QChar) * tmp.size());
out += tmp.length(); out += tmp.length();
return; return;
@ -126,7 +125,7 @@ void QAbstractConcatenable::convertFromAscii(const char *a, int len, QChar *&out
while (*a) while (*a)
*out++ = QLatin1Char(*a++); *out++ = QLatin1Char(*a++);
} else { } else {
for (int i = 0; i < len - 1; ++i) for (int i = 0; i < len; ++i)
*out++ = QLatin1Char(a[i]); *out++ = QLatin1Char(a[i]);
} }
} }

View File

@ -294,7 +294,7 @@ template <int N> struct QConcatenable<char[N]> : private QAbstractConcatenable
#ifndef QT_NO_CAST_FROM_ASCII #ifndef QT_NO_CAST_FROM_ASCII
static inline void QT_ASCII_CAST_WARN appendTo(const char a[N], QChar *&out) static inline void QT_ASCII_CAST_WARN appendTo(const char a[N], QChar *&out)
{ {
QAbstractConcatenable::convertFromAscii(a, N, out); QAbstractConcatenable::convertFromAscii(a, N - 1, out);
} }
#endif #endif
static inline void appendTo(const char a[N], char *&out) static inline void appendTo(const char a[N], char *&out)
@ -313,7 +313,7 @@ template <int N> struct QConcatenable<const char[N]> : private QAbstractConcaten
#ifndef QT_NO_CAST_FROM_ASCII #ifndef QT_NO_CAST_FROM_ASCII
static inline void QT_ASCII_CAST_WARN appendTo(const char a[N], QChar *&out) static inline void QT_ASCII_CAST_WARN appendTo(const char a[N], QChar *&out)
{ {
QAbstractConcatenable::convertFromAscii(a, N, out); QAbstractConcatenable::convertFromAscii(a, N - 1, out);
} }
#endif #endif
static inline void appendTo(const char a[N], char *&out) static inline void appendTo(const char a[N], char *&out)
@ -349,10 +349,9 @@ template <> struct QConcatenable<QByteArray> : private QAbstractConcatenable
enum { ExactSize = false }; enum { ExactSize = false };
static int size(const QByteArray &ba) { return ba.size(); } static int size(const QByteArray &ba) { return ba.size(); }
#ifndef QT_NO_CAST_FROM_ASCII #ifndef QT_NO_CAST_FROM_ASCII
static inline void appendTo(const QByteArray &ba, QChar *&out) static inline QT_ASCII_CAST_WARN void appendTo(const QByteArray &ba, QChar *&out)
{ {
// adding 1 because convertFromAscii expects the size including the null-termination QAbstractConcatenable::convertFromAscii(ba.constData(), ba.size(), out);
QAbstractConcatenable::convertFromAscii(ba.constData(), ba.size() + 1, out);
} }
#endif #endif
static inline void appendTo(const QByteArray &ba, char *&out) static inline void appendTo(const QByteArray &ba, char *&out)
@ -373,8 +372,7 @@ template <int N> struct QConcatenable<QConstByteArrayDataPtr<N> > : private QAbs
#ifndef QT_NO_CAST_FROM_ASCII #ifndef QT_NO_CAST_FROM_ASCII
static inline QT_ASCII_CAST_WARN void appendTo(const type &a, QChar *&out) static inline QT_ASCII_CAST_WARN void appendTo(const type &a, QChar *&out)
{ {
// adding 1 because convertFromAscii expects the size including the null-termination QAbstractConcatenable::convertFromAscii(a.ptr->data, N, out);
QAbstractConcatenable::convertFromAscii(a.ptr->data, N + 1, out);
} }
#endif #endif
static inline void appendTo(const type &ba, char *&out) static inline void appendTo(const type &ba, char *&out)