summaryrefslogtreecommitdiff
authorsandman <sandman>2002-12-01 22:23:22 (UTC)
committer sandman <sandman>2002-12-01 22:23:22 (UTC)
commit184ab086906979cdb9c2cc8b601bcd0ecc095576 (patch) (unidiff)
tree5e5ac0e6051529253bf28d5a58ae74680a47b776
parent5a550802680d32ccb0ea0d596f514de7e13c45dc (diff)
downloadopie-184ab086906979cdb9c2cc8b601bcd0ecc095576.zip
opie-184ab086906979cdb9c2cc8b601bcd0ecc095576.tar.gz
opie-184ab086906979cdb9c2cc8b601bcd0ecc095576.tar.bz2
The new preload library has to be used always, because of some binary
incompatibility between apps built with older tcs and shared libs built with newer tcs. (see cvs comment for core/launcher/libpreload/preload.cpp)
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--library/global.cpp4
1 files changed, 1 insertions, 3 deletions
diff --git a/library/global.cpp b/library/global.cpp
index 42c2729..2162e02 100644
--- a/library/global.cpp
+++ b/library/global.cpp
@@ -561,100 +561,98 @@ void Global::invoke(const QString &c)
561 // If the channel is already register, the app is already running, so show it. 561 // If the channel is already register, the app is already running, so show it.
562 { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); } 562 { QCopEnvelope env( ("QPE/Application/" + ap).latin1(), "raise()" ); }
563 563
564 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 564 QCopEnvelope e("QPE/System", "notBusy(QString)" );
565 e << ap; 565 e << ap;
566 return; 566 return;
567 } 567 }
568 // XXX should unlock file /tmp/qcop-msg-ap 568 // XXX should unlock file /tmp/qcop-msg-ap
569 //see if it is being started 569 //see if it is being started
570 if ( StartingAppList::isStarting( ap ) ) { 570 if ( StartingAppList::isStarting( ap ) ) {
571 QCopEnvelope e("QPE/System", "notBusy(QString)" ); 571 QCopEnvelope e("QPE/System", "notBusy(QString)" );
572 e << ap; 572 e << ap;
573 return; 573 return;
574 } 574 }
575 575
576#endif 576#endif
577 577
578#ifdef QT_NO_QWS_MULTIPROCESS 578#ifdef QT_NO_QWS_MULTIPROCESS
579 QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 ); 579 QMessageBox::warning( 0, "Error", "Could not find the application " + c, "Ok", 0, 0, 0, 1 );
580#else 580#else
581 581
582 QStrList slist; 582 QStrList slist;
583 unsigned int j; 583 unsigned int j;
584 for ( j = 0; j < list.count(); j++ ) 584 for ( j = 0; j < list.count(); j++ )
585 slist.append( list[j].utf8() ); 585 slist.append( list[j].utf8() );
586 586
587 const char **args = new (const char *)[slist.count() + 1]; 587 const char **args = new (const char *)[slist.count() + 1];
588 for ( j = 0; j < slist.count(); j++ ) 588 for ( j = 0; j < slist.count(); j++ )
589 args[j] = slist.at(j); 589 args[j] = slist.at(j);
590 args[j] = NULL; 590 args[j] = NULL;
591 591
592#if !defined(QT_NO_COP) 592#if !defined(QT_NO_COP)
593 // an attempt to show a wait... 593 // an attempt to show a wait...
594 // more logic should be used, but this will be fine for the moment... 594 // more logic should be used, but this will be fine for the moment...
595 QCopEnvelope ( "QPE/System", "busy()" ); 595 QCopEnvelope ( "QPE/System", "busy()" );
596#endif 596#endif
597 597
598#ifdef HAVE_QUICKEXEC 598#ifdef HAVE_QUICKEXEC
599 QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so"; 599 QString libexe = qpeDir()+"/binlib/lib"+args[0] + ".so";
600 qDebug("libfile = %s", libexe.latin1() ); 600 qDebug("libfile = %s", libexe.latin1() );
601 if ( QFile::exists( libexe ) ) { 601 if ( QFile::exists( libexe ) ) {
602 qDebug("calling quickexec %s", libexe.latin1() ); 602 qDebug("calling quickexec %s", libexe.latin1() );
603 quickexecv( libexe.utf8().data(), (const char **)args ); 603 quickexecv( libexe.utf8().data(), (const char **)args );
604 } else 604 } else
605#endif 605#endif
606 { 606 {
607 char *oldpre = ::getenv ( "LD_PRELOAD" ); 607 char *oldpre = ::getenv ( "LD_PRELOAD" );
608 608
609 extern bool opie_block_style;
610
611 QString newpre = QPEApplication::qpeDir ( ) + "/lib/libpreload.so"; 609 QString newpre = QPEApplication::qpeDir ( ) + "/lib/libpreload.so";
612 if ( opie_block_style && QFile::exists ( newpre )) { 610 if ( QFile::exists ( newpre )) {
613 if ( oldpre && oldpre [0] ) 611 if ( oldpre && oldpre [0] )
614 newpre = newpre + ":" + oldpre; 612 newpre = newpre + ":" + oldpre;
615 ::setenv ( "LD_PRELOAD", newpre. latin1( ), 1 ); 613 ::setenv ( "LD_PRELOAD", newpre. latin1( ), 1 );
616 qDebug ( "\nPRELOADING\n" ); 614 qDebug ( "\nPRELOADING\n" );
617 } 615 }
618 616
619 if ( !::vfork() ) { 617 if ( !::vfork() ) {
620 for ( int fd = 3; fd < 100; fd++ ) 618 for ( int fd = 3; fd < 100; fd++ )
621 ::close( fd ); 619 ::close( fd );
622 ::setpgid( ::getpid(), ::getppid() ); 620 ::setpgid( ::getpid(), ::getppid() );
623 // Try bindir first, so that foo/bar works too 621 // Try bindir first, so that foo/bar works too
624 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args ); 622 ::execv( qpeDir()+"/bin/"+args[0], (char * const *)args );
625 ::execvp( args[0], (char * const *)args ); 623 ::execvp( args[0], (char * const *)args );
626 _exit( -1 ); 624 _exit( -1 );
627 } 625 }
628 if ( oldpre ) 626 if ( oldpre )
629 ::setenv ( "LD_PRELOAD", oldpre, 1 ); 627 ::setenv ( "LD_PRELOAD", oldpre, 1 );
630 else 628 else
631 ::unsetenv ( "LD_PRELOAD" ); 629 ::unsetenv ( "LD_PRELOAD" );
632 } 630 }
633 StartingAppList::add( list[0] ); 631 StartingAppList::add( list[0] );
634#endif //QT_NO_QWS_MULTIPROCESS 632#endif //QT_NO_QWS_MULTIPROCESS
635} 633}
636 634
637 635
638/*! 636/*!
639 Executes the application identfied by \a c, passing \a 637 Executes the application identfied by \a c, passing \a
640 document if it isn't null. 638 document if it isn't null.
641 639
642 Note that a better approach might be to send a QCop message to the 640 Note that a better approach might be to send a QCop message to the
643 application's QPE/Application/\e{appname} channel. 641 application's QPE/Application/\e{appname} channel.
644*/ 642*/
645void Global::execute( const QString &c, const QString& document ) 643void Global::execute( const QString &c, const QString& document )
646{ 644{
647 if ( qApp->type() != QApplication::GuiServer ) { 645 if ( qApp->type() != QApplication::GuiServer ) {
648 // ask the server to do the work 646 // ask the server to do the work
649#if !defined(QT_NO_COP) 647#if !defined(QT_NO_COP)
650 if ( document.isNull() ) { 648 if ( document.isNull() ) {
651 QCopEnvelope e( "QPE/System", "execute(QString)" ); 649 QCopEnvelope e( "QPE/System", "execute(QString)" );
652 e << c; 650 e << c;
653 } else { 651 } else {
654 QCopEnvelope e( "QPE/System", "execute(QString,QString)" ); 652 QCopEnvelope e( "QPE/System", "execute(QString,QString)" );
655 e << c << document; 653 e << c << document;
656 } 654 }
657#endif 655#endif
658 return; 656 return;
659 } 657 }
660 658