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