summaryrefslogtreecommitdiffabout
path: root/microkde/kdecore
Unidiff
Diffstat (limited to 'microkde/kdecore') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/kdecore/klibloader.cpp14
1 files changed, 3 insertions, 11 deletions
diff --git a/microkde/kdecore/klibloader.cpp b/microkde/kdecore/klibloader.cpp
index 1394154..6d0475a 100644
--- a/microkde/kdecore/klibloader.cpp
+++ b/microkde/kdecore/klibloader.cpp
@@ -451,107 +451,99 @@ int olt_dlopen_flag = lt_dlopen_flag;
451/*US 451/*US
452 lt_dlopen_flag = olt_dlopen_flag; 452 lt_dlopen_flag = olt_dlopen_flag;
453*/ 453*/
454return tmp; 454return tmp;
455} 455}
456 456
457 457
458KLibrary* KLibLoader::library( const char *name ) 458KLibrary* KLibLoader::library( const char *name )
459{ 459{
460 if (!name) 460 if (!name)
461 return 0; 461 return 0;
462 462
463 KLibWrapPrivate* wrap = m_libs[name]; 463 KLibWrapPrivate* wrap = m_libs[name];
464 if (wrap) { 464 if (wrap) {
465 /* Nothing to do to load the library. */ 465 /* Nothing to do to load the library. */
466 wrap->ref_count++; 466 wrap->ref_count++;
467 return wrap->lib; 467 return wrap->lib;
468 } 468 }
469 469
470 /* Test if this library was loaded at some time, but got 470 /* Test if this library was loaded at some time, but got
471 unloaded meanwhile, whithout being dlclose()'ed. */ 471 unloaded meanwhile, whithout being dlclose()'ed. */
472 QPtrListIterator<KLibWrapPrivate> it(d->loaded_stack); 472 QPtrListIterator<KLibWrapPrivate> it(d->loaded_stack);
473 for (; it.current(); ++it) { 473 for (; it.current(); ++it) {
474 if (it.current()->name == name) 474 if (it.current()->name == name)
475 wrap = it.current(); 475 wrap = it.current();
476 } 476 }
477 477
478 if (wrap) { 478 if (wrap) {
479 d->pending_close.removeRef(wrap); 479 d->pending_close.removeRef(wrap);
480 if (!wrap->lib) { 480 if (!wrap->lib) {
481 /* This lib only was in loaded_stack, but not in m_libs. */ 481 /* This lib only was in loaded_stack, but not in m_libs. */
482 wrap->lib = new KLibrary( name, wrap->filename, wrap->handle ); 482 wrap->lib = new KLibrary( name, wrap->filename, wrap->handle );
483 } 483 }
484 wrap->ref_count++; 484 wrap->ref_count++;
485 } else { 485 } else {
486 QString libfile = findLibrary( name ); 486 QString libfile = findLibrary( name );
487 if ( libfile.isEmpty() ) 487 if ( libfile.isEmpty() )
488 return 0; 488 return 0;
489#ifdef DESKTOP_VERSION 489#ifdef DESKTOP_VERSION
490 QLibrary *qlib = new QLibrary( libfile.latin1() ); 490 QLibrary *qlib = new QLibrary( libfile.latin1() );
491#else 491#else
492 QLibrary *qlib = new QLibrary( libfile.latin1(), QLibrary::Immediately ); 492 QLibrary *qlib = new QLibrary( libfile.latin1(), QLibrary::Immediately );
493#endif 493#endif
494 494
495//US lt_dlhandle handle = lt_dlopen( libfile.latin1() ); 495//US lt_dlhandle handle = lt_dlopen( libfile.latin1() );
496//US if ( !handle ) 496//US if ( !handle )
497 if ( !qlib ) 497 if ( !qlib )
498 { 498 {
499//US const char* errmsg = lt_dlerror(); 499 qDebug( "KLibLoader::library could not load library: %s", libfile.latin1());
500 char* errmsg; 500 d->errorMessage = QString::null;
501 sprintf(errmsg, "KLibLoader::library could not load library: %s", libfile.latin1()); 501 return 0;
502 qDebug(errmsg);
503
504 if(errmsg)
505 d->errorMessage = QString::fromLatin1(errmsg);
506 else
507 d->errorMessage = QString::null;
508 kdWarning(150) << "library=" << name << ": file=" << libfile << ": " << d->errorMessage << endl;
509 return 0;
510 } 502 }
511 else 503 else
512 d->errorMessage = QString::null; 504 d->errorMessage = QString::null;
513 505
514 KLibrary *lib = new KLibrary( name, libfile, qlib ); 506 KLibrary *lib = new KLibrary( name, libfile, qlib );
515 wrap = new KLibWrapPrivate(lib, qlib); 507 wrap = new KLibWrapPrivate(lib, qlib);
516 d->loaded_stack.prepend(wrap); 508 d->loaded_stack.prepend(wrap);
517 } 509 }
518 m_libs.insert( name, wrap ); 510 m_libs.insert( name, wrap );
519 511
520 connect( wrap->lib, SIGNAL( destroyed() ), 512 connect( wrap->lib, SIGNAL( destroyed() ),
521 this, SLOT( slotLibraryDestroyed() ) ); 513 this, SLOT( slotLibraryDestroyed() ) );
522 514
523 return wrap->lib; 515 return wrap->lib;
524} 516}
525 517
526QString KLibLoader::lastErrorMessage() const 518QString KLibLoader::lastErrorMessage() const
527{ 519{
528 return d->errorMessage; 520 return d->errorMessage;
529} 521}
530 522
531void KLibLoader::unloadLibrary( const char *libname ) 523void KLibLoader::unloadLibrary( const char *libname )
532{ 524{
533 KLibWrapPrivate *wrap = m_libs[ libname ]; 525 KLibWrapPrivate *wrap = m_libs[ libname ];
534 if (!wrap) 526 if (!wrap)
535 return; 527 return;
536 if (--wrap->ref_count) 528 if (--wrap->ref_count)
537 return; 529 return;
538 530
539// kdDebug(150) << "closing library " << libname << endl; 531// kdDebug(150) << "closing library " << libname << endl;
540 532
541 m_libs.remove( libname ); 533 m_libs.remove( libname );
542 534
543 disconnect( wrap->lib, SIGNAL( destroyed() ), 535 disconnect( wrap->lib, SIGNAL( destroyed() ),
544 this, SLOT( slotLibraryDestroyed() ) ); 536 this, SLOT( slotLibraryDestroyed() ) );
545 close_pending( wrap ); 537 close_pending( wrap );
546} 538}
547 539
548KLibFactory* KLibLoader::factory( const char* name ) 540KLibFactory* KLibLoader::factory( const char* name )
549{ 541{
550 KLibrary* lib = library( name ); 542 KLibrary* lib = library( name );
551 if ( !lib ) 543 if ( !lib )
552 return 0; 544 return 0;
553 545
554 return lib->factory(); 546 return lib->factory();
555} 547}
556 548
557void KLibLoader::slotLibraryDestroyed() 549void KLibLoader::slotLibraryDestroyed()