summaryrefslogtreecommitdiff
Unidiff
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/settings/aqpkg/ipkg.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/noncore/settings/aqpkg/ipkg.cpp b/noncore/settings/aqpkg/ipkg.cpp
index 17efda9..dd9e78d 100644
--- a/noncore/settings/aqpkg/ipkg.cpp
+++ b/noncore/settings/aqpkg/ipkg.cpp
@@ -205,331 +205,336 @@ void Ipkg :: removeStatusEntry()
205 tempstr.append( statusFile ); 205 tempstr.append( statusFile );
206 emit outputText( tempstr ); 206 emit outputText( tempstr );
207 return; 207 return;
208 } 208 }
209 209
210 if ( !writeFile.open( IO_WriteOnly ) ) 210 if ( !writeFile.open( IO_WriteOnly ) )
211 { 211 {
212 tempstr = tr("Couldn't create tempory status file - "); 212 tempstr = tr("Couldn't create tempory status file - ");
213 tempstr.append( outStatusFile ); 213 tempstr.append( outStatusFile );
214 emit outputText( tempstr ); 214 emit outputText( tempstr );
215 return; 215 return;
216 } 216 }
217 217
218 int i = 0; 218 int i = 0;
219 219
220 QTextStream readStream( &readFile ); 220 QTextStream readStream( &readFile );
221 QTextStream writeStream( &writeFile ); 221 QTextStream writeStream( &writeFile );
222 QString line; 222 QString line;
223 223
224 char k[21]; 224 char k[21];
225 char v[1001]; 225 char v[1001];
226 QString key; 226 QString key;
227 QString value; 227 QString value;
228 228
229 while ( !readStream.atEnd() ) 229 while ( !readStream.atEnd() )
230 { 230 {
231 //read new line 231 //read new line
232 line = readStream.readLine(); 232 line = readStream.readLine();
233 233
234 if ( line.contains( ":", TRUE ) ) 234 if ( line.contains( ":", TRUE ) )
235 { 235 {
236 //grep key and value from line 236 //grep key and value from line
237 k[0] = '\0'; 237 k[0] = '\0';
238 v[0] = '\0'; 238 v[0] = '\0';
239 sscanf( line, "%[^:]: %[^\n]", k, v ); 239 sscanf( line, "%[^:]: %[^\n]", k, v );
240 key = k; 240 key = k;
241 value = v; 241 value = v;
242 key = key.stripWhiteSpace(); 242 key = key.stripWhiteSpace();
243 value = value.stripWhiteSpace(); 243 value = value.stripWhiteSpace();
244 } else { 244 } else {
245 key = ""; 245 key = "";
246 value = ""; 246 value = "";
247 } 247 }
248 248
249 if ( key == "Package" && value == package ) 249 if ( key == "Package" && value == package )
250 { 250 {
251 //skip lines from the deleted package 251 //skip lines from the deleted package
252 while ( ( !readStream.atEnd() ) && ( line.stripWhiteSpace() != "" ) ) 252 while ( ( !readStream.atEnd() ) && ( line.stripWhiteSpace() != "" ) )
253 { 253 {
254 line = readStream.readLine(); 254 line = readStream.readLine();
255 } 255 }
256 } else { 256 } else {
257 257
258 //write other lines into the tempfile 258 //write other lines into the tempfile
259 writeStream << line << "\n"; 259 writeStream << line << "\n";
260 260
261 // Improve UI responsiveness 261 // Improve UI responsiveness
262 i++; 262 i++;
263 if ( ( i % 50 ) == 0 ) 263 if ( ( i % 50 ) == 0 )
264 qApp->processEvents(); 264 qApp->processEvents();
265 } 265 }
266 } 266 }
267 267
268 readFile.close(); 268 readFile.close();
269 writeFile.close(); 269 writeFile.close();
270 270
271 // Remove old status file and put tmp stats file in its place 271 // Remove old status file and put tmp stats file in its place
272 remove( statusFile ); 272 remove( statusFile );
273 rename( outStatusFile, statusFile ); 273 rename( outStatusFile, statusFile );
274 } 274 }
275 275
276int Ipkg :: executeIpkgLinkCommand( QStringList *cmd ) 276int Ipkg :: executeIpkgLinkCommand( QStringList *cmd )
277{ 277{
278 // If one is already running - should never be but just to be safe 278 // If one is already running - should never be but just to be safe
279 if ( proc ) 279 if ( proc )
280 { 280 {
281 delete proc; 281 delete proc;
282 proc = 0; 282 proc = 0;
283 } 283 }
284 284
285 // OK we're gonna use OProcess to run this thing 285 // OK we're gonna use OProcess to run this thing
286 proc = new OProcess(); 286 proc = new OProcess();
287 aborted = false; 287 aborted = false;
288 288
289 // Connect up our slots 289 // Connect up our slots
290 connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)), 290 connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)),
291 this, SLOT( linkProcessFinished())); 291 this, SLOT( linkProcessFinished()));
292 connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)), 292 connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)),
293 this, SLOT(linkCommandStdout(Opie::Core::OProcess*,char*,int))); 293 this, SLOT(linkCommandStdout(Opie::Core::OProcess*,char*,int)));
294 294
295 *proc << *cmd; 295 *proc << *cmd;
296 296
297 if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) 297 if(!proc->start(OProcess::NotifyOnExit, OProcess::All))
298 { 298 {
299 emit outputText( tr("Couldn't start ipkg-link process" ) ); 299 emit outputText( tr("Couldn't start ipkg-link process" ) );
300 } 300 }
301
302 return 0;
301} 303}
302 304
303void Ipkg::linkProcessFinished() 305void Ipkg::linkProcessFinished()
304{ 306{
305 // Report that the link process succeeded/failed 307 // Report that the link process succeeded/failed
306 308
307 if ( error ) 309 if ( error )
308 emit outputText( tr("Symbolic linking failed!\n") ); 310 emit outputText( tr("Symbolic linking failed!\n") );
309 else 311 else
310 emit outputText( tr("Symbolic linking succeeded.\n") ); 312 emit outputText( tr("Symbolic linking succeeded.\n") );
311 313
312 delete proc; 314 delete proc;
313 proc = 0; 315 proc = 0;
314 finished = true; 316 finished = true;
315} 317}
316 318
317void Ipkg::linkCommandStdout(OProcess*, char *buffer, int buflen) 319void Ipkg::linkCommandStdout(OProcess*, char *buffer, int buflen)
318{ 320{
319 QString lineStr = buffer; 321 QString lineStr = buffer;
320 if ( lineStr[buflen-1] == '\n' ) 322 if ( lineStr[buflen-1] == '\n' )
321 buflen --; 323 buflen --;
322 lineStr = lineStr.left( buflen ); 324 lineStr = lineStr.left( buflen );
323 emit outputText( lineStr ); 325 emit outputText( lineStr );
324 326
325 if ( lineStr.find( " not found." ) != -1 ) 327 if ( lineStr.find( " not found." ) != -1 )
326 { 328 {
327 // Capture ipkg-link errors 329 // Capture ipkg-link errors
328 error = true; 330 error = true;
329 } 331 }
330 332
331 buffer[0] = '\0'; 333 buffer[0] = '\0';
332} 334}
333 335
334int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ ) 336int Ipkg :: executeIpkgCommand( QStringList &cmd, const QString /*option*/ )
335{ 337{
336 // If one is already running - should never be but just to be safe 338 // If one is already running - should never be but just to be safe
337 if ( proc ) 339 if ( proc )
338 { 340 {
339 delete proc; 341 delete proc;
340 proc = 0; 342 proc = 0;
341 } 343 }
342 344
343 // OK we're gonna use OProcess to run this thing 345 // OK we're gonna use OProcess to run this thing
344 proc = new OProcess(); 346 proc = new OProcess();
345 aborted = false; 347 aborted = false;
346 348
347 349
348 // Connect up our slots 350 // Connect up our slots
349 connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)), 351 connect(proc, SIGNAL(processExited(Opie::Core::OProcess*)),
350 this, SLOT( processFinished())); 352 this, SLOT( processFinished()));
351 353
352 connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)), 354 connect(proc, SIGNAL(receivedStdout(Opie::Core::OProcess*,char*,int)),
353 this, SLOT(commandStdout(Opie::Core::OProcess*,char*,int))); 355 this, SLOT(commandStdout(Opie::Core::OProcess*,char*,int)));
354 356
355 connect(proc, SIGNAL(receivedStderr(Opie::Core::OProcess*,char*,int)), 357 connect(proc, SIGNAL(receivedStderr(Opie::Core::OProcess*,char*,int)),
356 this, SLOT(commandStderr(Opie::Core::OProcess*,char*,int))); 358 this, SLOT(commandStderr(Opie::Core::OProcess*,char*,int)));
357 359
358 for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it ) 360 for ( QStringList::Iterator it = cmd.begin(); it != cmd.end(); ++it )
359 { 361 {
360 *proc << (*it).latin1(); 362 *proc << (*it).latin1();
361 } 363 }
362 364
363 // Start the process going 365 // Start the process going
364 finished = false; 366 finished = false;
365 if(!proc->start(OProcess::NotifyOnExit, OProcess::All)) 367 if(!proc->start(OProcess::NotifyOnExit, OProcess::All))
366 { 368 {
367 emit outputText( tr("Couldn't start ipkg process" ) ); 369 emit outputText( tr("Couldn't start ipkg process" ) );
368 } 370 }
371
372 return 0;
369} 373}
370 374
371void Ipkg::commandStdout(OProcess*, char *buffer, int buflen) 375void Ipkg::commandStdout(OProcess*, char *buffer, int buflen)
372{ 376{
373 QString lineStr = buffer; 377 QString lineStr = buffer;
374 if ( lineStr[buflen-1] == '\n' ) 378 if ( lineStr[buflen-1] == '\n' )
375 buflen --; 379 buflen --;
376 lineStr = lineStr.left( buflen ); 380 lineStr = lineStr.left( buflen );
377 emit outputText( lineStr ); 381 emit outputText( lineStr );
378 382
379 // check if we are installing dependant packages 383 // check if we are installing dependant packages
380 if ( option == "install" || option == "reinstall" ) 384 if ( option == "install" || option == "reinstall" )
381 { 385 {
382 // Need to keep track of any dependant packages that get installed 386 // Need to keep track of any dependant packages that get installed
383 // so that we can create links to them as necessary 387 // so that we can create links to them as necessary
384 if ( lineStr.startsWith( "Installing " ) ) 388 if ( lineStr.startsWith( "Installing " ) )
385 { 389 {
386 int start = lineStr.find( " " ) + 1; 390 int start = lineStr.find( " " ) + 1;
387 int end = lineStr.find( " ", start ); 391 int end = lineStr.find( " ", start );
388 QString *package = new QString( lineStr.mid( start, end-start ) ); 392 QString *package = new QString( lineStr.mid( start, end-start ) );
389 dependantPackages->append( package ); 393 dependantPackages->append( package );
390 } 394 }
391 } 395 }
392 else if ( option == "remove" && !( flags & FORCE_DEPENDS ) && 396 else if ( option == "remove" && !( flags & FORCE_DEPENDS ) &&
393 lineStr.find( "is depended upon by packages:" ) != -1 ) 397 lineStr.find( "is depended upon by packages:" ) != -1 )
394 { 398 {
395 // Ipkg should send this to STDERR, but doesn't - so trap here 399 // Ipkg should send this to STDERR, but doesn't - so trap here
396 error = true; 400 error = true;
397 } 401 }
398 402
399 buffer[0] = '\0'; 403 buffer[0] = '\0';
400} 404}
401 405
402void Ipkg::commandStderr(OProcess*, char *buffer, int buflen) 406void Ipkg::commandStderr(OProcess*, char *buffer, int buflen)
403{ 407{
404 QString lineStr = buffer; 408 QString lineStr = buffer;
405 if ( lineStr[buflen-1] == '\n' ) 409 if ( lineStr[buflen-1] == '\n' )
406 buflen --; 410 buflen --;
407 lineStr=lineStr.left( buflen ); 411 lineStr=lineStr.left( buflen );
408 emit outputText( lineStr ); 412 emit outputText( lineStr );
409 buffer[0] = '\0'; 413 buffer[0] = '\0';
410 error = true; 414 error = true;
411} 415}
412 416
413void Ipkg::processFinished() 417void Ipkg::processFinished()
414{ 418{
415 // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file 419 // Finally, if we are removing a package, remove its entry from the <destdir>/usr/lib/ipkg/status file
416 // to workaround an ipkg bug which stops reinstall to a different location 420 // to workaround an ipkg bug which stops reinstall to a different location
417 421
418 if ( !error && option == "remove" ) 422 if ( !error && option == "remove" )
419 removeStatusEntry(); 423 removeStatusEntry();
420 424
421 delete proc; 425 delete proc;
422 proc = 0; 426 proc = 0;
423 finished = true; 427 finished = true;
424 428
425 emit ipkgFinished(); 429 emit ipkgFinished();
426} 430}
427 431
428 432
429void Ipkg :: abort() 433void Ipkg :: abort()
430{ 434{
431 if ( proc ) 435 if ( proc )
432 { 436 {
433 proc->kill(); 437 proc->kill();
434 aborted = true; 438 aborted = true;
435 } 439 }
436} 440}
437 441
438void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, const QString &destDir ) 442void Ipkg :: linkPackage( const QString &packFileName, const QString &dest, const QString &destDir )
439{ 443{
444 Q_CONST_UNUSED( destDir )
440 if ( dest == "root" || dest == "/" ) 445 if ( dest == "root" || dest == "/" )
441 return; 446 return;
442 447
443 if( option == "remove" || option == "reinstall" || option == "upgrade" ) 448 if( option == "remove" || option == "reinstall" || option == "upgrade" )
444 { 449 {
445 QStringList commands; 450 QStringList commands;
446 451
447 if ( runtimeDir != "" ) 452 if ( runtimeDir != "" )
448 { 453 {
449 commands << "cd "; 454 commands << "cd ";
450 commands << runtimeDir; 455 commands << runtimeDir;
451 commands << ";"; 456 commands << ";";
452 } 457 }
453 commands << "ipkg-link" << "remove" << packFileName; 458 commands << "ipkg-link" << "remove" << packFileName;
454 executeIpkgLinkCommand( &commands ); 459 executeIpkgLinkCommand( &commands );
455 } 460 }
456 461
457 if( option == "install" || option == "reinstall" || option == "upgrade" ) 462 if( option == "install" || option == "reinstall" || option == "upgrade" )
458 { 463 {
459 QStringList commands; 464 QStringList commands;
460 if ( runtimeDir != "" ) 465 if ( runtimeDir != "" )
461 { 466 {
462 commands << "cd "; 467 commands << "cd ";
463 commands << runtimeDir; 468 commands << runtimeDir;
464 commands << ";"; 469 commands << ";";
465 } 470 }
466 commands << "ipkg-link" << "add" << packFileName; 471 commands << "ipkg-link" << "add" << packFileName;
467 executeIpkgLinkCommand( &commands ); 472 executeIpkgLinkCommand( &commands );
468 } 473 }
469/* 474/*
470 qApp->processEvents(); 475 qApp->processEvents();
471 QStringList *fileList = getList( packFileName, destDir ); 476 QStringList *fileList = getList( packFileName, destDir );
472 qApp->processEvents(); 477 qApp->processEvents();
473 processFileList( fileList, destDir ); 478 processFileList( fileList, destDir );
474 delete fileList;*/ 479 delete fileList;*/
475} 480}
476/* 481/*
477QStringList* Ipkg :: getList( const QString &packageFilename, const QString &destDir ) 482QStringList* Ipkg :: getList( const QString &packageFilename, const QString &destDir )
478{ 483{
479 QString packageFileDir = destDir; 484 QString packageFileDir = destDir;
480 packageFileDir.append( "/usr/lib/ipkg/info/" ); 485 packageFileDir.append( "/usr/lib/ipkg/info/" );
481 packageFileDir.append( packageFilename ); 486 packageFileDir.append( packageFilename );
482 packageFileDir.append( ".list" ); 487 packageFileDir.append( ".list" );
483 QFile f( packageFileDir ); 488 QFile f( packageFileDir );
484 489
485 if ( !f.open(IO_ReadOnly) ) 490 if ( !f.open(IO_ReadOnly) )
486 { 491 {
487 // Couldn't open from dest, try from / 492 // Couldn't open from dest, try from /
488 f.close(); 493 f.close();
489 494
490 packageFileDir = "/usr/lib/ipkg/info/"; 495 packageFileDir = "/usr/lib/ipkg/info/";
491 packageFileDir.append( packageFilename ); 496 packageFileDir.append( packageFilename );
492 packageFileDir.append( ".list" ); 497 packageFileDir.append( ".list" );
493 f.setName( packageFileDir ); 498 f.setName( packageFileDir );
494 if ( ! f.open(IO_ReadOnly) ) 499 if ( ! f.open(IO_ReadOnly) )
495 { 500 {
496 QString tempstr = tr("Could not open :"); 501 QString tempstr = tr("Could not open :");
497 tempstr.append( packageFileDir ); 502 tempstr.append( packageFileDir );
498 emit outputText( tempstr ); 503 emit outputText( tempstr );
499 return (QStringList*)0; 504 return (QStringList*)0;
500 } 505 }
501 } 506 }
502 QStringList *fileList = new QStringList(); 507 QStringList *fileList = new QStringList();
503 QTextStream t( &f ); 508 QTextStream t( &f );
504 while ( !t.eof() ) 509 while ( !t.eof() )
505 *fileList += t.readLine(); 510 *fileList += t.readLine();
506 511
507 f.close(); 512 f.close();
508 return fileList; 513 return fileList;
509} 514}
510 515
511void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir ) 516void Ipkg :: processFileList( const QStringList *fileList, const QString &destDir )
512{ 517{
513 if ( !fileList || fileList->isEmpty() ) 518 if ( !fileList || fileList->isEmpty() )
514 return; 519 return;
515 520
516 QString baseDir = ROOT; 521 QString baseDir = ROOT;
517 522
518 if ( createLinks == true ) 523 if ( createLinks == true )
519 { 524 {
520 for ( uint i=0; i < fileList->count(); i++ ) 525 for ( uint i=0; i < fileList->count(); i++ )
521 { 526 {
522 processLinkDir( (*fileList)[i], baseDir, destDir ); 527 processLinkDir( (*fileList)[i], baseDir, destDir );
523 qApp->processEvents(); 528 qApp->processEvents();
524 } 529 }
525 } 530 }
526 else 531 else
527 { 532 {
528 for ( int i = fileList->count()-1; i >= 0 ; i-- ) 533 for ( int i = fileList->count()-1; i >= 0 ; i-- )
529 { 534 {
530 processLinkDir( (*fileList)[i], baseDir, destDir ); 535 processLinkDir( (*fileList)[i], baseDir, destDir );
531 qApp->processEvents(); 536 qApp->processEvents();
532 } 537 }
533 } 538 }
534} 539}
535 540