summaryrefslogtreecommitdiffabout
authorzautrix <zautrix>2004-07-05 13:18:57 (UTC)
committer zautrix <zautrix>2004-07-05 13:18:57 (UTC)
commitca6ce5868aef5e925ff2e61d363f71e43d2b7d7b (patch) (unidiff)
tree5cb350d3a9bd3451fcf5184a2dd8d36ddd330f0e
parent93f9b1e0a8935210b03a094ce18949b7197041aa (diff)
downloadkdepimpi-ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b.zip
kdepimpi-ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b.tar.gz
kdepimpi-ca6ce5868aef5e925ff2e61d363f71e43d2b7d7b.tar.bz2
Fix of endless loop when removin resources
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kconfig.cpp9
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
@@ -222,285 +222,288 @@ void KConfig::writeEntry( const QString & e , const QFont & f )
222 222
223void KConfig::writeEntry( const QString &key, const QDateTime &dt ) 223void KConfig::writeEntry( const QString &key, const QDateTime &dt )
224{ 224{
225 mDateTimeMap.insert( mGroup + key, dt ); 225 mDateTimeMap.insert( mGroup + key, dt );
226} 226}
227 227
228void KConfig::load() 228void KConfig::load()
229{ 229{
230 kdDebug() << "KConfig::load(): " << mFileName << endl; 230 kdDebug() << "KConfig::load(): " << mFileName << endl;
231 231
232 QFile f( mFileName ); 232 QFile f( mFileName );
233 if ( !f.open( IO_ReadOnly ) ) { 233 if ( !f.open( IO_ReadOnly ) ) {
234 qDebug("KConfig: could not open file %s ",mFileName.latin1() ); 234 qDebug("KConfig: could not open file %s ",mFileName.latin1() );
235 return; 235 return;
236 } 236 }
237 237
238 mBoolMap.clear(); 238 mBoolMap.clear();
239 mStringMap.clear(); 239 mStringMap.clear();
240 240
241 QTextStream t( &f ); 241 QTextStream t( &f );
242 242
243 QString line = t.readLine(); 243 QString line = t.readLine();
244 244
245 while ( !line.isNull() ) { 245 while ( !line.isNull() ) {
246 QStringList tokens = QStringList::split( ",", line ); 246 QStringList tokens = QStringList::split( ",", line );
247 if ( tokens[0] == "bool" ) { 247 if ( tokens[0] == "bool" ) {
248 bool value = false; 248 bool value = false;
249 if ( tokens[2] == "1" ) value = true; 249 if ( tokens[2] == "1" ) value = true;
250 mBoolMap.insert( tokens[1], value ); 250 mBoolMap.insert( tokens[1], value );
251 } else if ( tokens[0] == "QString" ) { 251 } else if ( tokens[0] == "QString" ) {
252 QString value = tokens[2]; 252 QString value = tokens[2];
253 mStringMap.insert( tokens[1], value ); 253 mStringMap.insert( tokens[1], value );
254 } else if ( tokens[0] == "QDateTime" ) { 254 } else if ( tokens[0] == "QDateTime" ) {
255#if 0 255#if 0
256 int year = tokens[2].toInt(); 256 int year = tokens[2].toInt();
257 QDateTime dt( QDate( year, 257 QDateTime dt( QDate( year,
258 tokens[3].toInt(), 258 tokens[3].toInt(),
259 tokens[4].toInt() ), 259 tokens[4].toInt() ),
260 QTime( tokens[5].toInt(), tokens[6].toInt(), 260 QTime( tokens[5].toInt(), tokens[6].toInt(),
261 tokens[7].toInt() ) ); 261 tokens[7].toInt() ) );
262 mDateTimeMap.insert( tokens[1], dt ); 262 mDateTimeMap.insert( tokens[1], dt );
263#endif 263#endif
264 } 264 }
265 265
266 line = t.readLine(); 266 line = t.readLine();
267 } 267 }
268} 268}
269 269
270void KConfig::sync() 270void KConfig::sync()
271{ 271{
272 272
273 if ( !mDirty ) return; 273 if ( !mDirty ) return;
274 //qDebug("KConfig::sync() %s ",mFileName.latin1() ); 274 //qDebug("KConfig::sync() %s ",mFileName.latin1() );
275 //kdDebug() << "KConfig::sync(): " << mFileName << endl; 275 //kdDebug() << "KConfig::sync(): " << mFileName << endl;
276 276
277//US I took the following code from a newer version of KDE 277//US I took the following code from a newer version of KDE
278 // Create the containing dir if needed 278 // Create the containing dir if needed
279 KURL path; 279 KURL path;
280 path.setPath(mFileName); 280 path.setPath(mFileName);
281 QString dir=path.directory(); 281 QString dir=path.directory();
282 KStandardDirs::makeDir(dir); 282 KStandardDirs::makeDir(dir);
283 283
284 QFile f( mFileName ); 284 QFile f( mFileName );
285 if ( !f.open( IO_WriteOnly ) ) { 285 if ( !f.open( IO_WriteOnly ) ) {
286 286
287 qDebug("KConfig::sync() Can't open file %s ",mFileName.latin1() ); 287 qDebug("KConfig::sync() Can't open file %s ",mFileName.latin1() );
288 288
289 return; 289 return;
290 } 290 }
291 291
292 QTextStream t( &f ); 292 QTextStream t( &f );
293 293
294 QMap<QString,bool>::ConstIterator itBool; 294 QMap<QString,bool>::ConstIterator itBool;
295 for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) { 295 for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) {
296 t << "bool," << itBool.key() << "," << ( *itBool ? "1" : "0" ) << endl; 296 t << "bool," << itBool.key() << "," << ( *itBool ? "1" : "0" ) << endl;
297 } 297 }
298 298
299 QMap<QString,QString>::ConstIterator itString; 299 QMap<QString,QString>::ConstIterator itString;
300 for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) { 300 for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) {
301 t << "QString," << itString.key() << "," << (*itString ) << endl; 301 t << "QString," << itString.key() << "," << (*itString ) << endl;
302 } 302 }
303 303
304 QMap<QString,QDateTime>::ConstIterator itDateTime; 304 QMap<QString,QDateTime>::ConstIterator itDateTime;
305 for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) { 305 for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) {
306 QDateTime dt = *itDateTime; 306 QDateTime dt = *itDateTime;
307 t << "QDateTime," << itDateTime.key() << "," 307 t << "QDateTime," << itDateTime.key() << ","
308 << dt.date().year() << "," 308 << dt.date().year() << ","
309 << dt.date().month() << "," 309 << dt.date().month() << ","
310 << dt.date().day() << "," 310 << dt.date().day() << ","
311 << dt.time().hour() << "," 311 << dt.time().hour() << ","
312 << dt.time().minute() << "," 312 << dt.time().minute() << ","
313 << dt.time().second() << endl; 313 << dt.time().second() << endl;
314 } 314 }
315 315
316 f.close(); 316 f.close();
317 317
318 mDirty = false; 318 mDirty = false;
319} 319}
320 320
321 321
322//US I took the following deleteGroup method from a newer version from KDE. 322//US I took the following deleteGroup method from a newer version from KDE.
323/** 323/**
324 * Deletes a configuration entry group 324 * Deletes a configuration entry group
325 * 325 *
326 * If the group is not empty and bDeep is false, nothing gets 326 * If the group is not empty and bDeep is false, nothing gets
327 * deleted and false is returned. 327 * deleted and false is returned.
328 * If this group is the current group and it is deleted, the 328 * If this group is the current group and it is deleted, the
329 * current group is undefined and should be set with setGroup() 329 * current group is undefined and should be set with setGroup()
330 * before the next operation on the configuration object. 330 * before the next operation on the configuration object.
331 * 331 *
332 * @param group The name of the group 332 * @param group The name of the group
333 * returns true if we deleted at least one entry. 333 * returns true if we deleted at least one entry.
334 */ 334 */
335bool KConfig::deleteGroup( const QString& group) 335bool KConfig::deleteGroup( const QString& group)
336{ 336{
337 bool dirty = false; 337 bool dirty = false;
338 int pos; 338 int pos;
339 339
340 QMap<QString,bool>::Iterator itBool = mBoolMap.begin(); 340 QMap<QString,bool>::Iterator itBool = mBoolMap.begin();
341 QMap<QString,bool>::Iterator delBool; 341 QMap<QString,bool>::Iterator delBool;
342 342
343 while ( itBool != mBoolMap.end() ) { 343 while ( itBool != mBoolMap.end() ) {
344 pos = itBool.key().find( group ); 344 pos = itBool.key().find( group );
345 if (pos == 0) { 345 if (pos == 0) {
346 delBool = itBool; 346 delBool = itBool;
347 ++itBool; 347 ++itBool;
348 mBoolMap.remove(delBool); 348 mBoolMap.remove(delBool);
349 dirty = true; 349 dirty = true;
350 } 350 } else
351 ++itBool;
351 352
352 } 353 }
353 /* 354 /*
354 for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) 355 for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool )
355 { 356 {
356 pos = itBool.key().find( group ); 357 pos = itBool.key().find( group );
357 if (pos == 0) { 358 if (pos == 0) {
358 mBoolMap.remove(itBool); 359 mBoolMap.remove(itBool);
359 dirty = true; 360 dirty = true;
360 } 361 }
361 } 362 }
362 */ 363 */
363 QMap<QString,QString>::Iterator itString = mStringMap.begin(); 364 QMap<QString,QString>::Iterator itString = mStringMap.begin();
364 QMap<QString,QString>::Iterator delString ; 365 QMap<QString,QString>::Iterator delString ;
365 while( itString != mStringMap.end() ) { 366 while( itString != mStringMap.end() ) {
366 pos = itString.key().find( group ); 367 pos = itString.key().find( group );
367 if (pos == 0) { 368 if (pos == 0) {
368 delString = itString; 369 delString = itString;
369 ++itString; 370 ++itString;
370 mStringMap.remove(delString); 371 mStringMap.remove(delString);
371 //qDebug("delte++++++++++++++++++ "); 372 //qDebug("delte++++++++++++++++++ ");
372 dirty = true; 373 dirty = true;
373 } 374 } else
375 ++itString;
374 376
375 } 377 }
376 /* this leads to a memory access violation 378 /* this leads to a memory access violation
377 for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) 379 for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString )
378 { 380 {
379 pos = itString.key().find( group ); 381 pos = itString.key().find( group );
380 if (pos == 0) { 382 if (pos == 0) {
381 mStringMap.remove(itString); 383 mStringMap.remove(itString);
382 dirty = true; 384 dirty = true;
383 } 385 }
384 } 386 }
385 */ 387 */
386 QMap<QString,QDateTime>::Iterator itDateTime= mDateTimeMap.begin(); 388 QMap<QString,QDateTime>::Iterator itDateTime= mDateTimeMap.begin();
387 QMap<QString,QDateTime>::Iterator delDateTime; 389 QMap<QString,QDateTime>::Iterator delDateTime;
388 while ( itDateTime != mDateTimeMap.end() ) { 390 while ( itDateTime != mDateTimeMap.end() ) {
389 pos = itDateTime.key().find( group ); 391 pos = itDateTime.key().find( group );
390 if (pos == 0) { 392 if (pos == 0) {
391 delDateTime = itDateTime; 393 delDateTime = itDateTime;
392 ++itDateTime; 394 ++itDateTime;
393 mDateTimeMap.remove(delDateTime); 395 mDateTimeMap.remove(delDateTime);
394 dirty = true; 396 dirty = true;
395 } 397 } else
398 ++itDateTime;
396 399
397 } 400 }
398 /* 401 /*
399 for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) 402 for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime )
400 { 403 {
401 pos = itDateTime.key().find( group ); 404 pos = itDateTime.key().find( group );
402 if (pos == 0) { 405 if (pos == 0) {
403 mDateTimeMap.remove(itDateTime); 406 mDateTimeMap.remove(itDateTime);
404 dirty = true; 407 dirty = true;
405 } 408 }
406 } 409 }
407 */ 410 */
408 411
409 if (dirty) 412 if (dirty)
410 mDirty = true; 413 mDirty = true;
411 414
412 return dirty; 415 return dirty;
413 416
414} 417}
415 418
416//US I took the following hasGroup method from a newer version from KDE. 419//US I took the following hasGroup method from a newer version from KDE.
417 /** 420 /**
418 * Returns true if the specified group is known about. 421 * Returns true if the specified group is known about.
419 * 422 *
420 * @param group The group to search for. 423 * @param group The group to search for.
421 * @return Whether the group exists. 424 * @return Whether the group exists.
422 */ 425 */
423bool KConfig::hasGroup(const QString &group) const 426bool KConfig::hasGroup(const QString &group) const
424{ 427{
425 QMap<QString,bool>::ConstIterator itBool; 428 QMap<QString,bool>::ConstIterator itBool;
426 for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool ) 429 for( itBool = mBoolMap.begin(); itBool != mBoolMap.end(); ++itBool )
427 { 430 {
428 if (itBool.key().find( group ) == 0) { 431 if (itBool.key().find( group ) == 0) {
429 return true; 432 return true;
430 } 433 }
431 } 434 }
432 435
433 QMap<QString,QString>::ConstIterator itString; 436 QMap<QString,QString>::ConstIterator itString;
434 for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString ) 437 for( itString = mStringMap.begin(); itString != mStringMap.end(); ++itString )
435 { 438 {
436 if (itString.key().find( group ) == 0) { 439 if (itString.key().find( group ) == 0) {
437 return true; 440 return true;
438 } 441 }
439 } 442 }
440 443
441 QMap<QString,QDateTime>::ConstIterator itDateTime; 444 QMap<QString,QDateTime>::ConstIterator itDateTime;
442 for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime ) 445 for( itDateTime = mDateTimeMap.begin(); itDateTime != mDateTimeMap.end(); ++itDateTime )
443 { 446 {
444 if (itDateTime.key().find( group ) == 0) { 447 if (itDateTime.key().find( group ) == 0) {
445 return true; 448 return true;
446 } 449 }
447 } 450 }
448 451
449 return false; 452 return false;
450} 453}
451 454
452void KConfig::deleteEntry( const QString &key) 455void KConfig::deleteEntry( const QString &key)
453{ 456{
454 bool dirty = false; 457 bool dirty = false;
455 458
456 QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key ); 459 QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key );
457 if ( itBool != mBoolMap.end() ) { 460 if ( itBool != mBoolMap.end() ) {
458 mBoolMap.remove(itBool); 461 mBoolMap.remove(itBool);
459 dirty = true; 462 dirty = true;
460 } 463 }
461 464
462 465
463 QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key ); 466 QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key );
464 if ( itString != mStringMap.end() ) { 467 if ( itString != mStringMap.end() ) {
465 mStringMap.remove(itString); 468 mStringMap.remove(itString);
466 dirty = true; 469 dirty = true;
467 } 470 }
468 471
469 472
470 QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key ); 473 QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key );
471 if ( itDateTime != mDateTimeMap.end() ) { 474 if ( itDateTime != mDateTimeMap.end() ) {
472 mDateTimeMap.remove(itDateTime); 475 mDateTimeMap.remove(itDateTime);
473 dirty = true; 476 dirty = true;
474 } 477 }
475 478
476 if (dirty) 479 if (dirty)
477 mDirty = true; 480 mDirty = true;
478 481
479} 482}
480 483
481//US 484//US
482QString KConfig::getFileName() 485QString KConfig::getFileName()
483{ 486{
484 return mFileName; 487 return mFileName;
485} 488}
486 489
487bool KConfig::hasKey( const QString &key) 490bool KConfig::hasKey( const QString &key)
488{ 491{
489 QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key ); 492 QMap<QString,bool>::Iterator itBool = mBoolMap.find( mGroup + key );
490 if ( itBool != mBoolMap.end() ) { 493 if ( itBool != mBoolMap.end() ) {
491 return true; 494 return true;
492 } 495 }
493 496
494 QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key ); 497 QMap<QString,QString>::Iterator itString = mStringMap.find( mGroup + key );
495 if ( itString != mStringMap.end() ) { 498 if ( itString != mStringMap.end() ) {
496 return true; 499 return true;
497 } 500 }
498 501
499 QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key ); 502 QMap<QString,QDateTime>::Iterator itDateTime = mDateTimeMap.find( mGroup + key );
500 if ( itDateTime != mDateTimeMap.end() ) { 503 if ( itDateTime != mDateTimeMap.end() ) {
501 return true; 504 return true;
502 } 505 }
503 506
504 return false; 507 return false;
505} 508}
506 509