diff --git a/include/drive.h b/include/drive.h index f1e28ab..71b2d1d 100644 --- a/include/drive.h +++ b/include/drive.h @@ -34,6 +34,7 @@ public: } sShredSpeed; bool bWasShredded = false; // all shred iterations done + bool bWasShredStarted = false; // shred was atleast once started bool bWasChecked = false; // all shred iterations and optional checking done bool bWasDeleted = false; bool bIsOffline = false; diff --git a/src/delete.cpp b/src/delete.cpp index b7ca4bd..94560ab 100644 --- a/src/delete.cpp +++ b/src/delete.cpp @@ -32,11 +32,15 @@ void Delete::deleteDrive(Drive *drive) const char *cpComand = sCMD.c_str(); // cout << "delete: " << cpComand << endl; - FILE *deleteCmdOutput = popen(cpComand, "r"); - - while ((getline(&cLine, &len, deleteCmdOutput)) != -1) + if (drive->bWasShredStarted == false) { - // wipefs running + //only start delete if the drive was not shredded before + FILE *deleteCmdOutput = popen(cpComand, "r"); + + while ((getline(&cLine, &len, deleteCmdOutput)) != -1) + { + // wipefs running + } + pclose(deleteCmdOutput); } - pclose(deleteCmdOutput); } diff --git a/src/shred.cpp b/src/shred.cpp index 3cb9c48..d6b53c9 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -36,6 +36,7 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) ostringstream address; address << (void const *)&(*drive); Logger::logThis()->info("Shred-Task started - Drive: " + drive->getModelName() + "-" + drive->getSerial() + " @" + address.str()); + drive->bWasShredStarted = true; //Mark drive as partly shredded #ifdef DRYRUN for (int i = 0; i <= 500; i++) @@ -48,6 +49,7 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) write(*ipSignalFd, "A", 1); usleep(20000); } + drive->bWasShredded = true; #endif #ifndef DRYRUN diff --git a/src/tui.cpp b/src/tui.cpp index 8941c0f..9078b11 100644 --- a/src/tui.cpp +++ b/src/tui.cpp @@ -613,6 +613,7 @@ void TUI::vTruncateText(string *psText, uint16_t u16MaxLenght) void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY) { struct MenuState menustate; + static bool dialogIsActive; menustate.bAbort = false; menustate.bConfirmDelete = false; menustate.bConfirmShred = false; @@ -659,15 +660,21 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY) { dialog = createDialog(40, 10, ((stdscrX) - (int)(stdscrX / 3) - 7) - (int)((stdscrX / 3) + 5) / 2, (int)(stdscrY / 2) - 5, "Confirm SHRED", "Press ENTER for SHRED", "Press ESC for cancel"); wrefresh(dialog); + dialogIsActive = true; } else if (menustate.bConfirmDelete == true) { dialog = createDialog(40, 10, ((stdscrX) - (int)(stdscrX / 3) - 7) - (int)((stdscrX / 3) + 5) / 2, (int)(stdscrY / 2) - 5, "Confirm DELETE", "Press ENTER for DELETE", "Press ESC for cancel"); wrefresh(dialog); + dialogIsActive = true; } else { - delwin(dialog); + if (dialogIsActive) + { + delwin(dialog); + dialogIsActive = false; + } } }