From 298192111df6bda119b7fbc055df88637e1776f4 Mon Sep 17 00:00:00 2001 From: localhorst Date: Sun, 7 Dec 2025 18:36:32 +0100 Subject: [PATCH 1/3] new states --- include/drive.h | 2 ++ src/shred.cpp | 11 ++++++----- src/tui.cpp | 3 ++- 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/include/drive.h b/include/drive.h index 1297e13..efe147a 100644 --- a/include/drive.h +++ b/include/drive.h @@ -20,6 +20,8 @@ public: SHRED_SELECTED, SHRED_ACTIVE, // shred iterations active CHECK_ACTIVE, // optional checking active + CHECK_SUCCESSFUL, + CHECK_FAILED, DELETE_SELECTED, DELETE_ACTIVE, FROZEN diff --git a/src/shred.cpp b/src/shred.cpp index 2255310..ca77762 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -36,7 +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 + drive->bWasShredStarted = true; // Mark drive as partly shredded #ifdef DRYRUN for (int i = 0; i <= 500; i++) @@ -93,7 +93,7 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) this->ulDriveByteSize = getDriveSizeInBytes(driveFileDiscr); drive->sShredSpeed.chronoShredTimestamp = std::chrono::system_clock::now(); // set inital timestamp for speed metric - drive->sShredSpeed.ulSpeedMetricBytesWritten = 0U; // uses to calculate speed metric + drive->sShredSpeed.ulSpeedMetricBytesWritten = 0U; // uses to calculate speed metric #ifdef LOG_LEVEL_HIGH Logger::logThis()->info("Shred-Task: Bytes-Size of Drive: " + to_string(this->ulDriveByteSize) + " - Drive: " + drive->getSerial()); @@ -186,22 +186,23 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) drive->state = Drive::CHECK_ACTIVE; Logger::logThis()->info("Check-Task started - Drive: " + drive->getModelName() + "-" + drive->getSerial() + " @" + address.str()); drive->u32DriveChecksumAfterShredding = uiCalcChecksum(driveFileDiscr, drive, ipSignalFd); -#ifdef LOG_LEVEL_HIGH + if (drive->u32DriveChecksumAfterShredding != 0) { + drive->state = Drive::CHECK_FAILED; Logger::logThis()->info("Shred-Task: Checksum not zero: " + to_string(drive->u32DriveChecksumAfterShredding) + " - Drive: " + drive->getSerial()); } else { + drive->state = Drive::CHECK_SUCCESSFUL; Logger::logThis()->info("Shred-Task: Checksum zero: " + to_string(drive->u32DriveChecksumAfterShredding) + " - Drive: " + drive->getSerial()); } #endif -#endif #endif cleanup(); - if ((drive->state == Drive::SHRED_ACTIVE) || (drive->state == Drive::CHECK_ACTIVE)) + if ((drive->state == Drive::SHRED_ACTIVE) || (drive->state == Drive::CHECK_SUCCESSFUL) || (drive->state == Drive::CHECK_FAILED)) { drive->state = Drive::NONE; drive->setTaskPercentage(0.0); diff --git a/src/tui.cpp b/src/tui.cpp index e011eb1..b1d77fb 100644 --- a/src/tui.cpp +++ b/src/tui.cpp @@ -145,6 +145,7 @@ void TUI::updateTUI(list *plistDrives, uint8_t u8SelectedEntry) case Drive::NONE: case Drive::SHRED_SELECTED: case Drive::DELETE_SELECTED: + case Drive::CHECK_SUCCESSFUL: if (it->bWasDeleted) { sState = "DELETED"; // mark drive as deleted previously @@ -165,7 +166,7 @@ void TUI::updateTUI(list *plistDrives, uint8_t u8SelectedEntry) } #ifdef ZERO_CHECK - if (bSelectedEntry && it->bWasChecked && (it->u32DriveChecksumAfterShredding != 0U)) + if (bSelectedEntry && it->bWasChecked && (it->state == Drive::CHECK_FAILED)) { dialog = createZeroChecksumWarning(70, 16, ((u16StdscrX) - (int)(u16StdscrX / 2) - 20), (int)(u16StdscrY / 2) - 8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial(), it->u32DriveChecksumAfterShredding); wrefresh(dialog); From 3afe3517e26f19442e96567597c676c96fae982f Mon Sep 17 00:00:00 2001 From: localhorst Date: Wed, 10 Dec 2025 22:05:11 +0100 Subject: [PATCH 2/3] only print if check is not failed --- src/shred.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/shred.cpp b/src/shred.cpp index d295548..7132cec 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -208,11 +208,15 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) cleanup(); - if ((drive->state.load() == Drive::TaskState::SHRED_ACTIVE) || (drive->state.load() == Drive::TaskState::CHECK_ACTIVE) || (drive->state == Drive::TaskState::CHECK_FAILED)) + if ((drive->state.load() == Drive::TaskState::SHRED_ACTIVE) || (drive->state.load() == Drive::TaskState::CHECK_SUCCESSFUL) || (drive->state == Drive::TaskState::CHECK_FAILED)) { drive->state = Drive::TaskState::NONE; drive->setTaskPercentage(0.0); - Printer::getPrinter()->print(drive); + if (drive->state != Drive::TaskState::CHECK_FAILED) + { + Printer::getPrinter()->print(drive); + } + Logger::logThis()->info("Finished shred/check for: " + drive->getModelName() + "-" + drive->getSerial()); } return 0; From 238915bfee396acf1449857246cead76eda6816c Mon Sep 17 00:00:00 2001 From: localhorst Date: Wed, 10 Dec 2025 22:29:30 +0100 Subject: [PATCH 3/3] fix checksum alert --- src/shred.cpp | 5 ++--- src/tui.cpp | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/shred.cpp b/src/shred.cpp index 7132cec..e825845 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -210,13 +210,12 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) if ((drive->state.load() == Drive::TaskState::SHRED_ACTIVE) || (drive->state.load() == Drive::TaskState::CHECK_SUCCESSFUL) || (drive->state == Drive::TaskState::CHECK_FAILED)) { - drive->state = Drive::TaskState::NONE; - drive->setTaskPercentage(0.0); if (drive->state != Drive::TaskState::CHECK_FAILED) { Printer::getPrinter()->print(drive); } - + drive->state = Drive::TaskState::NONE; + drive->setTaskPercentage(0.0); Logger::logThis()->info("Finished shred/check for: " + drive->getModelName() + "-" + drive->getSerial()); } return 0; diff --git a/src/tui.cpp b/src/tui.cpp index 59418e8..54d1474 100644 --- a/src/tui.cpp +++ b/src/tui.cpp @@ -176,7 +176,7 @@ void TUI::updateTUI(list *plistDrives, uint8_t u8SelectedEntry) } #ifdef ZERO_CHECK - if (bSelectedEntry && it->bWasChecked && (it->state == Drive::TaskState::CHECK_FAILED)) + if (bSelectedEntry && it->bWasChecked && (it->u32DriveChecksumAfterShredding != 0U)) { dialog = createZeroChecksumWarning(70, 16, ((u16StdscrX) - (int)(u16StdscrX / 2) - 20), (int)(u16StdscrY / 2) - 8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial(), it->u32DriveChecksumAfterShredding); wrefresh(dialog);