summaryrefslogtreecommitdiff
authorllornkcor <llornkcor>2002-04-25 18:34:01 (UTC)
committer llornkcor <llornkcor>2002-04-25 18:34:01 (UTC)
commitc06667cd62b945a05edce621aab34358ee0e964f (patch) (unidiff)
tree4de8f106fa0cc376e211d213d8f674b4ea0a3353
parenta4e419f939f4f4237b56e117edaa7dc0d93dd396 (diff)
downloadopie-c06667cd62b945a05edce621aab34358ee0e964f.zip
opie-c06667cd62b945a05edce621aab34358ee0e964f.tar.gz
opie-c06667cd62b945a05edce621aab34358ee0e964f.tar.bz2
hook up fsck
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/tools/formatter/formatter.cpp131
-rw-r--r--noncore/tools/formatter/formatter.h4
2 files changed, 108 insertions, 27 deletions
diff --git a/noncore/tools/formatter/formatter.cpp b/noncore/tools/formatter/formatter.cpp
index 0dd42c8..983459c 100644
--- a/noncore/tools/formatter/formatter.cpp
+++ b/noncore/tools/formatter/formatter.cpp
@@ -298,8 +298,8 @@ void FormatterApp::doFormat() {
298 outDlg->OutputEdit->append(tr("You can now close the output window.")); 298 outDlg->OutputEdit->append(tr("You can now close the output window."));
299 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); 299 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
300// outDlg->close(); 300// outDlg->close();
301// if(outDlg) 301// if(outDlg)
302// delete outDlg; 302// delete outDlg;
303 } 303 }
304 break; 304 break;
305 }; 305 };
@@ -324,14 +324,12 @@ void FormatterApp::fillCombos() {
324 if( name.find( tr("Internal"),0,TRUE) == -1) { 324 if( name.find( tr("Internal"),0,TRUE) == -1) {
325 storageComboBox->insertItem(name +" -> "+disk); 325 storageComboBox->insertItem(name +" -> "+disk);
326 } 326 }
327 deviceComboBox->insertItem(disk); 327// deviceComboBox->insertItem(disk);
328 } 328 }
329 parsetab(); 329 parsetab("/etc/mtab");
330// parsetab("/etc/fstab");
330 fileSystemsCombo->insertStringList( fsList,-1); 331 fileSystemsCombo->insertStringList( fsList,-1);
331// for(int i = 0; i < fileSystemsCombo->count(); i++) { 332 deviceComboBox->insertStringList( deviceList,-1);
332// if( fsType == fileSystemsCombo->text(i))
333// fileSystemsCombo->setCurrentItem(i);
334// }
335 storageComboSelected(0); 333 storageComboSelected(0);
336 deviceComboSelected(0); 334 deviceComboSelected(0);
337} 335}
@@ -407,12 +405,13 @@ void FormatterApp::editFstab() {
407 e << (const QString &)"/etc/fstab"; 405 e << (const QString &)"/etc/fstab";
408} 406}
409 407
410void FormatterApp::parsetab() { 408void FormatterApp::parsetab(const QString &fileName) {
411 409
412 fileSystemTypeList.clear(); 410 fileSystemTypeList.clear();
413 fsList.clear(); 411 fsList.clear();
414 struct mntent *me; 412 struct mntent *me;
415 FILE *mntfp = setmntent( "/etc/mtab", "r" ); 413// if(fileName == "/etc/mtab") {
414 FILE *mntfp = setmntent( fileName.latin1(), "r" );
416 if ( mntfp ) { 415 if ( mntfp ) {
417 while ( (me = getmntent( mntfp )) != 0 ) { 416 while ( (me = getmntent( mntfp )) != 0 ) {
418 QString deviceName = me->mnt_fsname; 417 QString deviceName = me->mnt_fsname;
@@ -420,34 +419,44 @@ void FormatterApp::parsetab() {
420 if(deviceName != "none") { 419 if(deviceName != "none") {
421 if( fsList.contains(filesystemType) == 0 420 if( fsList.contains(filesystemType) == 0
422 & filesystemType.find("proc",0,TRUE) == -1 421 & filesystemType.find("proc",0,TRUE) == -1
423 & filesystemType.find("cramfs",0,TRUE) == -1) 422 & filesystemType.find("cramfs",0,TRUE) == -1
423 & filesystemType.find("auto",0,TRUE) == -1)
424 fsList << filesystemType; 424 fsList << filesystemType;
425 deviceList << deviceName;
426 qDebug(deviceName+"::"+filesystemType);
425 fileSystemTypeList << deviceName+"::"+filesystemType; 427 fileSystemTypeList << deviceName+"::"+filesystemType;
426 } 428 }
427 } 429 }
428 } 430 }
429 endmntent( mntfp ); 431 endmntent( mntfp );
430 432// } else if(fileName == "/etc/fstab") {
431// QFile f("/etc/fstab"); 433// QFile f("/etc/fstab");
432// if ( f.open(IO_ReadOnly) ) { 434// if ( f.open(IO_ReadOnly) ) {
433// QTextStream t (&f); 435// QTextStream t (&f);
434// QString s; 436// QString s;
435// while (! t.eof()) { 437// while (! t.eof()) {
436// s=t.readLine(); 438// s=t.readLine();
437// s=s.simplifyWhiteSpace(); 439// s=s.simplifyWhiteSpace();
438// if ( (!s.isEmpty() ) && (s.find(" ")!=0) ) { 440// if ( (!s.isEmpty() ) && (s.find(" ")!=0) ) {
439// s=s.remove(0,s.find(BLANK)+1 ); // devicename 441// // = me->mnt_fsname;
440// s=s.remove(0,s.find(BLANK)+1 ); // mountpoint 442// QString filesystemType = me->mnt_type;
441// s=s.remove(0,s.find(BLANK)+1 ); // fs 443// QString deviceName = s.left(0,s.find(BLANK) );
442// } 444// s=s.remove(0,s.find(BLANK)+1 ); // devicename
445
446// s=s.remove(0,s.find(BLANK)+1 ); // mountpoint
447// QStringt mountPoint= s.left(0,s.find(BLANK) );
448// s=s.remove(0,s.find(BLANK)+1 ); // fs
449// QString filesystemType= s.left(0,s.find(BLANK) );
450// }
443// } 451// }
444// } 452// }
445// f.close(); 453// f.close();
454// }
446} 455}
447 456
448QString FormatterApp::getFileSystemType(const QString &currentText) { 457QString FormatterApp::getFileSystemType(const QString &currentText) {
449 458
450 parsetab(); //why did TT forget filesystem type? 459 parsetab("/etc/mtab"); //why did TT forget filesystem type?
451 460
452 for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) { 461 for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) {
453 QString temp = (*it); 462 QString temp = (*it);
@@ -461,19 +470,91 @@ QString FormatterApp::getFileSystemType(const QString &currentText) {
461 470
462bool FormatterApp::doFsck() { 471bool FormatterApp::doFsck() {
463 472
464 QString selectedDevice = deviceComboBox->currentText(); 473 Output *outDlg;
474 QString selectedDevice;
475#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) // lets test on something cheap
476 selectedDevice = deviceComboBox->currentText();
477#else
478// currentText = diskDevice = "/dev/fd0";
479 QString umountS = "umount -v /floppy 2>&1";
480 QString remountS = "mount -v /floppy 2>&1";
481 selectedDevice ="/dev/fd0";
482
483#endif
484
465 QString fsType = getFileSystemType((const QString &)selectedDevice); 485 QString fsType = getFileSystemType((const QString &)selectedDevice);
466 QString cmd; 486 QString cmd;
467 qDebug( selectedDevice +" "+ fsType); 487 qDebug( selectedDevice +" "+ fsType);
468 if(fsType == "vfat") cmd = "dosfsck -vy "; 488 if(fsType == "vfat") cmd = "dosfsck -vy ";
469 if(fsType == "ext2") cmd = "e2fsck -cpvy "; 489 if(fsType == "ext2") cmd = "e2fsck -cpvy ";
470 cmd += selectedDevice; 490 cmd += selectedDevice + " 2>&1";
471 491
492 outDlg = new Output(this, tr("Formatter Output"),FALSE);
493 outDlg->showMaximized();
494 outDlg->show();
495 qApp->processEvents();
496 FILE *fp;
497 char line[130];
498 outDlg->OutputEdit->append( tr("Trying to umount."));
499 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
472 500
473 return FALSE; 501 sleep(1);
502// qDebug("Command is "+umountS);
503 fp = popen( (const char *) umountS, "r");
504// qDebug("%d", fp);
505 if ( !fp ) {
506 qDebug("Could not execute '" + umountS + "'!\n" +(QString)strerror(errno));
507 QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") );
508 pclose(fp);
509 return false;
510 } else {
511// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted."));
512// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
513 while ( fgets( line, sizeof line, fp)) {
514 if( ((QString)line).find("busy",0,TRUE) != -1) {
515 qDebug("Could not find '" + umountS);
516 QMessageBox::warning( this, tr("Formatter"), tr("Could not umount.\nDevice is busy!"), tr("&OK") );
517 pclose(fp);
518 return false;
519 } else {
520 QString lineStr = line;
521 lineStr=lineStr.left(lineStr.length()-1);
522 outDlg->OutputEdit->append(lineStr);
523 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
524 }
525 }
526 }
527 pclose(fp);
528/////////////////////////////////////
529 fp = popen( (const char *) cmd, "r");
530 while ( fgets( line, sizeof line, fp)) {
531 if( ((QString)line).find("No such device",0,TRUE) != -1) {
532 qDebug("No such device '" + umountS);
533 QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") );
534 pclose(fp);
535// outDlg->OutputEdit->append("No such device");
536// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
537 return false;
538 } else {
539 QString lineStr = line;
540 lineStr=lineStr.left(lineStr.length()-1);
541 outDlg->OutputEdit->append(lineStr);
542 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
543 }
544 }
545 outDlg->OutputEdit->append(tr("You can now close the output window."));
546 outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
547// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted."));
548// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE);
549 pclose(fp);
550
551/////////////////////////////////////////
552
553 return true;
474} 554}
475 555
476bool FormatterApp::doFsckCheck() { 556bool FormatterApp::doFsckCheck() {
557
477 return FALSE; 558 return FALSE;
478} 559}
479 560
diff --git a/noncore/tools/formatter/formatter.h b/noncore/tools/formatter/formatter.h
index 871054d..960a68a 100644
--- a/noncore/tools/formatter/formatter.h
+++ b/noncore/tools/formatter/formatter.h
@@ -39,13 +39,13 @@ public:
39 QComboBox *storageComboBox, *fileSystemsCombo, *deviceComboBox; 39 QComboBox *storageComboBox, *fileSystemsCombo, *deviceComboBox;
40 QPushButton *formatPushButton, *editPushButton, *fsckButton; 40 QPushButton *formatPushButton, *editPushButton, *fsckButton;
41 QLineEdit* mountPointLineEdit; 41 QLineEdit* mountPointLineEdit;
42 QStringList fileSystemTypeList, fsList; 42 QStringList fileSystemTypeList, fsList, deviceList;
43protected: 43protected:
44 QGridLayout *FormatterAppLayout, *tabLayout, *tabLayout_2; 44 QGridLayout *FormatterAppLayout, *tabLayout, *tabLayout_2;
45 QString getFileSystemType(const QString &); 45 QString getFileSystemType(const QString &);
46 46
47 void fillCombos(); 47 void fillCombos();
48 void parsetab(); 48 void parsetab(const QString &);
49 bool doFdisk(); 49 bool doFdisk();
50 int formatCheck(const QString &); 50 int formatCheck(const QString &);
51 int runCommand(const QString &); 51 int runCommand(const QString &);