Make use of QString::utf8() and QString::local8Bit() safe for conversion to char*.

Signed-off-by: Slávek Banko <slavek.banko@axis.cz>
(based on commit 0a1966b25e)
v3.5.13-sru
Slávek Banko 6 years ago
parent 6c6fcc79bf
commit 80d5792c61
No known key found for this signature in database
GPG Key ID: 608F5293A04BE668

@ -5768,6 +5768,10 @@ QCString QString::utf8() const
++ch; ++ch;
} }
rstr.truncate( cursor - (uchar*)rstr.data() ); rstr.truncate( cursor - (uchar*)rstr.data() );
if (!d->cString) {
d->cString = new QCString;
}
*d->cString = rstr;
return rstr; return rstr;
} }
@ -5964,23 +5968,28 @@ QString QString::fromLatin1( const char* chars, int len )
QCString QString::local8Bit() const QCString QString::local8Bit() const
{ {
if (!d->cString) {
d->cString = new QCString;
}
#ifdef QT_NO_TEXTCODEC #ifdef QT_NO_TEXTCODEC
return latin1(); *d->cString = QCString(latin1());
return *d->cString;
#else #else
#ifdef Q_WS_X11 #ifdef Q_WS_X11
QTextCodec* codec = QTextCodec::codecForLocale(); QTextCodec* codec = QTextCodec::codecForLocale();
return codec *d->cString = codec ? codec->fromUnicode(*this) : QCString(latin1());
? codec->fromUnicode(*this) return *d->cString;
: QCString(latin1());
#endif #endif
#if defined( Q_WS_MACX ) #if defined( Q_WS_MACX )
return utf8(); return utf8();
#endif #endif
#if defined( Q_WS_MAC9 ) #if defined( Q_WS_MAC9 )
return QCString(latin1()); //I'm evil.. *d->cString = QCString(latin1()); //I'm evil..
return *d->cString;
#endif #endif
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
return isNull() ? QCString("") : qt_winQString2MB( *this ); *d->cString = isNull() ? QCString("") : qt_winQString2MB( *this );
return *d->cString;
#endif #endif
#ifdef Q_WS_QWS #ifdef Q_WS_QWS
return utf8(); // ### if there is any 8 bit format supported? return utf8(); // ### if there is any 8 bit format supported?

@ -360,11 +360,13 @@ inline bool operator>( QChar c1, QChar c2 ) { return !(c2>=c1); }
// internal // internal
struct Q_EXPORT QStringData : public QShared { struct Q_EXPORT QStringData : public QShared {
QStringData() : QStringData() :
QShared(), unicode(0), ascii(0), len(0), issimpletext(TRUE), maxl(0), islatin1(FALSE) { ref(); } QShared(), unicode(0), ascii(0), len(0), issimpletext(TRUE), maxl(0), islatin1(FALSE), cString(0) { ref(); }
QStringData(QChar *u, uint l, uint m) : QStringData(QChar *u, uint l, uint m) :
QShared(), unicode(u), ascii(0), len(l), issimpletext(FALSE), maxl(m), islatin1(FALSE) { } QShared(), unicode(u), ascii(0), len(l), issimpletext(FALSE), maxl(m), islatin1(FALSE), cString(0) { }
~QStringData() { if ( unicode ) delete[] ((char*)unicode); ~QStringData() { if ( unicode ) delete[] ((char*)unicode);
if ( ascii ) delete[] ascii; } if ( ascii ) delete[] ascii;
if (cString) delete cString;
}
void deleteSelf(); void deleteSelf();
QChar *unicode; QChar *unicode;
@ -374,6 +376,10 @@ struct Q_EXPORT QStringData : public QShared {
delete [] ascii; delete [] ascii;
ascii = 0; ascii = 0;
} }
if (cString) {
delete cString;
cString = 0;
}
issimpletext = FALSE; issimpletext = FALSE;
} }
#ifdef Q_OS_MAC9 #ifdef Q_OS_MAC9
@ -389,6 +395,8 @@ struct Q_EXPORT QStringData : public QShared {
#endif #endif
uint islatin1 : 1; uint islatin1 : 1;
QCString *cString;
private: private:
#if defined(Q_DISABLE_COPY) #if defined(Q_DISABLE_COPY)
QStringData( const QStringData& ); QStringData( const QStringData& );

Loading…
Cancel
Save