Safe conversion TQString to char* #6

Merged
SlavekB merged 1 commits from feat/safe-TQString-char-conversions into master 5 years ago

@ -388,6 +388,7 @@ struct Q_EXPORT TQStringData : public TQShared {
bool security_unpaged : 1; bool security_unpaged : 1;
TQMutex* mutex; TQMutex* mutex;
TQCString *cString;
private: private:
#if defined(TQ_DISABLE_COPY) #if defined(TQ_DISABLE_COPY)

@ -1052,7 +1052,8 @@ TQStringData::TQStringData() : TQShared(),
issimpletext(TRUE), issimpletext(TRUE),
maxl(0), maxl(0),
islatin1(FALSE), islatin1(FALSE),
security_unpaged(FALSE) { security_unpaged(FALSE),
cString(0) {
#if defined(TQT_THREAD_SUPPORT) && defined(MAKE_QSTRING_THREAD_SAFE) #if defined(TQT_THREAD_SUPPORT) && defined(MAKE_QSTRING_THREAD_SAFE)
mutex = new TQMutex(FALSE); mutex = new TQMutex(FALSE);
#endif // TQT_THREAD_SUPPORT && MAKE_QSTRING_THREAD_SAFE #endif // TQT_THREAD_SUPPORT && MAKE_QSTRING_THREAD_SAFE
@ -1066,7 +1067,8 @@ TQStringData::TQStringData(TQChar *u, uint l, uint m) : TQShared(),
issimpletext(FALSE), issimpletext(FALSE),
maxl(m), maxl(m),
islatin1(FALSE), islatin1(FALSE),
security_unpaged(FALSE) { security_unpaged(FALSE),
cString(0) {
#if defined(TQT_THREAD_SUPPORT) && defined(MAKE_QSTRING_THREAD_SAFE) #if defined(TQT_THREAD_SUPPORT) && defined(MAKE_QSTRING_THREAD_SAFE)
mutex = new TQMutex(FALSE); mutex = new TQMutex(FALSE);
#endif // TQT_THREAD_SUPPORT && MAKE_QSTRING_THREAD_SAFE #endif // TQT_THREAD_SUPPORT && MAKE_QSTRING_THREAD_SAFE
@ -1084,6 +1086,9 @@ TQStringData::~TQStringData() {
if ( ascii ) { if ( ascii ) {
delete[] ascii; delete[] ascii;
} }
if (cString) {
delete cString;
}
#if defined(TQT_THREAD_SUPPORT) && defined(MAKE_QSTRING_THREAD_SAFE) #if defined(TQT_THREAD_SUPPORT) && defined(MAKE_QSTRING_THREAD_SAFE)
if ( mutex ) { if ( mutex ) {
delete mutex; delete mutex;
@ -1097,6 +1102,10 @@ void TQStringData::setDirty() {
delete [] ascii; delete [] ascii;
ascii = 0; ascii = 0;
} }
if (cString) {
delete cString;
cString = 0;
}
issimpletext = FALSE; issimpletext = FALSE;
} }
@ -6034,6 +6043,10 @@ TQCString TQString::utf8() const
++ch; ++ch;
} }
rstr.truncate( cursor - (uchar*)rstr.data() ); rstr.truncate( cursor - (uchar*)rstr.data() );
if (!d->cString) {
d->cString = new TQCString;
}
*d->cString = rstr;
return rstr; return rstr;
} }
@ -6235,23 +6248,28 @@ TQString TQString::fromLatin1( const char* chars, int len )
TQCString TQString::local8Bit() const TQCString TQString::local8Bit() const
{ {
if (!d->cString) {
d->cString = new TQCString;
}
#ifdef TQT_NO_TEXTCODEC #ifdef TQT_NO_TEXTCODEC
return latin1(); *d->cString = TQCString(latin1());
return *d->cString;
#else #else
#ifdef Q_WS_X11 #ifdef Q_WS_X11
TQTextCodec* codec = TQTextCodec::codecForLocale(); TQTextCodec* codec = TQTextCodec::codecForLocale();
return codec *d->cString = codec ? codec->fromUnicode(*this) : TQCString(latin1());
? codec->fromUnicode(*this) return *d->cString;
: TQCString(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 TQCString(latin1()); //I'm evil.. *d->cString = TQCString(latin1()); //I'm evil..
return *d->cString;
#endif #endif
#ifdef Q_WS_WIN #ifdef Q_WS_WIN
return isNull() ? TQCString("") : qt_winTQString2MB( *this ); *d->cString = isNull() ? TQCString("") : qt_winTQString2MB( *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?

Loading…
Cancel
Save