author | zautrix <zautrix> | 2004-07-05 13:18:57 (UTC) |
---|---|---|
committer | zautrix <zautrix> | 2004-07-05 13:18:57 (UTC) |
commit | ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b (patch) (side-by-side diff) | |
tree | 5cb350d3a9bd3451fcf5184a2dd8d36ddd330f0e /microkde | |
parent | 93f9b1e0a8935210b03a094ce18949b7197041aa (diff) | |
download | kdepimpi-ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b.zip kdepimpi-ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b.tar.gz kdepimpi-ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b.tar.bz2 |
Fix of endless loop when removin resources
-rw-r--r-- | microkde/kconfig.cpp | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/microkde/kconfig.cpp b/microkde/kconfig.cpp index f8e362e..71db891 100644 --- a/microkde/kconfig.cpp +++ b/microkde/kconfig.cpp @@ -254,238 +254,241 @@ void KConfig::load() } else if ( tokens[0] == "QDateTime" ) { #if 0 int year = tokens[2].toInt(); QDateTime dt( QDate( year, tokens[3].toInt(), tokens[4].toInt() ), QTime( tokens[5].toInt(), tokens[6].toInt(), tokens[7].toInt() ) ); mDateTimeMap.insert( tokens[1], dt ); #endif } line = t.readLine(); } } void KConfig::sync() { if ( !mDirty ) return; //qDebug("KConfig::sync() %s ",mFileName.latin1() ); //kdDebug() << "KConfig::sync(): " << mFileName << endl; //US I took the following code from a newer version of KDE // Create the containing dir if needed KURL path; path.setPath(mFileName); QString dir=path.directory(); KStandardDirs::makeDir(dir); QFile f( mFileName ); if ( !f.open( IO_WriteOnly ) ) { qDebug("KConfig::sync() Can't open file %s ",mFileName.latin1() ); return; } QTextStream t( &f ); QMap<QString,bool>::ConstIterator itBool; for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) { t << "bool," << itBool.key() << "," << ( *itBool ? "1" : "0" ) << endl; } QMap<QString,QString>::ConstIterator itString; for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) { t << "QString," << itString.key() << "," << (*itString ) << endl; } QMap<QString,QDateTime>::ConstIterator itDateTime; for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) { QDateTime dt = *itDateTime; t << "QDateTime," << itDateTime.key() << "," << dt.date().year() << "," << dt.date().month() << "," << dt.date().day() << "," << dt.time().hour() << "," << dt.time().minute() << "," << dt.time().second() << endl; } f.close(); mDirty = false; } //US I took the following deleteGroup method from a newer version from KDE. /** * Deletes a configuration entry group * * If the group is not empty and bDeep is false, nothing gets * deleted and false is returned. * If this group is the current group and it is deleted, the * current group is undefined and should be set with setGroup() * before the next operation on the configuration object. * * @param group The name of the group * returns true if we deleted at least one entry. */ bool KConfig::deleteGroup( const QString& group) { bool dirty = false; int pos; QMap<QString,bool>::Iterator itBool = mBoolMap.begin(); QMap<QString,bool>::Iterator delBool; while ( itBool != mBoolMap.end() ) { pos = itBool.key().find( group ); if (pos == 0) { delBool = itBool; ++itBool; mBoolMap.remove(delBool); dirty = true; - } + } else + ++itBool; } /* for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) { pos = itBool.key().find( group ); if (pos == 0) { mBoolMap.remove(itBool); dirty = true; } } */ QMap<QString,QString>::Iterator itString = mStringMap.begin(); QMap<QString,QString>::Iterator delString ; while( itString != mStringMap.end() ) { pos = itString.key().find( group ); if (pos == 0) { delString = itString; ++itString; mStringMap.remove(delString); //qDebug("delte++++++++++++++++++ "); dirty = true; - } + } else + ++itString; } /* this leads to a memory access violation for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) { pos = itString.key().find( group ); if (pos == 0) { mStringMap.remove(itString); dirty = true; } } */ QMap<QString,QDateTime>::Iterator itDateTime= mDateTimeMap.begin(); QMap<QString,QDateTime>::Iterator delDateTime; while ( itDateTime != mDateTimeMap.end() ) { pos = itDateTime.key().find( group ); if (pos == 0) { delDateTime = itDateTime; ++itDateTime; mDateTimeMap.remove(delDateTime); dirty = true; - } + } else + ++itDateTime; } /* for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) { pos = itDateTime.key().find( group ); if (pos == 0) { mDateTimeMap.remove(itDateTime); dirty = true; } } */ if (dirty) mDirty = true; return dirty; } //US I took the following hasGroup method from a newer version from KDE. /** * Returns true if the specified group is known about. * * @param group The group to search for. * @return Whether the group exists. */ bool KConfig::hasGroup(const QString &group) const { QMap<QString,bool>::ConstIterator itBool; for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) { if (itBool.key().find( group ) == 0) { return true; } } QMap<QString,QString>::ConstIterator itString; for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) { if (itString.key().find( group ) == 0) { return true; } } QMap<QString,QDateTime>::ConstIterator itDateTime; for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) { if (itDateTime.key().find( group ) == 0) { return true; } } return false; } void KConfig::deleteEntry( const QString &key) { bool dirty = false; QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key ); if ( itBool != mBoolMap.end() ) { mBoolMap.remove(itBool); dirty = true; } QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key ); if ( itString != mStringMap.end() ) { mStringMap.remove(itString); dirty = true; } QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key ); if ( itDateTime != mDateTimeMap.end() ) { mDateTimeMap.remove(itDateTime); dirty = true; } if (dirty) mDirty = true; } //US QString KConfig::getFileName() { return mFileName; } bool KConfig::hasKey( const QString &key) { QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key ); if ( itBool != mBoolMap.end() ) { return true; |