Warning, /sdk/kompare/tests/diff/edm.diff is written in an unsupported language. File is not indexed.

0001 diff -er dcop/client/dcop.cpp dcop2/client/dcop.cpp
0002 343a
0003 
0004 // vim: set ts=8 sts=4 sw=4 noet:
0005 
0006 .
0007 340a
0008 }
0009 
0010 
0011 int main( int argc, char** argv )
0012 {
0013     bool readStdin = false;
0014     int numOptions = 0;
0015     QString user;
0016     Session session = DefaultSession;
0017     QString sessionName;
0018     
0019     // Scan for command-line options first
0020     for( int pos = 1 ; pos <= argc - 1 ; pos++ )
0021     {
0022         if( strcmp( argv[ pos ], "--help" ) == 0 )
0023             showHelp( 0 );
0024         else if( strcmp( argv[ pos ], "--pipe" ) == 0 )
0025         {
0026             readStdin = true;
0027             numOptions++;
0028         }
0029         else if( strcmp( argv[ pos ], "--user" ) == 0 )
0030         {
0031             if( pos <= argc - 2 )
0032             {
0033                 user = QString::fromLocal8Bit( argv[ pos + 1] );
0034                 numOptions +=2;
0035                 pos++;
0036             }
0037             else
0038             {
0039                 cerr << "Missing username for '--user' option!" << endl << endl;
0040                 showHelp( -1 );
0041             }
0042         }
0043         else if( strcmp( argv[ pos ], "--all-users" ) == 0 )
0044         {
0045             user = "*";
0046             numOptions ++;
0047         }
0048         else if( strcmp( argv[ pos ], "--list-sessions" ) == 0 )
0049         {
0050             session = QuerySessions;
0051             numOptions ++;
0052         }
0053         else if( strcmp( argv[ pos ], "--all-sessions" ) == 0 )
0054         {
0055             session = AllSessions;
0056             numOptions ++;
0057         }
0058         else if( argv[ pos ][ 0 ] == '-' )
0059         {
0060             cerr << "Unknown command-line option '" << argv[ pos ]
0061                  << "'." << endl << endl;
0062             showHelp( -1 );
0063         }
0064         else
0065             break;      // End of options
0066     }
0067 
0068     argc -= numOptions;
0069 
0070     QCStringList args;
0071     for( int i = numOptions; i < argc + numOptions - 1; i++ )
0072         args.append( argv[ i + 1 ] );
0073     
0074     if( readStdin && args.count() < 3 )
0075     {
0076         cerr << "--pipe option only supported for function calls!" << endl << endl;
0077         showHelp( -1 );
0078     }
0079     
0080     if( user == "*" && args.count() < 3 && session != QuerySessions )
0081     {
0082         cerr << "ERROR: The --all-users option is only supported for function calls!" << endl << endl;
0083         showHelp( -1 );
0084     }
0085     
0086     if( session == QuerySessions && !args.isEmpty() )
0087     {
0088         cerr << "ERROR: The --list-sessions option cannot be used for actual DCOP calls!" << endl << endl;
0089         showHelp( -1 );
0090     }
0091     
0092     if( session == QuerySessions && user.isEmpty() )
0093     {
0094         cerr << "ERROR: The --list-sessions option can only be used with the --user or" << endl
0095              << "--all-users options!" << endl << endl;
0096         showHelp( -1 );
0097     }
0098     
0099     if( session != DefaultSession && session != QuerySessions &&
0100         args.count() < 3 )
0101     {
0102         cerr << "ERROR: The --session and --all-sessions options are only supported for function" << endl
0103              << "calls!" << endl << endl;
0104         showHelp( -1 );
0105     }
0106     
0107     UserList users;
0108     if( user == "*" )
0109         users = userList();
0110     else if( !user.isEmpty() )
0111         users[ user ] = userList()[ user ];
0112 
0113     runDCOP( args, users, session, sessionName, readStdin );
0114 .
0115 339a
0116         if( users.count() > 1 || ( users.count() == 1 &&
0117             ( getenv( "ICEAUTHORITY" ) == 0 || getenv( "DISPLAY" ) == 0 ) ) )
0118         {
0119             // Check for ICE authority file and if the file can be read by us
0120             QString home = it.data();
0121             QString iceFile = it.data() + "/.ICEauthority";
0122             QFileInfo fi( iceFile );
0123             if( iceFile.isEmpty() )
0124             {
0125                 cerr << "WARNING: Cannot determine home directory for user "
0126                      << it.key() << "!" << endl
0127                      << "Please check permissions or set the $ICEAUTHORITY variable manually before" << endl
0128                      << "calling dcop." << endl;
0129             }
0130             else if( fi.exists() )
0131             {
0132                 if( fi.isReadable() )
0133                 {
0134                     char *envStr = strdup( ( "ICEAUTHORITY=" + iceFile ).ascii() );
0135                     putenv( envStr );
0136                     //cerr << "ice: " << envStr << endl;
0137                 }
0138                 else
0139                 {
0140                     cerr << "WARNING: ICE authority file " << iceFile
0141                          << "is not readable by you!" << endl
0142                          << "Please check permissions or set the $ICEAUTHORITY variable manually before" << endl
0143                          << "calling dcop." << endl;
0144                 }
0145             }
0146             else
0147             {
0148                 if( users.count() > 1 )
0149                     continue;
0150                 else
0151                 {
0152                     cerr << "WARNING: Cannot find ICE authority file "
0153                          << iceFile << "!" << endl
0154                          << "Please check permissions or set the $ICEAUTHORITY"
0155                          << " variable manually before" << endl
0156                          << "calling dcop." << endl;
0157                 }
0158             }
0159         }
0160 
0161         // Main loop
0162         // If users is an empty list we're calling for the currently logged
0163         // in user. In this case we don't have a session, but still want
0164         // to iterate the loop once.
0165         QStringList::Iterator sIt = sessions.begin();
0166         for( ; sIt != sessions.end() || users.isEmpty(); sIt++ )
0167         {
0168             if( !presetDCOPServer && !users.isEmpty() )
0169             {
0170                 QString dcopFile = it.data() + "/" + *sIt;
0171                 QFile f( dcopFile );
0172                 if( !f.open( IO_ReadOnly ) )
0173                 {
0174                     cerr << "Can't open " << dcopFile << " for reading!" << endl;
0175                     exit( -1 );
0176                 }
0177 
0178                 QStringList l( QStringList::split( '\n', f.readAll() ) );
0179                 dcopServer = l.first();
0180 
0181                 if( dcopServer.isEmpty() )
0182                 {
0183                     cerr << "WARNING: Unable to determine DCOP server for session "
0184                          << *sIt << "!" << endl
0185                          << "Please check permissions or set the $DCOPSERVER variable manually before" << endl
0186                          << "calling dcop." << endl;
0187                     exit( -1 );
0188                 }
0189             }
0190             
0191             delete client;
0192             client = new DCOPClient;
0193             if( !dcopServer.isEmpty() )
0194                 client->setServerAddress( dcopServer.ascii() );
0195             bool success = client->attach();
0196             if( !success )
0197             {
0198                 cerr << "ERROR: Couldn't attach to DCOP server!" << endl;
0199                 continue;
0200             }
0201             dcop = client;
0202 
0203             switch ( args.count() )
0204             {
0205             case 0:
0206                 queryApplications("");
0207                 break;
0208             case 1:
0209                 if (endsWith(app, '*'))
0210                    queryApplications(app);
0211                 else
0212                    queryObjects( app, "" );
0213                 break;
0214             case 2:
0215                 if (endsWith(objid, '*'))
0216                    queryObjects(app, objid);
0217                 else
0218                    queryFunctions( app, objid );
0219                 break;
0220             case 3:
0221             default:
0222                 if( readStdin )
0223                 {
0224                     QCStringList::Iterator replaceArg = args.end();
0225                    
0226                     QCStringList::Iterator it;
0227                     for( it = args.begin(); it != args.end(); it++ )
0228                         if( *it == "%1" )
0229                             replaceArg = it;
0230                     
0231                     // Read from stdin until EOF and call function for each line read
0232                     char *buf = new char[ 1000 ];
0233                     while ( !feof( stdin ) )
0234                     {
0235                         fgets( buf, 1000, stdin );
0236                 
0237                         if( replaceArg != args.end() )
0238                             *replaceArg = buf;
0239 
0240                         callFunction( app, objid, function, params );
0241                     }
0242                 }
0243                 else
0244                 {
0245                     // Just call function
0246 //                  cout << "call " << app << ", " << objid << ", " << function << ", (params)" << endl;
0247                     callFunction( app, objid, function, params );
0248                 }
0249                 break;
0250             }
0251             // Another sIt++ would make the loop infinite...
0252             if( users.isEmpty() )
0253                 break;
0254         }
0255         
0256         // Another it++ would make the loop infinite...
0257         if( it == users.end() )
0258             break;
0259 .
0260 308,338c
0261         if( !args.isEmpty() )
0262             app = args[ 0 ];
0263         if( args.count() > 1 )
0264             objid = args[ 1 ];
0265         if( args.count() > 2 )
0266             function = args[ 2 ];
0267         if( args.count() > 3)
0268         {
0269             params = args;
0270             params.remove( params.begin() );
0271             params.remove( params.begin() );
0272             params.remove( params.begin() );
0273         }
0274     }
0275 
0276     bool firstRun = true;
0277     UserList::Iterator it;
0278     QStringList sessions;
0279     bool presetDCOPServer = false;
0280 //    char *dcopStr = 0L;
0281     QString dcopServer;
0282     
0283     for( it = users.begin(); it != users.end() || firstRun; it++ )
0284     {
0285         firstRun = false;
0286 
0287         //cout << "Iterating '" << it.key() << "'" << endl;
0288 
0289         if( session == QuerySessions )
0290         {
0291             QStringList sessions = dcopSessionList( it.key(), it.data() );
0292             if( sessions.isEmpty() )
0293             {
0294                 cout << "No active sessions";
0295                 if( !( *it ).isEmpty() )
0296                     cout << " for user " << *it;
0297                 cout << endl;
0298             }
0299             else
0300             {
0301                 cout << "Active sessions ";
0302                 if( !( *it ).isEmpty() )
0303                     cout << "for user " << *it << " ";
0304                 cout << ":" << endl;
0305                 
0306                 QStringList::Iterator sIt;
0307                 for( sIt = sessions.begin(); sIt != sessions.end(); sIt++ )
0308                     cout << "  " << *sIt << endl;
0309 
0310                 cout << endl;
0311             }
0312             continue;
0313         }
0314 
0315         if( getenv( "DCOPSERVER" ) )
0316         {
0317             sessions.append( getenv( "DCOPSERVER" ) );
0318             presetDCOPServer = true;
0319         }
0320 
0321         if( users.count() > 1 || ( users.count() == 1 &&
0322             ( getenv( "DCOPSERVER" ) == 0 /*&& getenv( "DISPLAY" ) == 0*/ ) ) )
0323         {
0324             sessions = dcopSessionList( it.key(), it.data() );
0325             if( sessions.isEmpty() )
0326             {
0327                 if( users.count() > 1 )
0328                     continue;
0329                 else
0330                 {
0331                     cerr << "ERROR: No active KDE sessions!" << endl
0332                          << "If you are sure there is one, please set the $DCOPSERVER variable manually" << endl
0333                          << "before calling dcop." << endl;
0334                     exit( -1 );
0335                 }
0336             }
0337             else if( sessions.count() > 1 && session != AllSessions )
0338             {
0339                 cerr << "ERROR: Multiple available KDE sessions!" << endl
0340                      << "Please specify the correct session to use with --session or use the" << endl
0341                      << "--all-sessions option to broadcast to all sessions." << endl;
0342                 exit( -1 );
0343             }
0344         }
0345 .
0346 289,304c
0347         // WARNING: This part (until the closing '}') could very
0348         // well be broken now. As I don't know how to trigger and test
0349         // dcoprefs this code is *not* tested. It compiles and it looks
0350         // ok to me, but that's all I can say - Martijn (2001/12/24)
0351         int delimPos = args[ 0 ].findRev( ',' );
0352         if( delimPos == -1 )
0353         {
0354             cerr << "Error: '" << args[ 0 ]
0355                  << "' is not a valid DCOP reference." << endl;
0356             exit( -1 );
0357         }
0358         args[ 0 ][ delimPos ] = 0;
0359         app = args[ 0 ].mid( 8 );
0360         delimPos++;
0361         args[ 0 ][ args[ 0 ].length() - 1 ] = 0;
0362         objid = args[ 0 ].mid( delimPos );
0363         if( args.count() > 1 )
0364             function = args[ 1 ];
0365         if( args.count() > 2 )
0366         {
0367             params = args;
0368             params.remove( params.begin() );
0369             params.remove( params.begin() );
0370         }
0371 .
0372 286,287c
0373     QCStringList params;
0374     DCOPClient *client = 0L;
0375     if ( !args.isEmpty() && args[ 0 ].find( "DCOPRef(" ) == 0 )
0376 .
0377 282a
0378 /**
0379  * Do the actual DCOP call
0380  */
0381 void runDCOP( QCStringList args, UserList users, Session session,
0382               const QString sessionName, bool readStdin )
0383 {
0384 .
0385 279,281c
0386     return result;
0387 }
0388 
0389 /**
0390  * Return a list of available DCOP sessions for the specified user
0391  * An empty list means no sessions are available, or an error occurred.
0392  */
0393 QStringList dcopSessionList( const QString &user, const QString &home )
0394 {
0395     if( home.isEmpty() )
0396     {
0397         cerr << "WARNING: Cannot determine home directory for user "
0398              << user << "!" << endl
0399              << "Please check permissions or set the $DCOPSERVER variable manually before" << endl
0400              << "calling dcop." << endl;
0401         return QStringList();
0402     }
0403 
0404     QStringList result;
0405     QFileInfo dirInfo( home );
0406     if( !dirInfo.exists() || !dirInfo.isReadable() )
0407         return result;
0408 
0409     QDir d( home );
0410     d.setFilter( QDir::Files | QDir::Hidden | QDir::NoSymLinks );
0411     d.setNameFilter( ".DCOPserver*" );
0412 
0413     const QFileInfoList *list = d.entryInfoList();
0414     if( !list )
0415         return result;
0416 
0417     QFileInfoListIterator it( *list );
0418     QFileInfo *fi;
0419 
0420     while ( ( fi = it.current() ) != 0 )
0421     {
0422         if( fi->isReadable() )
0423             result.append( fi->fileName() );
0424         ++it;
0425     }
0426     return result;
0427 }
0428 .
0429 274,276c
0430     QStringList l( QStringList::split( '\n', f.readAll() ) );
0431 
0432     for( QStringList::ConstIterator it( l.begin() ); it != l.end(); ++it )
0433     {
0434         QStringList userInfo( QStringList::split( ':', *it, true ) );
0435         result[ userInfo[ 0 ] ] = userInfo[ 5 ];
0436 .
0437 272a
0438     UserList result;
0439     
0440     QFile f( "/etc/passwd" );
0441 
0442     if( !f.open( IO_ReadOnly ) )
0443     {
0444         cerr << "Can't open /etc/passwd for reading!" << endl;
0445         return result;
0446     }
0447 .
0448 270,271c
0449 /**
0450  * Return a list of all users and their home directories.
0451  * Returns an empty list if /etc/passwd cannot be read for some reason.
0452  */
0453 static UserList userList()
0454 .
0455 268a
0456 /**
0457  * Show command-line help and exit
0458  */
0459 void showHelp( int exitCode = 0 )
0460 {
0461     cout << "Usage: dcop [options] [application [object [function [arg1] [arg2] ... ] ] ]" << endl
0462          << "" << endl
0463          << "Console DCOP client" << endl
0464          << "" << endl
0465          << "Generic options:" << endl
0466          << "  --help          Show help about options" << endl
0467          << "" << endl
0468          << "Options:" << endl
0469          << "  --pipe          Call DCOP for each line read from stdin" << endl
0470          << "  --user <user>   Connect to the given user's DCOP server. This option will" << endl
0471          << "                  ignore the values of the environment vars $DCOPSERVER and" << endl
0472          << "                  $ICEAUTHORITY, even if they are set." << endl
0473          << "                  If the user has more than one open session, you must also" << endl
0474          << "                  use one of the --list-sessions, --session or --als-sessions" << endl
0475          << "                  command-line options." << endl
0476          << "  --all-users     Send the same DCOP call to all users with a running DCOP" << endl
0477          << "                  server. Only failed calls to existing DCOP servers will"
0478          << "                  generate an error message. If no DCOP server is available" << endl
0479          << "                  at all, no error will be generated." << endl;
0480     
0481     exit( exitCode );
0482 }
0483 .
0484 246,250c
0485     uint i = 0;
0486     for( QStringList::Iterator it = types.begin(); it != types.end(); ++it )
0487         marshall( arg, args, i, *it );
0488 
0489     if ( i != args.count() )
0490     {
0491 .
0492 164c
0493 //            exit(1);
0494             return;
0495 .
0496 156,157c
0497                 uint a = (*it).contains(',');
0498                 if ( ( a == 0 && args.isEmpty() ) || ( a > 0 && a + 1 == args.count() ) )
0499 .
0500 139c
0501         if ( !ok && args.isEmpty() )
0502 .
0503 123d
0504 121c
0505 void callFunction( const char* app, const char* obj, const char* func, const QCStringList args )
0506 .
0507 35a
0508 static QTextStream cout( stdout, IO_WriteOnly );
0509 static QTextStream cerr( stderr, IO_WriteOnly );
0510 
0511 /**
0512  * Session to send call to
0513  * DefaultSession - current session. Current KDE session when called without
0514  *                  --user or --all-users option. Otherwise this value ignores
0515  *                  all users with more than one active session.
0516  * AllSessions    - Send to all sessions found. requires --user or --all-users.
0517  * QuerySessions  - Don't call DCOP, return a list of available sessions.
0518  * CustomSession  - Use the specified session
0519  */
0520 enum Session { DefaultSession = 0, AllSessions, QuerySessions, CustomSession };
0521 
0522 .
0523 33a
0524 typedef QMap<QString, QString> UserList;
0525 
0526 .
0527 28,30c
0528 #include "../kdatastream.h"
0529 .
0530 25c
0531 #include <qdir.h>
0532 #include <qfile.h>
0533 #include <qfileinfo.h>
0534 #include <qmap.h>
0535 #include <qstringlist.h>
0536 #include <qtextstream.h>
0537 #include <qvariant.h>
0538 
0539 // putenv() is not available on all platforms, so make sure the emulation
0540 // wrapper is available in those cases by loading config.h!
0541 #include <config.h>
0542 
0543 .
0544 23c
0545 #include <ctype.h>
0546 #include <stdio.h>
0547 #include <stdlib.h>
0548 
0549 .
0550 diff -er dcop/client/dcopfind.cpp dcop2/client/dcopfind.cpp
0551 224c
0552     QCStringList params;
0553     for( int i = 0; i < argc; i++ )
0554             params.append( args[ i ] );
0555     
0556     findObject( app, objid, function, params );
0557 .
0558 133c
0559     if ( (uint) i != args.count() ) {
0560 .
0561 131c
0562         marshall(arg, args, i, *it);
0563 .
0564 121c
0565     if ( types.count() != args.count() ) {
0566 .
0567 39c
0568 bool findObject( const char* app, const char* obj, const char* func, QCStringList args )
0569 .
0570 diff -er dcop/client/marshall.cpp dcop2/client/marshall.cpp
0571 347a
0572         QByteArray dummy_data;
0573         QDataStream dummy_arg(dummy_data, IO_WriteOnly);
0574 
0575         uint j = i;
0576         uint count = 0;
0577         // Parse list to get the count
0578         while (true) {
0579             if( j > args.count() )
0580             {
0581                 qWarning("List end-delimiter '%s' not found.", delim.latin1());
0582                 exit(1);
0583             }
0584             if( QString::fromLocal8Bit( args[ j ] ) == delim )
0585                 break;
0586             marshall( dummy_arg, args, j, type );
0587             count++;
0588         }
0589         arg << (Q_UINT32) count;
0590         // Parse the list for real
0591         while (true) {
0592             if( i > args.count() )
0593             {
0594                 qWarning("List end-delimiter '%s' not found.", delim.latin1());
0595                 exit(1);
0596             }
0597             if( QString::fromLocal8Bit( args[ i ] ) == delim )
0598                 break;
0599             marshall( arg, args, i, type );
0600         }
0601     } else {
0602         qWarning( "cannot handle datatype '%s'", type.latin1() );
0603         exit(1);
0604     }
0605     i++;
0606 .
0607 319,346c
0608     if ( type == "int" )
0609         arg << s.toInt();
0610     else if ( type == "uint" )
0611         arg << s.toUInt();
0612     else if ( type == "unsigned" )
0613         arg << s.toUInt();
0614     else if ( type == "unsigned int" )
0615         arg << s.toUInt();
0616     else if ( type == "long" )
0617         arg << s.toLong();
0618     else if ( type == "long int" )
0619         arg << s.toLong();
0620     else if ( type == "unsigned long" )
0621         arg << s.toULong();
0622     else if ( type == "unsigned long int" )
0623         arg << s.toULong();
0624     else if ( type == "float" )
0625         arg << s.toFloat();
0626     else if ( type == "double" )
0627         arg << s.toDouble();
0628     else if ( type == "bool" )
0629         arg << mkBool( s );
0630     else if ( type == "QString" )
0631         arg << s;
0632     else if ( type == "QCString" )
0633         arg << QCString( args[ i ] );
0634     else if ( type == "QColor" )
0635         arg << mkColor( s );
0636     else if ( type == "QPoint" )
0637         arg << mkPoint( s );
0638     else if ( type == "QSize" )
0639         arg << mkSize( s );
0640     else if ( type == "QRect" )
0641         arg << mkRect( s );
0642     else if ( type == "QVariant" ) {
0643         if ( s == "true" || s == "false" )
0644             arg << QVariant( mkBool( s ), 42 );
0645         else if ( s.left( 4 ) == "int(" )
0646             arg << QVariant( s.mid(4, s.length()-5).toInt() );
0647         else if ( s.left( 7 ) == "QPoint(" )
0648             arg << QVariant( mkPoint( s.mid(7, s.length()-8) ) );
0649         else if ( s.left( 6 ) == "QSize(" )
0650             arg << QVariant( mkSize( s.mid(6, s.length()-7) ) );
0651         else if ( s.left( 6 ) == "QRect(" )
0652             arg << QVariant( mkRect( s.mid(6, s.length()-7) ) );
0653         else if ( s.left( 7 ) == "QColor(" )
0654             arg << QVariant( mkColor( s.mid(7, s.length()-8) ) );
0655         else
0656             arg << QVariant( s );
0657     } else if ( type.startsWith("QValueList<")) {
0658         type = type.mid(11, type.length() - 12);
0659         QStringList list;
0660         QString delim = s;
0661         if (delim == "[")
0662            delim = "]";
0663         if (delim == "(")
0664            delim = ")";
0665 .
0666 247,317c
0667     if (type == "QStringList")
0668        type = "QValueList<QString>";
0669     if (type == "QCStringList")
0670        type = "QValueList<QCString>";
0671     if( i > args.count() )
0672     {
0673         qWarning("Not enough arguments.");
0674         exit(1);
0675     }       
0676     QString s = QString::fromLocal8Bit( args[ i ] );
0677 .
0678 245c
0679 void marshall( QDataStream &arg, QCStringList args, uint &i, QString type )
0680 .