-rw-r--r-- | microkde/kdecore/klibloader.cpp | 14 |
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 | */ |
454 | return tmp; | 454 | return tmp; |
455 | } | 455 | } |
456 | 456 | ||
457 | 457 | ||
458 | KLibrary* KLibLoader::library( const char *name ) | 458 | KLibrary* 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 | ||
526 | QString KLibLoader::lastErrorMessage() const | 518 | QString KLibLoader::lastErrorMessage() const |
527 | { | 519 | { |
528 | return d->errorMessage; | 520 | return d->errorMessage; |
529 | } | 521 | } |
530 | 522 | ||
531 | void KLibLoader::unloadLibrary( const char *libname ) | 523 | void 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 | ||
548 | KLibFactory* KLibLoader::factory( const char* name ) | 540 | KLibFactory* 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 | ||
557 | void KLibLoader::slotLibraryDestroyed() | 549 | void KLibLoader::slotLibraryDestroyed() |