diff --git a/include/reHDD.h b/include/reHDD.h index 059e199..01da1fd 100644 --- a/include/reHDD.h +++ b/include/reHDD.h @@ -31,7 +31,7 @@ #endif // Logic -// #define DRYRUN // don't touch the drives +#define DRYRUN // don't touch the drives #define FROZEN_ALERT // show alert if drive is frozen #define ZERO_CHECK // check drive after shred if all bytes are zero, show alert if this fails diff --git a/src/reHDD.cpp b/src/reHDD.cpp index 57cd30a..04c64d1 100644 --- a/src/reHDD.cpp +++ b/src/reHDD.cpp @@ -382,7 +382,13 @@ void reHDD::filterIgnoredDrives(list *plistDrives) list::iterator it; for (it = plistDrives->begin(); it != plistDrives->end(); ++it) { - if (it->getPath().find(systemDrivePath) != std::string::npos) // compare found system drive and current drive + string driveName = it->getPath(); + // Remove /dev/ prefix + if (driveName.find("/dev/") == 0) + { + driveName = driveName.substr(5); // Skip "/dev/" + } + if (systemDrivePath.find(driveName) != std::string::npos) // compare found system drive and current drive { // system drive found --> ignore this drive #ifdef LOG_LEVEL_HIGH @@ -709,14 +715,23 @@ bool reHDD::getSystemDrive(string &systemDrive) continue; } - // Logger::logThis()->info(currentLine); - + // Extract drive name from line (removing tree characters) if ((cLine[0U] != '|') && (cLine[0U] != '`')) { systemDrive = currentLine; - systemDrive.erase(std::remove(systemDrive.begin(), systemDrive.end(), '\n'), systemDrive.end()); // remove newline - systemDrive.erase(std::remove(systemDrive.begin(), systemDrive.end(), ' '), systemDrive.end()); // remove spaces - // Logger::logThis()->info("Drive found: " + systemDrive); + + // Find the actual drive name (after tree characters like └─, ├─) + size_t lastAlpha = 0; + for (size_t i = 0; i < systemDrive.length(); i++) + { + if (isalpha(systemDrive[i])) + { + lastAlpha = i; + break; + } + } + + systemDrive = systemDrive.substr(lastAlpha); } if (currentLine.ends_with(" /boot/efi\n"s)) @@ -739,5 +754,17 @@ bool reHDD::getSystemDrive(string &systemDrive) } pclose(outputfileHwinfo); + // Remove mountpoint (everything after first space) + size_t spacePos = systemDrive.find(' '); + if (spacePos != std::string::npos) + { + systemDrive = systemDrive.substr(0, spacePos); + } + + // Remove all unwanted characters + systemDrive.erase(std::remove(systemDrive.begin(), systemDrive.end(), '\n'), systemDrive.end()); + systemDrive.erase(std::remove(systemDrive.begin(), systemDrive.end(), '/'), systemDrive.end()); + systemDrive.erase(std::remove(systemDrive.begin(), systemDrive.end(), '\r'), systemDrive.end()); + return systemDriveFound; } diff --git a/src/shred.cpp b/src/shred.cpp index e825845..e152937 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -40,7 +40,7 @@ int Shred::shredDrive(Drive *drive, int *ipSignalFd) drive->bWasShredStarted = true; // Mark drive as partly shredded #ifdef DRYRUN - for (int i = 0; i <= 500; i++) + for (int i = 0; i <= 100; i++) { if (drive->state.load() != Drive::TaskState::SHRED_ACTIVE) {