-rw-r--r-- | noncore/tools/formatter/formatter.cpp | 125 | ||||
-rw-r--r-- | noncore/tools/formatter/formatter.h | 16 |
2 files changed, 108 insertions, 33 deletions
diff --git a/noncore/tools/formatter/formatter.cpp b/noncore/tools/formatter/formatter.cpp index 8c8ef2a..0dd42c8 100644 --- a/noncore/tools/formatter/formatter.cpp +++ b/noncore/tools/formatter/formatter.cpp @@ -33,32 +33,34 @@ #include <qmessagebox.h> #include <qregexp.h> #include <qlabel.h> #include <qlineedit.h> #include <qpushbutton.h> #include <qtabwidget.h> #include <qwidget.h> #include <qlayout.h> #include <qvariant.h> #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sys/vfs.h> #include <mntent.h> +#include <string.h> +#include <errno.h> #define BLANK ' ' #define DELIMITER '#' /* Blah blah blah blah */ FormatterApp::FormatterApp( QWidget* parent, const char* name, bool modal, WFlags fl ) : QMainWindow( parent, name, fl ) // : QDialog( parent, name, modal, fl ) { if ( !name ) setName( "FormatterApp" ); connect( qApp,SIGNAL( aboutToQuit()),SLOT( cleanUp()) ); setCaption( tr( "Formatter" ) ); FormatterAppLayout = new QGridLayout( this ); @@ -162,114 +164,165 @@ FormatterApp::FormatterApp( QWidget* parent, const char* name, bool modal, WFla /* * Destroys the object and frees any allocated resources frickin no duh?!? */ FormatterApp::~FormatterApp() { } void FormatterApp::doFormat() { int err=0; Output *outDlg; QString umountS, remountS; QString text = storageComboBox->currentText(); QString currentText = storageComboBox->currentText(); - QString cmd = currentText.right( currentText.length() - currentText.find(" -> ",0,TRUE) - 4); + QString cmd; + QString diskDevice = currentText.right( currentText.length() - currentText.find(" -> ",0,TRUE) - 4); + QString diskName = currentText.left(currentText.find(" -> ",0,TRUE)); QString fs = fileSystemsCombo->currentText(); - + +#if defined(QT_QWS_IPAQ) || defined(QT_QWS_EBX) // lets test on something cheap +#else + currentText = diskDevice = "/dev/fd0"; + umountS = "umount -v /floppy 2>&1"; + remountS = "mount -v /floppy 2>&1"; +#endif + if( currentText.find("CF",0,TRUE) != -1) { - umountS = "/sbin/cardctl eject"; - remountS = "/sbin/cardctl insert"; + umountS = "umount "; + remountS = "mount "; + +// umountS = "/sbin/cardctl eject"; +// remountS = "/sbin/cardctl insert"; } if( currentText.find("SD",0,TRUE) != -1) { - umountS = "/etc/sdcontrol compeject"; - remountS = "/etc/sdcontrol insert"; + umountS = "umount "; + remountS = "mount "; +// umountS = "/etc/sdcontrol compeject"; +// remountS = "/etc/sdcontrol insert"; } - switch ( QMessageBox::warning(this,tr("Format?!?"),tr("Really format\n") + currentText + - tr("\nwith ") + fs + tr(" filesystem?!?"),tr("Yes"),tr("No"),0,1,1) ) { + switch ( QMessageBox::warning(this,tr("Format?!?"),tr("Really format\n") +diskName+" "+ currentText + + tr("\nwith ") + fs + tr(" filesystem?!?\nYou will loose all data!!"),tr("Yes"),tr("No"),0,1,1) ) { case 0: { if(fs == "vfat") - cmd = "mkdosfs " + cmd; + cmd = "mkdosfs -v " + diskDevice+" 2>&1"; else if(fs == "ext2") - cmd = "mke2fs " + cmd; + cmd = "mke2fs -v " + diskDevice+" 2>&1"; else { QMessageBox::warning(this, tr("Formatter"),tr("Could not format.\nUnknown type"), tr("Ok")); break; } // cmd = "ls -l"; outDlg = new Output(this, tr("Formatter Output"),FALSE); outDlg->showMaximized(); outDlg->show(); qApp->processEvents(); FILE *fp; char line[130]; - outDlg->OutputEdit->append( tr("Trying to eject.") + currentText ); + outDlg->OutputEdit->append( tr("Trying to umount.") + currentText ); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); + sleep(1); - fp = popen( (const char *) umountS, "r"); + qDebug("Command is "+umountS); + fp = popen( (const char *) umountS, "r"); + qDebug("%d", fp); if ( !fp ) { - qDebug("Could not execute '" + umountS + "'! err=%d", fp); - QMessageBox::warning( this, tr("CardMonitor"), tr("Card eject failed!"), tr("&OK") ); + qDebug("Could not execute '" + umountS + "'! err=%d\n" +(QString)strerror(errno), err); + QMessageBox::warning( this, tr("Formatter"), tr("umount failed!"), tr("&OK") ); pclose(fp); return; } else { - outDlg->OutputEdit->append( currentText + tr("\nhas been successfully ejected.")); - +// outDlg->OutputEdit->append( currentText + tr("\nhas been successfully umounted.")); +// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); while ( fgets( line, sizeof line, fp)) { - outDlg->OutputEdit->append(line); + if( ((QString)line).find("busy",0,TRUE) != -1) { + qDebug("Could not find '" + umountS); + QMessageBox::warning( this, tr("Formatter"), tr("Could not umount.\nDevice is busy!"), tr("&OK") ); + pclose(fp); + return; + } else { + QString lineStr = line; + lineStr=lineStr.left(lineStr.length()-1); + outDlg->OutputEdit->append(lineStr); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); + } } } pclose(fp); -// err = system( (const char *) umountS); qDebug("Command would be: "+cmd); outDlg->OutputEdit->append( tr("Trying to format.") ); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); fp = popen( (const char *) cmd, "r"); while ( fgets( line, sizeof line, fp)) { - outDlg->OutputEdit->append(line); + if( ((QString)line).find("No such device",0,TRUE) != -1) { + qDebug("No such device '" + umountS); + QMessageBox::warning( this, tr("Formatter"), tr("No such device!"), tr("&OK") ); + pclose(fp); +// outDlg->OutputEdit->append("No such device"); +// outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); + return; + } else { + QString lineStr = line; + lineStr=lineStr.left(lineStr.length()-1); + outDlg->OutputEdit->append(lineStr); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); + } } outDlg->OutputEdit->append( currentText + tr("\nhas been successfully formatted.")); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); pclose(fp); - outDlg->OutputEdit->append( tr("Trying to insert.") + currentText ); + outDlg->OutputEdit->append( tr("Trying to mount.") + currentText ); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); fp = popen( (const char *) remountS, "r"); if ( !fp) { - qDebug("Could not execute '" + remountS + "'! err=%d", err); - QMessageBox::warning( this, tr("Formatter"), tr("Card insert failed!"), tr("&OK") ); + qDebug("Could not execute '" + remountS + "'! err=%d\n" +(QString)strerror(errno), err); + QMessageBox::warning( this, tr("Formatter"), tr("Card mount failed!"), tr("&OK") ); } else { - outDlg->OutputEdit->append( currentText + tr("\nhas been successfully inserted.")); + outDlg->OutputEdit->append( currentText + tr("\nhas been successfully mounted.")); while ( fgets( line, sizeof line, fp)) { - outDlg->OutputEdit->append(line); + QString lineStr = line; + lineStr=lineStr.left(lineStr.length()-1); + outDlg->OutputEdit->append(lineStr); + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); } } pclose(fp); sleep(1); outDlg->OutputEdit->append(tr("You can now close the output window.")); - outDlg->close(); - if(outDlg) - delete outDlg; + outDlg->OutputEdit->setCursorPosition(outDlg->OutputEdit->numLines() + 1,0,FALSE); +// outDlg->close(); +// if(outDlg) +// delete outDlg; } break; }; } +bool FormatterApp::doFdisk() { + return FALSE; + +} + void FormatterApp::fillCombos() { StorageInfo storageInfo; const QList<FileSystem> &fs = storageInfo.fileSystems(); QListIterator<FileSystem> it ( fs ); QString storage; for( ; it.current(); ++it ){ const QString name = (*it)->name(); const QString path = (*it)->path(); const QString disk = (*it)->disk(); const QString options = (*it)->options(); if( name.find( tr("Internal"),0,TRUE) == -1) { storageComboBox->insertItem(name +" -> "+disk); } deviceComboBox->insertItem(disk); } @@ -393,27 +446,43 @@ void FormatterApp::parsetab() { } QString FormatterApp::getFileSystemType(const QString ¤tText) { parsetab(); //why did TT forget filesystem type? for ( QStringList::Iterator it = fileSystemTypeList.begin(); it != fileSystemTypeList.end(); ++it ) { QString temp = (*it); if( temp.find( currentText,0,TRUE) != -1) { return temp.right( temp.length() - temp.find("::",0,TRUE) - 2); // qDebug(fsType); } } return ""; } -void FormatterApp::doFsck() { +bool FormatterApp::doFsck() { QString selectedDevice = deviceComboBox->currentText(); QString fsType = getFileSystemType((const QString &)selectedDevice); QString cmd; qDebug( selectedDevice +" "+ fsType); if(fsType == "vfat") cmd = "dosfsck -vy "; if(fsType == "ext2") cmd = "e2fsck -cpvy "; cmd += selectedDevice; + + return FALSE; +} + +bool FormatterApp::doFsckCheck() { + return FALSE; +} + +int FormatterApp::formatCheck(const QString &deviceStr) { + + return -1; +} + +int FormatterApp::runCommand(const QString &command) { + + return -1; } diff --git a/noncore/tools/formatter/formatter.h b/noncore/tools/formatter/formatter.h index a566ec0..871054d 100644 --- a/noncore/tools/formatter/formatter.h +++ b/noncore/tools/formatter/formatter.h @@ -30,30 +30,36 @@ class FormatterApp : public QMainWindow Q_OBJECT public: FormatterApp( QWidget* parent = 0, const char* name = 0, bool modal = FALSE, WFlags fl = 0 ); ~FormatterApp(); QTabWidget *TabWidget; QWidget *tab, *tab_2;; QLabel *TextLabel1, *TextLabel2, *TextLabel3, *TextLabel4, *TextLabel5; QComboBox *storageComboBox, *fileSystemsCombo, *deviceComboBox; QPushButton *formatPushButton, *editPushButton, *fsckButton; QLineEdit* mountPointLineEdit; QStringList fileSystemTypeList, fsList; protected: QGridLayout *FormatterAppLayout, *tabLayout, *tabLayout_2; QString getFileSystemType(const QString &); + + void fillCombos(); + void parsetab(); + bool doFdisk(); + int formatCheck(const QString &); + int runCommand(const QString &); protected slots: - void doFormat(); - void fillCombos(); void cleanUp(); + void doFormat(); + void editFstab(); + bool doFsck(); + bool doFsckCheck(); + void fsComboSelected(int); void storageComboSelected(int ); void deviceComboSelected(int ); - void editFstab(); - void parsetab(); - void doFsck(); }; #endif // FORMATTERAPP_H |