diff --git a/include/delete.h b/include/delete.h index d1e1381..831f67f 100644 --- a/include/delete.h +++ b/include/delete.h @@ -13,13 +13,11 @@ class Delete { protected: - public: - static void deleteDrive(Drive* drive); + static void deleteDrive(Drive *drive); private: Delete(void); - }; -#endif // DELETE_H_ +#endif // DELETE_H_ diff --git a/include/drive.h b/include/drive.h index 72037fe..f1e28ab 100644 --- a/include/drive.h +++ b/include/drive.h @@ -14,14 +14,16 @@ class Drive { public: - enum TaskState {NONE, - SHRED_SELECTED, - SHRED_ACTIVE, //shred iterations active - CHECK_ACTIVE, //optional checking active - DELETE_SELECTED, - DELETE_ACTIVE, - FROZEN - } state; + enum TaskState + { + NONE, + SHRED_SELECTED, + SHRED_ACTIVE, // shred iterations active + CHECK_ACTIVE, // optional checking active + DELETE_SELECTED, + DELETE_ACTIVE, + FROZEN + } state; struct { @@ -31,36 +33,35 @@ public: unsigned long ulSpeedMetricBytesWritten; } sShredSpeed; - bool bWasShredded = false; //all shred iterations done - bool bWasChecked = false; //all shred iterations and optional checking done + bool bWasShredded = false; // all shred iterations done + bool bWasChecked = false; // all shred iterations and optional checking done bool bWasDeleted = false; bool bIsOffline = false; uint32_t u32DriveChecksumAfterShredding = 0U; private: string sPath; - time_t u32Timestamp = 0U; //unix timestamp for detecting a frozen drive - double d32TaskPercentage = 0U; //in percent for Shred (1 to 100) - time_t u32TimestampTaskStart = 0U; //unix timestamp for duration of an action - time_t u32TaskDuration = 0U; //time needed to complete the task + time_t u32Timestamp = 0U; // unix timestamp for detecting a frozen drive + double d32TaskPercentage = 0U; // in percent for Shred (1 to 100) + time_t u32TimestampTaskStart = 0U; // unix timestamp for duration of an action + time_t u32TaskDuration = 0U; // time needed to complete the task struct { string sModelFamily; string sModelName; string sSerial; - uint64_t u64Capacity = 0U; //in byte + uint64_t u64Capacity = 0U; // in byte uint32_t u32ErrorCount = 0U; - uint32_t u32PowerOnHours = 0U; //in hours + uint32_t u32PowerOnHours = 0U; // in hours uint32_t u32PowerCycles = 0U; - uint32_t u32Temperature = 0U; //in Fahrenheit, just kidding: degree Celsius + uint32_t u32Temperature = 0U; // in Fahrenheit, just kidding: degree Celsius } sSmartData; private: void setTimestamp(); protected: - public: Drive(string path) { @@ -71,21 +72,21 @@ public: string getModelFamily(void); string getModelName(void); string getSerial(void); - uint64_t getCapacity(void); //in byte + uint64_t getCapacity(void); // in byte uint32_t getErrorCount(void); - uint32_t getPowerOnHours(void); //in hours + uint32_t getPowerOnHours(void); // in hours uint32_t getPowerCycles(void); - uint32_t getTemperature(void); //in Fahrenheit, just kidding: degree Celsius + uint32_t getTemperature(void); // in Fahrenheit, just kidding: degree Celsius void checkFrozenDrive(void); - void setDriveSMARTData( string modelFamily, - string modelName, - string serial, - uint64_t capacity, - uint32_t errorCount, - uint32_t powerOnHours, - uint32_t powerCycles, - uint32_t temperature); + void setDriveSMARTData(string modelFamily, + string modelName, + string serial, + uint64_t capacity, + uint32_t errorCount, + uint32_t powerOnHours, + uint32_t powerCycles, + uint32_t temperature); string sCapacityToText(); string sErrorCountToText(); @@ -101,7 +102,6 @@ public: void calculateTaskDuration(); time_t getTaskDuration(); - }; -#endif // DRIVE_H_ \ No newline at end of file +#endif // DRIVE_H_ \ No newline at end of file diff --git a/include/logger/logger.h b/include/logger/logger.h index b6751ea..8f883e2 100644 --- a/include/logger/logger.h +++ b/include/logger/logger.h @@ -28,26 +28,26 @@ using namespace std; -#define MENU_LINE_SIZE 110 //Size of menu lines +#define MENU_LINE_SIZE 110 // Size of menu lines #ifndef LOG_PATH -//#define LOG_PATH "./test.txt" +// #define LOG_PATH "./test.txt" #endif #ifndef DESCRIPTION -#define DESCRIPTION "Software-Name - Copyright Company 2020" //use your values here +#define DESCRIPTION "Software-Name - Copyright Company 2020" // use your values here #endif #ifndef DEVICE_ID -#define DEVICE_ID "Device-Name" //use your values here +#define DEVICE_ID "Device-Name" // use your values here #endif #ifndef SOFTWARE_VERSION -#define SOFTWARE_VERSION "0.1.1.8" //use your values here +#define SOFTWARE_VERSION "0.1.1.8" // use your values here #endif #ifndef HARDWARE_VERSION -#define HARDWARE_VERSION "7.77.9" //use your values here +#define HARDWARE_VERSION "7.77.9" // use your values here #endif class Logger @@ -68,13 +68,12 @@ private: ~Logger(); public: - void info(string s); void warning(string s); void error(string s); void newLine(); - static Logger* logThis(); + static Logger *logThis(); }; -#endif // LOGGER_H_ \ No newline at end of file +#endif // LOGGER_H_ \ No newline at end of file diff --git a/include/printer.h b/include/printer.h index 638c3e7..b67a1e4 100644 --- a/include/printer.h +++ b/include/printer.h @@ -35,18 +35,16 @@ typedef struct typedef struct { - long msg_queue_type; + long msg_queue_type; t_driveData driveData; } t_msgQueueData; - class Printer { protected: - public: - static Printer* getPrinter(); - void print(Drive* drive); + static Printer *getPrinter(); + void print(Drive *drive); private: static bool instanceFlag; @@ -54,7 +52,5 @@ private: int msqid; Printer(); ~Printer(); - - }; -#endif // PRINTER_H_ \ No newline at end of file +#endif // PRINTER_H_ \ No newline at end of file diff --git a/include/reHDD.h b/include/reHDD.h index b23d0eb..aa3085d 100644 --- a/include/reHDD.h +++ b/include/reHDD.h @@ -11,31 +11,31 @@ #define REHDD_VERSION "V1.1.1" // Drive handling Settings -#define WORSE_HOURS 19200 //mark drive if at this limit or beyond -#define WORSE_POWERUP 10000 //mark drive if at this limit or beyond -#define WORSE_TEMPERATURE 55 //mark drive if at this limit or beyond +#define WORSE_HOURS 19200 // mark drive if at this limit or beyond +#define WORSE_POWERUP 10000 // mark drive if at this limit or beyond +#define WORSE_TEMPERATURE 55 // mark drive if at this limit or beyond #define SHRED_ITERATIONS 3U -#define FROZEN_TIMEOUT 20 //After this timeout (minutes) the drive will be marked as frozen, if no progress -#define METRIC_THRESHOLD 3L*1000L*1000L*1000L //calc shred speed with this minimum of time delta +#define FROZEN_TIMEOUT 20 // After this timeout (minutes) the drive will be marked as frozen, if no progress +#define METRIC_THRESHOLD 3L * 1000L * 1000L * 1000L // calc shred speed with this minimum of time delta // Logger Settings #define LOG_PATH "./reHDD.log" #define DESCRIPTION "reHDD - Copyright Hendrik Schutter 2024" -#define DEVICE_ID "generic" -#define SOFTWARE_VERSION REHDD_VERSION -#define HARDWARE_VERSION "generic" +#define DEVICE_ID "generic" +#define SOFTWARE_VERSION REHDD_VERSION +#define HARDWARE_VERSION "generic" -//#define LOG_LEVEL_HIGH //log everything, like drive scan thread +// #define LOG_LEVEL_HIGH //log everything, like drive scan thread #ifndef LOG_LEVEL_HIGH -#define LOG_LEVEL_LOW //log only user actions and tasks +#define LOG_LEVEL_LOW // log only user actions and tasks #endif // Logic -//#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 +// #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 -//IPC pipes +// IPC pipes #define READ 0 #define WRITE 1 @@ -67,9 +67,10 @@ using namespace std; #include "printer.h" #include "logger/logger.h" -extern Logger* logging; +extern Logger *logging; -template T* iterator_to_pointer(I i) +template +T *iterator_to_pointer(I i) { return (&(*i)); } @@ -77,31 +78,29 @@ template T* iterator_to_pointer(I i) class reHDD { protected: - public: reHDD(void); static void app_logic(); private: - - static void searchDrives(list * plistDrives); - static void printDrives(list * plistDrives); - static void startShredAllDrives(list * plistDrives); - static void updateShredMetrics(list * plistDrives); - static void filterIgnoredDrives(list * plistDrives); - static void filterInvalidDrives(list * plistDrives); - static void filterNewDrives(list * plistOldDrives, list * plistNewDrives); - static void addSMARTData(list * plistDrives); + static void searchDrives(list *plistDrives); + static void printDrives(list *plistDrives); + static void startShredAllDrives(list *plistDrives); + static void updateShredMetrics(list *plistDrives); + static void filterIgnoredDrives(list *plistDrives); + static void filterInvalidDrives(list *plistDrives); + static void filterNewDrives(list *plistOldDrives, list *plistNewDrives); + static void addSMARTData(list *plistDrives); static void ThreadScanDevices(); static void ThreadUserInput(); - static void ThreadShred(Drive* const pDrive); + static void ThreadShred(Drive *const pDrive); static void ThreadDelete(); static void ThreadCheckFrozenDrives(); static void handleArrowKey(TUI::UserInput userInput); static void handleEnter(); static void handleESC(); static void handleAbort(); - static Drive* getSelectedDrive(); + static Drive *getSelectedDrive(); }; -#endif // REHDD_H_ +#endif // REHDD_H_ diff --git a/include/shred.h b/include/shred.h index c423d36..1d9af23 100644 --- a/include/shred.h +++ b/include/shred.h @@ -17,26 +17,23 @@ #include #include +#define CHUNK_SIZE 1024 * 1024 * 32 // amount of bytes that are overwritten at once --> 32MB +#define TFNG_DATA_SIZE CHUNK_SIZE // amount of bytes used by tfng -#define CHUNK_SIZE 1024*1024*32 //amount of bytes that are overwritten at once --> 32MB -#define TFNG_DATA_SIZE CHUNK_SIZE //amount of bytes used by tfng - -//#define DEMO_DRIVE_SIZE 1024*1024*256L // 256MB -//#define DEMO_DRIVE_SIZE 1024*1024*1024L // 1GB -//#define DEMO_DRIVE_SIZE 5*1024*1024*1024L // 5GB -//#define DEMO_DRIVE_SIZE 1024*1024*1024*10L // 10GB +// #define DEMO_DRIVE_SIZE 1024*1024*256L // 256MB +// #define DEMO_DRIVE_SIZE 1024*1024*1024L // 1GB +// #define DEMO_DRIVE_SIZE 5*1024*1024*1024L // 5GB +// #define DEMO_DRIVE_SIZE 1024*1024*1024*10L // 10GB typedef int fileDescriptor; class Shred { protected: - public: - Shred(); ~Shred(); - int shredDrive(Drive* drive, int* ipSignalFd); + int shredDrive(Drive *drive, int *ipSignalFd); private: fileDescriptor randomSrcFileDiscr; @@ -44,16 +41,15 @@ private: unsigned char caTfngData[TFNG_DATA_SIZE]; unsigned char caReadBuffer[CHUNK_SIZE]; unsigned long ulDriveByteSize; - unsigned long ulDriveByteOverallCount = 0; //all bytes shredded in all iterations + checking -> used for progress calculation + unsigned long ulDriveByteOverallCount = 0; // all bytes shredded in all iterations + checking -> used for progress calculation double d32Percent = 0.0; double d32TmpPercent = 0.0; inline double calcProgress(); int iRewindDrive(fileDescriptor file); unsigned long getDriveSizeInBytes(fileDescriptor file); - unsigned int uiCalcChecksum(fileDescriptor file, Drive* drive, int* ipSignalFd); + unsigned int uiCalcChecksum(fileDescriptor file, Drive *drive, int *ipSignalFd); void cleanup(); - }; -#endif // SHRED_H_ +#endif // SHRED_H_ diff --git a/include/smart.h b/include/smart.h index f7b9adb..d19d231 100644 --- a/include/smart.h +++ b/include/smart.h @@ -13,9 +13,8 @@ class SMART { protected: - public: - static void readSMARTData(Drive* drive); + static void readSMARTData(Drive *drive); private: SMART(void); @@ -30,14 +29,14 @@ private: static void parsePowerCycle(string sLine); static void parseTemperature(string sLine); - static string modelFamily; - static string modelName; - static string serial; - static uint64_t capacity; - static uint32_t errorCount; - static uint32_t powerOnHours; - static uint32_t powerCycle; - static uint32_t temperature; + static string modelFamily; + static string modelName; + static string serial; + static uint64_t capacity; + static uint32_t errorCount; + static uint32_t powerOnHours; + static uint32_t powerCycle; + static uint32_t temperature; }; -#endif // SMART_H_ \ No newline at end of file +#endif // SMART_H_ \ No newline at end of file diff --git a/include/tui.h b/include/tui.h index 87b7ac9..df7cd8d 100644 --- a/include/tui.h +++ b/include/tui.h @@ -20,10 +20,19 @@ class TUI { protected: - public: - - enum UserInput { UpKey, DownKey, Abort, Shred, ShredAll, Delete, Enter, ESC, Undefined}; + enum UserInput + { + UpKey, + DownKey, + Abort, + Shred, + ShredAll, + Delete, + Enter, + ESC, + Undefined + }; struct MenuState { bool bAbort; @@ -37,7 +46,7 @@ public: static void initTUI(); - void updateTUI(list * plistDrives, uint8_t u8SelectedEntry); + void updateTUI(list *plistDrives, uint8_t u8SelectedEntry); static enum UserInput readUserInput(); @@ -46,28 +55,28 @@ private: static string sRamUsage; static string sLocalTime; - WINDOW* overview; - WINDOW* systemview; - WINDOW* detailview; - WINDOW* menuview; - WINDOW* dialog; - WINDOW* smartWarning; + WINDOW *overview; + WINDOW *systemview; + WINDOW *detailview; + WINDOW *menuview; + WINDOW *dialog; + WINDOW *smartWarning; - static void centerTitle(WINDOW* pwin, const char* title); - static WINDOW *createOverViewWindow( int iXSize, int iYSize); - static WINDOW *createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive drive); - static WINDOW *overwriteDetailViewWindow( int iXSize, int iYSize, int iXStart); + static void centerTitle(WINDOW *pwin, const char *title); + static WINDOW *createOverViewWindow(int iXSize, int iYSize); + static WINDOW *createDetailViewWindow(int iXSize, int iYSize, int iXStart, Drive drive); + static WINDOW *overwriteDetailViewWindow(int iXSize, int iYSize, int iXStart); static WINDOW *createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, int iListIndex, string sModelFamily, string sSerial, string sCapacity, string sState, string sTime, string sSpeed, string sTemp, bool bSelected); static WINDOW *createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart); static WINDOW *createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate); static WINDOW *createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string selectedTask, string optionA, string optionB); - static WINDOW* createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, string sProgress); - static WINDOW* createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount, uint32_t u32Temperature); - static WINDOW* createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, uint32_t u32Checksum); + static WINDOW *createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, string sProgress); + static WINDOW *createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount, uint32_t u32Temperature); + static WINDOW *createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, uint32_t u32Checksum); void displaySelectedDrive(Drive drive, int stdscrX, int stdscrY); string formatTimeDuration(time_t u32Duration); string formatSpeed(time_t u32ShredTimeDelta, unsigned long ulWrittenBytes); - static void vTruncateText(string* psText, uint16_t u16MaxLenght); + static void vTruncateText(string *psText, uint16_t u16MaxLenght); }; -#endif // TUI_H_ \ No newline at end of file +#endif // TUI_H_ \ No newline at end of file diff --git a/src/delete.cpp b/src/delete.cpp index 0d60b25..b7ca4bd 100644 --- a/src/delete.cpp +++ b/src/delete.cpp @@ -12,11 +12,11 @@ * \param pointer of Drive instance * \return void */ -void Delete::deleteDrive(Drive* drive) +void Delete::deleteDrive(Drive *drive) { - size_t len = 0; //lenght of found line - char* cLine = NULL; //found line + size_t len = 0; // lenght of found line + char *cLine = NULL; // found line #ifndef DRYRUN string sCMD = ("wipefs -af "); @@ -25,18 +25,18 @@ void Delete::deleteDrive(Drive* drive) #endif #ifdef DRYRUN - //cout << "dryrun for " << drive->getPath() << endl; + // cout << "dryrun for " << drive->getPath() << endl; string sCMD = ("echo"); #endif - const char* cpComand = sCMD.c_str(); - //cout << "delete: " << cpComand << endl; + const char *cpComand = sCMD.c_str(); + // cout << "delete: " << cpComand << endl; - FILE* deleteCmdOutput = popen(cpComand, "r"); + FILE *deleteCmdOutput = popen(cpComand, "r"); while ((getline(&cLine, &len, deleteCmdOutput)) != -1) - { - //wipefs running - } + { + // wipefs running + } pclose(deleteCmdOutput); } diff --git a/src/drive.cpp b/src/drive.cpp index b2190a0..1ca3e61 100644 --- a/src/drive.cpp +++ b/src/drive.cpp @@ -54,16 +54,16 @@ uint32_t Drive::getTemperature(void) string Drive::sCapacityToText() { char acBuffer[16]; - double dSize = (double) getCapacity(); + double dSize = (double)getCapacity(); uint16_t u16UnitIndex = 0; - const char* units[] = {"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}; - while (dSize >= 1000) //using the marketing capacity - { - dSize /= 1000; - u16UnitIndex++; - } + const char *units[] = {"B", "kB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"}; + while (dSize >= 1000) // using the marketing capacity + { + dSize /= 1000; + u16UnitIndex++; + } - sprintf(acBuffer, "%.*f %s", u16UnitIndex-3, dSize, units[u16UnitIndex]); + sprintf(acBuffer, "%.*f %s", u16UnitIndex - 3, dSize, units[u16UnitIndex]); return acBuffer; } @@ -80,8 +80,8 @@ string Drive::sPowerOnHoursToText() stringstream streamDays; stringstream streamYears; - dDays = (double) ((double)u32Hours/(double)24U); - dYears = (double) ((double)u32Hours/(double)8760U); + dDays = (double)((double)u32Hours / (double)24U); + dYears = (double)((double)u32Hours / (double)8760U); streamDays << fixed << setprecision(0) << dDays; streamYears << fixed << setprecision(1) << dYears; @@ -98,23 +98,23 @@ string Drive::sPowerCyclesToText() string Drive::sTemperatureToText() { - return to_string(getTemperature())+" C";; + return to_string(getTemperature()) + " C"; + ; } void Drive::setTaskPercentage(double d32TaskPercentage) { - if(d32TaskPercentage <= 100) - { - this->d32TaskPercentage = d32TaskPercentage; - this->setTimestamp(); //set timestamp for this progress for detecting a frozen drive - } + if (d32TaskPercentage <= 100) + { + this->d32TaskPercentage = d32TaskPercentage; + this->setTimestamp(); // set timestamp for this progress for detecting a frozen drive + } } double Drive::getTaskPercentage(void) { return this->d32TaskPercentage; } - /** * \brief set S.M.A.R.T. values in model * \param string modelFamily @@ -127,14 +127,14 @@ double Drive::getTaskPercentage(void) * \param uint32_t temperature * \return void */ -void Drive::setDriveSMARTData( string modelFamily, - string modelName, - string serial, - uint64_t capacity, - uint32_t errorCount, - uint32_t powerOnHours, - uint32_t powerCycle, - uint32_t temperature) +void Drive::setDriveSMARTData(string modelFamily, + string modelName, + string serial, + uint64_t capacity, + uint32_t errorCount, + uint32_t powerOnHours, + uint32_t powerCycle, + uint32_t temperature) { this->sSmartData.sModelFamily = modelFamily; this->sSmartData.sModelName = modelName; @@ -179,11 +179,11 @@ void Drive::checkFrozenDrive(void) time_t u32localtime; time(&u32localtime); - if((u32localtime - this->u32Timestamp) >= (FROZEN_TIMEOUT*60) && (this->u32Timestamp > 0) && (this->getTaskPercentage() < 100.0)) - { - Logger::logThis()->warning("Drive Frozen: " + this->getModelName() + " " + this->getSerial()); - this->bWasDeleted = false; - this->bWasShredded = false; - this->state = Drive::FROZEN; - } + if ((u32localtime - this->u32Timestamp) >= (FROZEN_TIMEOUT * 60) && (this->u32Timestamp > 0) && (this->getTaskPercentage() < 100.0)) + { + Logger::logThis()->warning("Drive Frozen: " + this->getModelName() + " " + this->getSerial()); + this->bWasDeleted = false; + this->bWasShredded = false; + this->state = Drive::FROZEN; + } } \ No newline at end of file diff --git a/src/logger/logger.cpp b/src/logger/logger.cpp index f77021d..a91889b 100644 --- a/src/logger/logger.cpp +++ b/src/logger/logger.cpp @@ -5,16 +5,15 @@ * @date 04.09.2020 */ - #include "../../include/reHDD.h" //for logger settings #include "../../include/logger/logger.h" using namespace std; -string version = "0.2.1"; //logger version +string version = "0.2.1"; // logger version bool Logger::instanceFlag = false; -Logger* Logger::single = NULL; +Logger *Logger::single = NULL; /** * \brief create new logger instance @@ -95,13 +94,13 @@ void Logger::error(string s) void Logger::writeLog(string s) { ofstream logFile; - Logger::mtxLog.lock(); //lock this section for other threads + Logger::mtxLog.lock(); // lock this section for other threads logFile.open(this->logPath, ios_base::app); - logFile << (s + "\n"); //append to existing file + logFile << (s + "\n"); // append to existing file logFile.close(); - Logger::mtxLog.unlock(); //unlock this section for other threads + Logger::mtxLog.unlock(); // unlock this section for other threads } /** @@ -120,21 +119,21 @@ void Logger::newLine() */ string Logger::getTimestamp() { - struct tm * timeinfo; + struct tm *timeinfo; struct timeval tv; int millisec; - char cpDate [80]; - char buffer [120]; + char cpDate[80]; + char buffer[120]; gettimeofday(&tv, NULL); - millisec = lrint(tv.tv_usec/1000.0); // Round to nearest millisec - if (millisec>=1000) // Allow for rounding up to nearest second - { - millisec -=1000; - tv.tv_sec++; - } + millisec = lrint(tv.tv_usec / 1000.0); // Round to nearest millisec + if (millisec >= 1000) // Allow for rounding up to nearest second + { + millisec -= 1000; + tv.tv_sec++; + } timeinfo = localtime(&tv.tv_sec); - strftime (cpDate,80,"%d/%m/%Y %T",timeinfo); + strftime(cpDate, 80, "%d/%m/%Y %T", timeinfo); sprintf(buffer, "%s.%03d", cpDate, millisec); return buffer; } @@ -147,18 +146,17 @@ string Logger::getTimestamp() string Logger::getMacAddress() { struct ifreq ifr; - int s = socket(AF_INET, SOCK_STREAM,0); + int s = socket(AF_INET, SOCK_STREAM, 0); strcpy(ifr.ifr_name, "eth0"); if (ioctl(s, SIOCGIFHWADDR, &ifr) < 0) - { - strcpy(ifr.ifr_name, "eno1"); - - } + { + strcpy(ifr.ifr_name, "eno1"); + } unsigned char *hwaddr = (unsigned char *)ifr.ifr_hwaddr.sa_data; - char buffer [80]; - sprintf(buffer,"%02X:%02X:%02X:%02X:%02X:%02X", hwaddr[0], hwaddr[1], hwaddr[2], + char buffer[80]; + sprintf(buffer, "%02X:%02X:%02X:%02X:%02X:%02X", hwaddr[0], hwaddr[1], hwaddr[2], hwaddr[3], hwaddr[4], hwaddr[5]); close(s); string tmp = buffer; @@ -174,22 +172,22 @@ string Logger::getMacAddress() */ string Logger::padStringMenu(char cBorder, string text, uint8_t u8LineLenght) { - string result(1,cBorder); + string result(1, cBorder); uint8_t u8TextSize = text.length(); - uint8_t u8Padding = ((u8LineLenght-u8TextSize)/2); + uint8_t u8Padding = ((u8LineLenght - u8TextSize) / 2); - for(uint8_t i = 0 ; i < u8Padding; i++) - { - result.append(" "); - } + for (uint8_t i = 0; i < u8Padding; i++) + { + result.append(" "); + } result.append(text); - while((uint8_t)result.length() < (u8LineLenght-1)) - { + while ((uint8_t)result.length() < (u8LineLenght - 1)) + { - result.append(" "); - } + result.append(" "); + } result.append(string(1, cBorder)); return result; @@ -203,12 +201,12 @@ string Logger::padStringMenu(char cBorder, string text, uint8_t u8LineLenght) */ string Logger::menuLine(char cBorder, uint8_t u8LineLenght) { - string result(1,cBorder); + string result(1, cBorder); - while((uint8_t)result.length() < u8LineLenght) - { - result.append(string(1, cBorder)); - } + while ((uint8_t)result.length() < u8LineLenght) + { + result.append(string(1, cBorder)); + } return result; } @@ -216,18 +214,16 @@ string Logger::menuLine(char cBorder, uint8_t u8LineLenght) * \brief return a instance of the logger * \return logger obj */ -Logger* Logger::logThis() +Logger *Logger::logThis() { if (!instanceFlag) - { - single = new Logger(); //create new obj - instanceFlag = true; - return single; - } + { + single = new Logger(); // create new obj + instanceFlag = true; + return single; + } else - { - return single; //return existing obj - } + { + return single; // return existing obj + } } - - diff --git a/src/main.cpp b/src/main.cpp index 96a915e..30441e1 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -16,7 +16,7 @@ int main(void) { // cout << "refurbishingHddTool" << endl; - reHDD* app = new reHDD(); + reHDD *app = new reHDD(); app->app_logic(); return EXIT_SUCCESS; } \ No newline at end of file diff --git a/src/printer.cpp b/src/printer.cpp index e8db0bb..7bf620a 100644 --- a/src/printer.cpp +++ b/src/printer.cpp @@ -8,7 +8,7 @@ #include "../include/reHDD.h" bool Printer::instanceFlag = false; -Printer* Printer::single = NULL; +Printer *Printer::single = NULL; /** * \brief create new Printer instance @@ -19,9 +19,9 @@ Printer* Printer::single = NULL; Printer::Printer() { if (-1 == (this->msqid = msgget((key_t)IPC_MSG_QUEUE_KEY, IPC_CREAT | 0666))) - { - Logger::logThis()->error("Printer: Create mgs queue failed!"); - } + { + Logger::logThis()->error("Printer: Create mgs queue failed!"); + } } /** @@ -37,47 +37,48 @@ Printer::~Printer() * \brief send data to msg queue * \return void */ -void Printer::print(Drive* drive) +void Printer::print(Drive *drive) { - t_msgQueueData msgQueueData; + t_msgQueueData msgQueueData; msgQueueData.msg_queue_type = 1; - sprintf(msgQueueData.driveData.caDriveIndex, "%i",42); //TODO: get from tui + sprintf(msgQueueData.driveData.caDriveIndex, "%i", 42); // TODO: get from tui sprintf(msgQueueData.driveData.caDriveState, "shredded"); strcpy(msgQueueData.driveData.caDriveModelFamily, drive->getModelFamily().c_str()); strcpy(msgQueueData.driveData.caDriveModelName, drive->getModelName().c_str()); sprintf(msgQueueData.driveData.caDriveCapacity, "%li", drive->getCapacity()); strcpy(msgQueueData.driveData.caDriveSerialnumber, drive->getSerial().c_str()); - sprintf(msgQueueData.driveData.caDriveHours, "%i",drive->getPowerOnHours()); - sprintf(msgQueueData.driveData.caDriveCycles, "%i",drive->getPowerCycles()); - sprintf(msgQueueData.driveData.caDriveErrors, "%i",drive->getErrorCount()); - sprintf(msgQueueData.driveData.caDriveShredTimestamp, "%li",drive->getActionStartTimestamp()); - sprintf(msgQueueData.driveData.caDriveShredDuration, "%li",drive->getTaskDuration()); + sprintf(msgQueueData.driveData.caDriveHours, "%i", drive->getPowerOnHours()); + sprintf(msgQueueData.driveData.caDriveCycles, "%i", drive->getPowerCycles()); + sprintf(msgQueueData.driveData.caDriveErrors, "%i", drive->getErrorCount()); + sprintf(msgQueueData.driveData.caDriveShredTimestamp, "%li", drive->getActionStartTimestamp()); + sprintf(msgQueueData.driveData.caDriveShredDuration, "%li", drive->getTaskDuration()); sprintf(msgQueueData.driveData.caDriveReHddVersion, REHDD_VERSION); if (-1 == msgsnd(this->msqid, &msgQueueData, sizeof(t_msgQueueData) - sizeof(long), 0)) - { - Logger::logThis()->error("Printer: Send mgs queue failed!"); - }else{ - Logger::logThis()->info("Printer: print triggered - Drive: " + drive->getSerial()); - } + { + Logger::logThis()->error("Printer: Send mgs queue failed!"); + } + else + { + Logger::logThis()->info("Printer: print triggered - Drive: " + drive->getSerial()); + } } - /** * \brief return a instance of the printer * \return printer obj */ -Printer* Printer::getPrinter() +Printer *Printer::getPrinter() { if (!instanceFlag) - { - single = new Printer(); //create new obj - instanceFlag = true; - return single; - } + { + single = new Printer(); // create new obj + instanceFlag = true; + return single; + } else - { - return single; //return existing obj - } + { + return single; // return existing obj + } } \ No newline at end of file diff --git a/src/shred.cpp b/src/shred.cpp index 65bf219..158e19b 100644 --- a/src/shred.cpp +++ b/src/shred.cpp @@ -8,14 +8,15 @@ #include "../include/reHDD.h" #ifdef __cplusplus -extern "C" { +extern "C" +{ #endif #include "../tfnoisegen/tfprng.h" #ifdef __cplusplus } #endif -const static char *randomsrc = (char*) "/dev/urandom"; +const static char *randomsrc = (char *)"/dev/urandom"; Shred::Shred() { @@ -30,181 +31,182 @@ Shred::~Shred() * \param pointer of Drive instance * \return void */ -int Shred::shredDrive(Drive* drive, int* ipSignalFd) +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()); #ifdef DRYRUN - for(int i = 0; i<=500; i++) + for (int i = 0; i <= 500; i++) + { + if (drive->state != Drive::SHRED_ACTIVE) { - if(drive->state != Drive::SHRED_ACTIVE) - { - return 0; - } - drive->setTaskPercentage(i+0.05); - write(*ipSignalFd, "A",1); - usleep(20000); + return 0; } + drive->setTaskPercentage(i + 0.05); + write(*ipSignalFd, "A", 1); + usleep(20000); + } #endif #ifndef DRYRUN const char *cpDrivePath = drive->getPath().c_str(); unsigned char ucKey[TFNG_KEY_SIZE]; - //open random source + // open random source randomSrcFileDiscr = open(randomsrc, O_RDONLY | O_LARGEFILE); if (randomSrcFileDiscr == -1) - { - std::string errorMsg(strerror(randomSrcFileDiscr)); - Logger::logThis()->error("Shred-Task: Open random source failed! " + errorMsg + " - Drive: " + drive->getSerial()); - perror(randomsrc); - cleanup(); - return -1; - } + { + std::string errorMsg(strerror(randomSrcFileDiscr)); + Logger::logThis()->error("Shred-Task: Open random source failed! " + errorMsg + " - Drive: " + drive->getSerial()); + perror(randomsrc); + cleanup(); + return -1; + } - //open disk + // open disk driveFileDiscr = open(cpDrivePath, O_RDWR | O_LARGEFILE); if (driveFileDiscr == -1) - { - std::string errorMsg(strerror(driveFileDiscr)); - Logger::logThis()->error("Shred-Task: Open drive failed! " + errorMsg + " - Drive: " + drive->getSerial()); - perror(cpDrivePath); - cleanup(); - return -1; - } + { + std::string errorMsg(strerror(driveFileDiscr)); + Logger::logThis()->error("Shred-Task: Open drive failed! " + errorMsg + " - Drive: " + drive->getSerial()); + perror(cpDrivePath); + cleanup(); + return -1; + } - //read key for random generator - ssize_t readRet = read(randomSrcFileDiscr, ucKey, sizeof(ucKey)) ; + // read key for random generator + ssize_t readRet = read(randomSrcFileDiscr, ucKey, sizeof(ucKey)); if (readRet <= 0) - { - std::string errorMsg(strerror(readRet)); - Logger::logThis()->error("Shred-Task: Read random key failed! " + errorMsg + " - Drive: " + drive->getSerial()); - perror(randomsrc); - cleanup(); - return -1; - } + { + std::string errorMsg(strerror(readRet)); + Logger::logThis()->error("Shred-Task: Read random key failed! " + errorMsg + " - Drive: " + drive->getSerial()); + perror(randomsrc); + cleanup(); + return -1; + } tfng_prng_seedkey(ucKey); 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.chronoShredTimestamp = std::chrono::system_clock::now(); + ; // set inital timestamp for 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()); #endif for (unsigned int uiShredIterationCounter = 0U; uiShredIterationCounter < SHRED_ITERATIONS; uiShredIterationCounter++) + { + unsigned long ulDriveByteCounter = 0U; // used for one shred-iteration to keep track of the current drive position + + if (uiShredIterationCounter == (SHRED_ITERATIONS - 1)) { - unsigned long ulDriveByteCounter = 0U; //used for one shred-iteration to keep track of the current drive position + // last shred iteration --> overwrite (just the write chunk) bytes with zeros instead with random data + memset(caTfngData, 0U, CHUNK_SIZE); + } - if(uiShredIterationCounter == (SHRED_ITERATIONS-1)) - { - //last shred iteration --> overwrite (just the write chunk) bytes with zeros instead with random data - memset(caTfngData, 0U, CHUNK_SIZE); - } + while (ulDriveByteCounter < ulDriveByteSize) + { + int iBytesToShred = 0; // Bytes that will be overwritten in this chunk-iteration - while (ulDriveByteCounter < ulDriveByteSize) - { - int iBytesToShred = 0; //Bytes that will be overwritten in this chunk-iteration + if (uiShredIterationCounter != (SHRED_ITERATIONS - 1)) + { + // NOT last shred iteration --> generate new random data + tfng_prng_genrandom(caTfngData, TFNG_DATA_SIZE); + } - if(uiShredIterationCounter != (SHRED_ITERATIONS-1)) - { - //NOT last shred iteration --> generate new random data - tfng_prng_genrandom(caTfngData, TFNG_DATA_SIZE); - } + if ((ulDriveByteSize - ulDriveByteCounter) < CHUNK_SIZE) + { + iBytesToShred = (ulDriveByteSize - ulDriveByteCounter); + } + else + { + iBytesToShred = CHUNK_SIZE; + } - if((ulDriveByteSize-ulDriveByteCounter) < CHUNK_SIZE) - { - iBytesToShred = (ulDriveByteSize-ulDriveByteCounter); - } - else - { - iBytesToShred = CHUNK_SIZE; - } + int iByteShredded = write(driveFileDiscr, caTfngData, iBytesToShred); - int iByteShredded = write(driveFileDiscr, caTfngData, iBytesToShred); + if (iByteShredded <= 0) + { + std::string errorMsg(strerror(iByteShredded)); + Logger::logThis()->error("Shred-Task: Write to drive failed! " + errorMsg + " - Drive: " + drive->getSerial()); + perror("unable to write random data"); + cleanup(); + return -1; + } - if(iByteShredded <= 0) - { - std::string errorMsg(strerror(iByteShredded)); - Logger::logThis()->error("Shred-Task: Write to drive failed! " + errorMsg + " - Drive: " + drive->getSerial()); - perror("unable to write random data"); - cleanup(); - return -1; - } - - ulDriveByteCounter += iByteShredded; - ulDriveByteOverallCount += iByteShredded; - d32Percent = this->calcProgress(); - drive->sShredSpeed.ulSpeedMetricBytesWritten += iByteShredded; + ulDriveByteCounter += iByteShredded; + ulDriveByteOverallCount += iByteShredded; + d32Percent = this->calcProgress(); + drive->sShredSpeed.ulSpeedMetricBytesWritten += iByteShredded; #ifdef LOG_LEVEL_HIGH - Logger::logThis()->info("Shred-Task: ByteCount: " + to_string(ulDriveByteCounter) + " - iteration: " + to_string((uiShredIterationCounter+1)) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial()); + Logger::logThis()->info("Shred-Task: ByteCount: " + to_string(ulDriveByteCounter) + " - iteration: " + to_string((uiShredIterationCounter + 1)) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial()); #endif - if((d32Percent-d32TmpPercent) >= 0.01) - { - //set shred percantage - drive->setTaskPercentage(d32TmpPercent); - d32TmpPercent = d32Percent; - //signal process in shreding - write(*ipSignalFd, "A",1); - } + if ((d32Percent - d32TmpPercent) >= 0.01) + { + // set shred percantage + drive->setTaskPercentage(d32TmpPercent); + d32TmpPercent = d32Percent; + // signal process in shreding + write(*ipSignalFd, "A", 1); + } - if(drive->state != Drive::SHRED_ACTIVE) - { - drive->setTaskPercentage(0); - d32Percent = 0.00; - d32TmpPercent = 0.00; - ulDriveByteCounter = 0U; - Logger::logThis()->info("Aborted shred for: " + drive->getModelName() + "-" + drive->getSerial()); - cleanup(); - return -1; - } - //end one chunk write - } - if(0 != iRewindDrive(driveFileDiscr)) - { - Logger::logThis()->error("Shred-Task: Unable to rewind drive! - Drive: " + drive->getSerial()); - cleanup(); - return -1; - } - //end one shred iteration + if (drive->state != Drive::SHRED_ACTIVE) + { + drive->setTaskPercentage(0); + d32Percent = 0.00; + d32TmpPercent = 0.00; + ulDriveByteCounter = 0U; + Logger::logThis()->info("Aborted shred for: " + drive->getModelName() + "-" + drive->getSerial()); + cleanup(); + return -1; + } + // end one chunk write } - //end of all shred iteratio + if (0 != iRewindDrive(driveFileDiscr)) + { + Logger::logThis()->error("Shred-Task: Unable to rewind drive! - Drive: " + drive->getSerial()); + cleanup(); + return -1; + } + // end one shred iteration + } + // end of all shred iteratio - tfng_prng_seedkey(NULL); //reset random generator + tfng_prng_seedkey(NULL); // reset random generator drive->bWasShredded = true; Logger::logThis()->info("Shred-Task finished - Drive: " + drive->getModelName() + "-" + drive->getSerial() + " @" + address.str()); #ifdef ZERO_CHECK - drive->state=Drive::CHECK_ACTIVE; + 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->u32DriveChecksumAferShredding != 0) - { - Logger::logThis()->info("Shred-Task: Checksum not zero: " + to_string(drive->u32DriveChecksumAfterShredding) + " - Drive: " + drive->getSerial()); - } + { + Logger::logThis()->info("Shred-Task: Checksum not zero: " + to_string(drive->u32DriveChecksumAfterShredding) + " - Drive: " + drive->getSerial()); + } else - { - Logger::logThis()->info("Shred-Task: Checksum zero: " + to_string(drive->u32DriveChecksumAfterShredding) + " - Drive: " + drive->getSerial()); - } + { + 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)) - { - drive->state= Drive::NONE; - drive->setTaskPercentage(0.0); - Printer::getPrinter()->print(drive); - Logger::logThis()->info("Finished shred/check for: " + drive->getModelName() + "-" + drive->getSerial()); - } + if ((drive->state == Drive::SHRED_ACTIVE) || (drive->state == Drive::CHECK_ACTIVE)) + { + drive->state = Drive::NONE; + drive->setTaskPercentage(0.0); + Printer::getPrinter()->print(drive); + Logger::logThis()->info("Finished shred/check for: " + drive->getModelName() + "-" + drive->getSerial()); + } return 0; } /** @@ -218,32 +220,32 @@ double Shred::calcProgress() unsigned int uiMaxShredIteration = SHRED_ITERATIONS; #ifdef ZERO_CHECK - uiMaxShredIteration++; //increment because we will check after SHRED_ITERATIONS the drive for non-zero bytes + uiMaxShredIteration++; // increment because we will check after SHRED_ITERATIONS the drive for non-zero bytes #endif - return (double) (((double) ulDriveByteOverallCount) / ((double)this->ulDriveByteSize*uiMaxShredIteration))*100.0f; + return (double)(((double)ulDriveByteOverallCount) / ((double)this->ulDriveByteSize * uiMaxShredIteration)) * 100.0f; } int Shred::iRewindDrive(fileDescriptor file) { - if(0 != lseek(file, 0L, SEEK_SET)) - { - perror("unable to rewind drive"); - return -1; - } + if (0 != lseek(file, 0L, SEEK_SET)) + { + perror("unable to rewind drive"); + return -1; + } else - { - return 0; - } + { + return 0; + } } unsigned long Shred::getDriveSizeInBytes(fileDescriptor file) { unsigned long ulDriveSizeTmp = lseek(file, 0L, SEEK_END); - if(0 != iRewindDrive(file)) - { - ulDriveSizeTmp = 0U; - } + if (0 != iRewindDrive(file)) + { + ulDriveSizeTmp = 0U; + } #ifdef DEMO_DRIVE_SIZE ulDriveSizeTmp = DEMO_DRIVE_SIZE; @@ -251,45 +253,45 @@ unsigned long Shred::getDriveSizeInBytes(fileDescriptor file) return ulDriveSizeTmp; } -unsigned int Shred::uiCalcChecksum(fileDescriptor file,Drive* drive, int* ipSignalFd) +unsigned int Shred::uiCalcChecksum(fileDescriptor file, Drive *drive, int *ipSignalFd) { unsigned int uiChecksum = 0; unsigned long ulDriveByteCounter = 0U; while (ulDriveByteCounter < ulDriveByteSize) + { + int iBytesToCheck = 0; + if ((ulDriveByteSize - ulDriveByteCounter) < CHUNK_SIZE) { - int iBytesToCheck = 0; - if((ulDriveByteSize-ulDriveByteCounter) < CHUNK_SIZE) - { - iBytesToCheck = (ulDriveByteSize-ulDriveByteCounter); - } - else - { - iBytesToCheck = CHUNK_SIZE; - } - int iReadBytes = read(file, caReadBuffer, iBytesToCheck); - for (int iReadBytesCounter = 0U; iReadBytesCounter < iReadBytes; iReadBytesCounter++) - { - uiChecksum += caReadBuffer[iReadBytesCounter]; - } - ulDriveByteCounter += iReadBytes; - ulDriveByteOverallCount += iReadBytes; - d32Percent = this->calcProgress(); - drive->sShredSpeed.ulSpeedMetricBytesWritten += iReadBytes; - -#ifdef LOG_LEVEL_HIGH - Logger::logThis()->info("Shred-Task (Checksum): ByteCount: " + to_string(ulDriveByteCounter) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial()); -#endif - - if(((d32Percent-d32TmpPercent) >= 0.01) || (d32Percent == 100.0)) - { - drive->setTaskPercentage(d32TmpPercent); - d32TmpPercent = d32Percent; -#ifdef LOG_LEVEL_HIGH - Logger::logThis()->info("send progress signal to main loop (check)"); -#endif - write(*ipSignalFd, "A",1); - } + iBytesToCheck = (ulDriveByteSize - ulDriveByteCounter); } + else + { + iBytesToCheck = CHUNK_SIZE; + } + int iReadBytes = read(file, caReadBuffer, iBytesToCheck); + for (int iReadBytesCounter = 0U; iReadBytesCounter < iReadBytes; iReadBytesCounter++) + { + uiChecksum += caReadBuffer[iReadBytesCounter]; + } + ulDriveByteCounter += iReadBytes; + ulDriveByteOverallCount += iReadBytes; + d32Percent = this->calcProgress(); + drive->sShredSpeed.ulSpeedMetricBytesWritten += iReadBytes; + +#ifdef LOG_LEVEL_HIGH + Logger::logThis()->info("Shred-Task (Checksum): ByteCount: " + to_string(ulDriveByteCounter) + " - progress: " + to_string(d32Percent) + " - Drive: " + drive->getSerial()); +#endif + + if (((d32Percent - d32TmpPercent) >= 0.01) || (d32Percent == 100.0)) + { + drive->setTaskPercentage(d32TmpPercent); + d32TmpPercent = d32Percent; +#ifdef LOG_LEVEL_HIGH + Logger::logThis()->info("send progress signal to main loop (check)"); +#endif + write(*ipSignalFd, "A", 1); + } + } drive->bWasChecked = true; return uiChecksum; } diff --git a/src/smart.cpp b/src/smart.cpp index 9506cd6..b26d034 100644 --- a/src/smart.cpp +++ b/src/smart.cpp @@ -65,7 +65,7 @@ void SMART::readSMARTData(Drive *drive) if (status == 0U) { - //Found S.M.A.R.T. data with this command + // Found S.M.A.R.T. data with this command break; } } diff --git a/src/tui.cpp b/src/tui.cpp index ae43f4a..3ed1c32 100644 --- a/src/tui.cpp +++ b/src/tui.cpp @@ -11,7 +11,6 @@ static std::mutex mxUIrefresh; TUI::TUI(void) { - } /** @@ -24,22 +23,22 @@ void TUI::initTUI() { initscr(); raw(); - keypad(stdscr,TRUE); - if(has_colors() == TRUE) - { - start_color(); - } + keypad(stdscr, TRUE); + if (has_colors() == TRUE) + { + start_color(); + } else - { - printf("Your terminal does not support color\n"); - Logger::logThis()->error("Your terminal does not support color"); - exit(1); - } + { + printf("Your terminal does not support color\n"); + Logger::logThis()->error("Your terminal does not support color"); + exit(1); + } clear(); curs_set(0); noecho(); cbreak(); - init_pair(COLOR_AREA_STDSCR,COLOR_WHITE, COLOR_BLUE); + init_pair(COLOR_AREA_STDSCR, COLOR_WHITE, COLOR_BLUE); wbkgd(stdscr, COLOR_PAIR(COLOR_AREA_STDSCR)); init_pair(COLOR_AREA_ENTRY_EVEN, COLOR_BLACK, COLOR_WHITE); @@ -52,195 +51,195 @@ void TUI::initTUI() Logger::logThis()->info("UI successfully initialized"); } -void TUI::updateTUI(list * plistDrives, uint8_t u8SelectedEntry) +void TUI::updateTUI(list *plistDrives, uint8_t u8SelectedEntry) { mxUIrefresh.lock(); uint16_t u16StdscrX, u16StdscrY; getmaxyx(stdscr, u16StdscrY, u16StdscrX); - init_pair(COLOR_AREA_STDSCR,COLOR_WHITE, COLOR_BLUE); + init_pair(COLOR_AREA_STDSCR, COLOR_WHITE, COLOR_BLUE); wbkgd(stdscr, COLOR_PAIR(COLOR_AREA_STDSCR)); refresh(); - //overview window is 3/7 of the x-size - overview=createOverViewWindow((int)(u16StdscrX *(float)(3.0/7.0)), (u16StdscrY-1)); + // overview window is 3/7 of the x-size + overview = createOverViewWindow((int)(u16StdscrX * (float)(3.0 / 7.0)), (u16StdscrY - 1)); wrefresh(overview); - //system stat window is 2/7 of the x-size - systemview=createSystemStats(((int)(u16StdscrX *(float)(2.0/7.0)))-6, 12, (int)(u16StdscrX *(float)(5.0/7.0)+4), (u16StdscrY-13 )); + // system stat window is 2/7 of the x-size + systemview = createSystemStats(((int)(u16StdscrX * (float)(2.0 / 7.0))) - 6, 12, (int)(u16StdscrX * (float)(5.0 / 7.0) + 4), (u16StdscrY - 13)); wrefresh(systemview); delwin(detailview); - list ::iterator it; + list::iterator it; uint8_t u8Index = 0U; for (it = plistDrives->begin(); it != plistDrives->end(); ++it) + { + string sModelFamily = it->getModelFamily(); + string sSerial = "SN: " + it->getSerial(); + string sCapacity = it->sCapacityToText(); + string sState = " "; + string sSpeed = " "; + string sTime = " "; + string sTemp = it->sTemperatureToText(); + + bool bSelectedEntry = false; + + if (u8SelectedEntry == u8Index) { - string sModelFamily = it->getModelFamily(); - string sSerial = "SN: " + it->getSerial(); - string sCapacity = it->sCapacityToText(); - string sState = " "; - string sSpeed = " "; - string sTime = " "; - string sTemp = it->sTemperatureToText(); + bSelectedEntry = true; // mark this drive in entries list + displaySelectedDrive(*it, u16StdscrX, u16StdscrY); - bool bSelectedEntry = false; + if ((it->getPowerOnHours() >= WORSE_HOURS) || (it->getPowerCycles() >= WORSE_POWERUP) || (it->getErrorCount() > 0) || (it->getTemperature() >= WORSE_TEMPERATURE)) + { + // smart values are bad --> show warning + smartWarning = createSmartWarning(50, 10, ((u16StdscrX) - (int)(u16StdscrX / 2) + 35), (int)(u16StdscrY / 2) - 5, it->getPath(), it->getPowerOnHours(), it->getPowerCycles(), it->getErrorCount(), it->getTemperature()); + wrefresh(smartWarning); + } + } - if(u8SelectedEntry == u8Index) + stringstream stream; + + switch (it->state) + { + case Drive::SHRED_ACTIVE: + + stream << fixed << setprecision(3) << (it->getTaskPercentage()); + sState = "Shredding: " + stream.str() + "%"; + + it->calculateTaskDuration(); + sTime = this->formatTimeDuration(it->getTaskDuration()); + sSpeed = this->formatSpeed(it->sShredSpeed.u32ShredTimeDelta, it->sShredSpeed.ulWrittenBytes); + break; + case Drive::CHECK_ACTIVE: + stream << fixed << setprecision(3) << (it->getTaskPercentage()); + sState = "Checking: " + stream.str() + "%"; + it->calculateTaskDuration(); + sTime = this->formatTimeDuration(it->getTaskDuration()); + sSpeed = this->formatSpeed(it->sShredSpeed.u32ShredTimeDelta, it->sShredSpeed.ulWrittenBytes); + break; + case Drive::DELETE_ACTIVE: + sState = "Deleting ..."; + it->calculateTaskDuration(); + sTime = this->formatTimeDuration(it->getTaskDuration()); + break; + case Drive::NONE: + case Drive::SHRED_SELECTED: + case Drive::DELETE_SELECTED: + if (it->bWasDeleted) + { + sState = "DELETED"; // mark drive as deleted previously + } + if (it->bWasShredded) + { + if (it->bWasChecked) { - bSelectedEntry = true; //mark this drive in entries list - displaySelectedDrive(*it, u16StdscrX, u16StdscrY); - - if((it->getPowerOnHours() >= WORSE_HOURS) || (it->getPowerCycles() >= WORSE_POWERUP) || (it->getErrorCount() > 0) || (it->getTemperature() >= WORSE_TEMPERATURE)) - { - // smart values are bad --> show warning - smartWarning=createSmartWarning(50, 10, ((u16StdscrX)-(int)(u16StdscrX/2)+35),(int)(u16StdscrY/2)-5, it->getPath(), it->getPowerOnHours(), it->getPowerCycles(), it->getErrorCount(), it->getTemperature()); - wrefresh(smartWarning); - } + // drive was also checked after shredding + sState = "SHREDDED & CHECKED"; // mark drive as shredded previously and optional checked } - - stringstream stream; - - switch (it->state) + else { - case Drive::SHRED_ACTIVE: - - stream << fixed << setprecision(3) << (it->getTaskPercentage()); - sState = "Shredding: " + stream.str() + "%"; - - it->calculateTaskDuration(); - sTime = this->formatTimeDuration(it->getTaskDuration()); - sSpeed = this->formatSpeed(it->sShredSpeed.u32ShredTimeDelta, it->sShredSpeed.ulWrittenBytes); - break; - case Drive::CHECK_ACTIVE: - stream << fixed << setprecision(3) << (it->getTaskPercentage()); - sState = "Checking: " + stream.str() + "%"; - it->calculateTaskDuration(); - sTime = this->formatTimeDuration(it->getTaskDuration()); - sSpeed = this->formatSpeed(it->sShredSpeed.u32ShredTimeDelta, it->sShredSpeed.ulWrittenBytes); - break; - case Drive::DELETE_ACTIVE: - sState = "Deleting ..."; - it->calculateTaskDuration(); - sTime = this->formatTimeDuration(it->getTaskDuration()); - break; - case Drive::NONE: - case Drive::SHRED_SELECTED: - case Drive::DELETE_SELECTED: - if (it->bWasDeleted) - { - sState = "DELETED"; //mark drive as deleted previously - } - if (it->bWasShredded) - { - if(it->bWasChecked) - { - //drive was also checked after shredding - sState = "SHREDDED & CHECKED"; //mark drive as shredded previously and optional checked - } - else - { - //shredded and not checked yet - sState = "SHREDDED"; //mark drive as shredded previously - } - sTime = this->formatTimeDuration(it->getTaskDuration()); - } + // shredded and not checked yet + sState = "SHREDDED"; // mark drive as shredded previously + } + sTime = this->formatTimeDuration(it->getTaskDuration()); + } #ifdef ZERO_CHECK - 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); - } + 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); + } #endif - break; - case Drive::FROZEN: - stream << fixed << setprecision(3) << (it->getTaskPercentage()); + break; + case Drive::FROZEN: + stream << fixed << setprecision(3) << (it->getTaskPercentage()); #ifdef FROZEN_ALERT - if(bSelectedEntry) - { - dialog=createFrozenWarning(70, 16, ((u16StdscrX)-(int)(u16StdscrX/2)-20),(int)(u16StdscrY/2)-8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial(), stream.str() + "%"); - wrefresh(dialog); - } + if (bSelectedEntry) + { + dialog = createFrozenWarning(70, 16, ((u16StdscrX) - (int)(u16StdscrX / 2) - 20), (int)(u16StdscrY / 2) - 8, it->getPath(), it->getModelFamily(), it->getModelName(), it->getSerial(), stream.str() + "%"); + wrefresh(dialog); + } #endif - sState = "FROZEN " + stream.str() + "%"; //mark drive as frozen and reached progress - break; - default: - break; - } - - uint16_t u16StartOffsetY = (2 * (u8Index)); - - WINDOW * tmp = createEntryWindow( (int)(u16StdscrX *(float)(3.0/7.0) - 2), 2, 3, u16StartOffsetY + 2, (distance(plistDrives->begin(), it)+1), sModelFamily, sSerial, sCapacity, sState, sTime, sSpeed, sTemp, bSelectedEntry); - wrefresh(tmp); - u8Index++; - }//end loop though drives - - if(plistDrives->size() == 0) - { - //no selected drive present - Logger::logThis()->warning("no selected drive present"); - struct MenuState menustate; - menustate.bAbort = false; - menustate.bConfirmDelete = false; - menustate.bConfirmShred = false; - menustate.bDelete = false; - menustate.bShred = false; - - detailview=overwriteDetailViewWindow((u16StdscrX)-((int)(u16StdscrX *(float)(3.0/7.0)))-7, (u16StdscrY-15), (int)(u16StdscrX *(float)(3.0/7.0)+5)); - wrefresh(detailview); - - menuview=createMenuView(((int)(u16StdscrX *(float)(2.0/7.0)))-3, 12, (int)(u16StdscrX *(float)(3.0/7.0)+5),(u16StdscrY-13), menustate); - wrefresh(menuview); + sState = "FROZEN " + stream.str() + "%"; // mark drive as frozen and reached progress + break; + default: + break; } + uint16_t u16StartOffsetY = (2 * (u8Index)); + + WINDOW *tmp = createEntryWindow((int)(u16StdscrX * (float)(3.0 / 7.0) - 2), 2, 3, u16StartOffsetY + 2, (distance(plistDrives->begin(), it) + 1), sModelFamily, sSerial, sCapacity, sState, sTime, sSpeed, sTemp, bSelectedEntry); + wrefresh(tmp); + u8Index++; + } // end loop though drives + + if (plistDrives->size() == 0) + { + // no selected drive present + Logger::logThis()->warning("no selected drive present"); + struct MenuState menustate; + menustate.bAbort = false; + menustate.bConfirmDelete = false; + menustate.bConfirmShred = false; + menustate.bDelete = false; + menustate.bShred = false; + + detailview = overwriteDetailViewWindow((u16StdscrX) - ((int)(u16StdscrX * (float)(3.0 / 7.0))) - 7, (u16StdscrY - 15), (int)(u16StdscrX * (float)(3.0 / 7.0) + 5)); + wrefresh(detailview); + + menuview = createMenuView(((int)(u16StdscrX * (float)(2.0 / 7.0))) - 3, 12, (int)(u16StdscrX * (float)(3.0 / 7.0) + 5), (u16StdscrY - 13), menustate); + wrefresh(menuview); + } + mxUIrefresh.unlock(); } enum TUI::UserInput TUI::readUserInput() { int ch = wgetch(stdscr); - switch(ch) - { - case KEY_UP: - return TUI::UserInput::UpKey; - break; - case KEY_DOWN: - return TUI::UserInput::DownKey; - break; - case 10: - return TUI::UserInput::Enter; - break; - case 27: - return TUI::UserInput::ESC; - break; - case 'a': - return TUI::UserInput::Abort; - break; - case 'd': - return TUI::UserInput::Delete; - break; - case 's': - return TUI::UserInput::Shred; - break; - case 'S': - return TUI::UserInput::ShredAll; - break; - default: - return TUI::UserInput::Undefined; - break; - } + switch (ch) + { + case KEY_UP: + return TUI::UserInput::UpKey; + break; + case KEY_DOWN: + return TUI::UserInput::DownKey; + break; + case 10: + return TUI::UserInput::Enter; + break; + case 27: + return TUI::UserInput::ESC; + break; + case 'a': + return TUI::UserInput::Abort; + break; + case 'd': + return TUI::UserInput::Delete; + break; + case 's': + return TUI::UserInput::Shred; + break; + case 'S': + return TUI::UserInput::ShredAll; + break; + default: + return TUI::UserInput::Undefined; + break; + } return TUI::UserInput::Undefined; } -void TUI::centerTitle(WINDOW *pwin, const char * title) +void TUI::centerTitle(WINDOW *pwin, const char *title) { int x, maxX, stringSize; getmaxyx(pwin, maxX, maxX); stringSize = 4 + strlen(title); - x = (maxX - stringSize)/2; + x = (maxX - stringSize) / 2; mvwaddch(pwin, 0, x, ACS_RTEE); waddch(pwin, ' '); waddstr(pwin, title); @@ -251,7 +250,7 @@ void TUI::centerTitle(WINDOW *pwin, const char * title) /* left window that contains the drive entries */ -WINDOW* TUI::createOverViewWindow( int iXSize, int iYSize) +WINDOW *TUI::createOverViewWindow(int iXSize, int iYSize) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, 1, 2); @@ -264,7 +263,7 @@ WINDOW* TUI::createOverViewWindow( int iXSize, int iYSize) return newWindow; } -WINDOW* TUI::createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive drive) +WINDOW *TUI::createDetailViewWindow(int iXSize, int iYSize, int iXStart, Drive drive) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, 1, iXStart); @@ -274,33 +273,33 @@ WINDOW* TUI::createDetailViewWindow( int iXSize, int iYSize, int iXStart, Drive string title = "Selected Drive: " + drive.getModelName() + " " + drive.sCapacityToText(); centerTitle(newWindow, title.c_str()); - string sPath = "Path: " +drive.getPath(); + string sPath = "Path: " + drive.getPath(); string sModelFamily = "ModelFamily: " + drive.getModelFamily(); - string sModelName = "ModelName: " + drive.getModelName(); - string sCapacity = "Capacity: " + drive.sCapacityToText(); - string sSerial = "Serial: " + drive.getSerial(); + string sModelName = "ModelName: " + drive.getModelName(); + string sCapacity = "Capacity: " + drive.sCapacityToText(); + string sSerial = "Serial: " + drive.getSerial(); string sPowerOnHours = "PowerOnHours: " + drive.sPowerOnHoursToText(); - string sPowerCycle = "PowerCycle: " + drive.sPowerCyclesToText(); - string sErrorCount = "ErrorCount: " + drive.sErrorCountToText(); + string sPowerCycle = "PowerCycle: " + drive.sPowerCyclesToText(); + string sErrorCount = "ErrorCount: " + drive.sErrorCountToText(); uint16_t u16Line = 2; - mvwaddstr(newWindow,u16Line++, 3, sPath.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sModelFamily.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sModelName.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sCapacity.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sSerial.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sPath.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sModelFamily.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sModelName.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sCapacity.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sSerial.c_str()); attroff(COLOR_PAIR(COLOR_AREA_DETAIL)); - mvwaddstr(newWindow,u16Line++, 3, sPowerOnHours.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sPowerCycle.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sErrorCount.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sPowerOnHours.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sPowerCycle.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sErrorCount.c_str()); return newWindow; } -WINDOW* TUI::overwriteDetailViewWindow( int iXSize, int iYSize, int iXStart) +WINDOW *TUI::overwriteDetailViewWindow(int iXSize, int iYSize, int iXStart) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, 1, iXStart); @@ -310,61 +309,61 @@ WINDOW* TUI::overwriteDetailViewWindow( int iXSize, int iYSize, int iXStart) string title = "About this tool"; centerTitle(newWindow, title.c_str()); - string sLine01 = "reHDD - hard drive refurbishing tool"; - string sLine02 = "Version: " + string(REHDD_VERSION); - string sLine03 = "Available under GPL 3.0"; - string sLine04 = "https://git.mosad.xyz/localhorst/reHDD"; - string sLine05 = "Delete: Wipe format table - this is NOT secure"; - string sLine06 = "Shred: Overwrite drive " + to_string(SHRED_ITERATIONS) + " iterations - this is secure"; + string sLine01 = "reHDD - hard drive refurbishing tool"; + string sLine02 = "Version: " + string(REHDD_VERSION); + string sLine03 = "Available under GPL 3.0"; + string sLine04 = "https://git.mosad.xyz/localhorst/reHDD"; + string sLine05 = "Delete: Wipe format table - this is NOT secure"; + string sLine06 = "Shred: Overwrite drive " + to_string(SHRED_ITERATIONS) + " iterations - this is secure"; uint16_t u16Line = 5; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine01.c_str()); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine02.size()/2), sLine02.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine01.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine02.size() / 2), sLine02.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine03.size()/2), sLine03.c_str()); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine04.size()/2), sLine04.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine03.size() / 2), sLine03.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine04.size() / 2), sLine04.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine05.size()/2), sLine05.c_str()); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine06.size()/2), sLine06.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine05.size() / 2), sLine05.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine06.size() / 2), sLine06.c_str()); attroff(COLOR_PAIR(COLOR_AREA_DETAIL)); return newWindow; } -WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, int iListIndex, string sModelFamily, string sSerial, string sCapacity, string sState, string sTime, string sSpeed, string sTemp, bool bSelected) +WINDOW *TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, int iListIndex, string sModelFamily, string sSerial, string sCapacity, string sState, string sTime, string sSpeed, string sTemp, bool bSelected) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); - if(!bSelected) + if (!bSelected) + { + // entry is NOT selected + if (iListIndex % 2 == 0) { - // entry is NOT selected - if(iListIndex % 2 == 0) - { - //even - attron(COLOR_PAIR(COLOR_AREA_ENTRY_EVEN)); - wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_EVEN)); - } - else - { - //odd - attron(COLOR_PAIR(COLOR_AREA_ENTRY_ODD)); - wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_ODD)); - } + // even + attron(COLOR_PAIR(COLOR_AREA_ENTRY_EVEN)); + wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_EVEN)); } + else + { + // odd + attron(COLOR_PAIR(COLOR_AREA_ENTRY_ODD)); + wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_ODD)); + } + } else - { - // entry IS selected - attron(COLOR_PAIR(COLOR_AREA_ENTRY_SELECTED)); - wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_SELECTED)); - } + { + // entry IS selected + attron(COLOR_PAIR(COLOR_AREA_ENTRY_SELECTED)); + wbkgd(newWindow, COLOR_PAIR(COLOR_AREA_ENTRY_SELECTED)); + } - //box(newWindow, ACS_VLINE, ACS_HLINE); + // box(newWindow, ACS_VLINE, ACS_HLINE); - //index number - mvwaddstr(newWindow,0, 1, to_string(iListIndex).c_str()); + // index number + mvwaddstr(newWindow, 0, 1, to_string(iListIndex).c_str()); /* 70 chars in x-axis @@ -404,7 +403,7 @@ WINDOW* TUI::createEntryWindow(int iXSize, int iYSize, int iXStart, int iYStart, return newWindow; } -WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart) +WINDOW *TUI::createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -415,11 +414,11 @@ WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart) centerTitle(newWindow, "System"); time_t rawtime; - struct tm * timeinfo; + struct tm *timeinfo; char buffer[80]; - time (&rawtime); + time(&rawtime); timeinfo = localtime(&rawtime); - strftime(buffer,sizeof(buffer),"Date: %d-%m-%Y Time: %H:%M",timeinfo); + strftime(buffer, sizeof(buffer), "Date: %d-%m-%Y Time: %H:%M", timeinfo); string time(buffer); string sLine01 = "reHDD - hard drive refurbishing tool"; @@ -428,24 +427,24 @@ WINDOW* TUI::createSystemStats(int iXSize, int iYSize, int iXStart, int iYStart) sLine03.append(__DATE__); sLine03.append(" "); sLine03.append(__TIME__); - string sLine04 = "Available under GPL 3.0"; - string sLine05 = "https://git.mosad.xyz/localhorst/reHDD"; + string sLine04 = "Available under GPL 3.0"; + string sLine05 = "https://git.mosad.xyz/localhorst/reHDD"; uint16_t u16Line = 2; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine01.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine01.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine02.c_str()); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine03.c_str()); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine04.c_str()); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine05.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine02.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine03.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine04.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine05.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), time.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), time.c_str()); return newWindow; } -WINDOW* TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate) +WINDOW *TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, struct MenuState menustate) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -457,28 +456,28 @@ WINDOW* TUI::createMenuView(int iXSize, int iYSize, int iXStart, int iYStart, st uint16_t u16Line = 4; - if(menustate.bAbort) - { - string sLineTmp = "Press a for Abort"; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLineTmp.size()/2), sLineTmp.c_str()); - u16Line++; - } - if(menustate.bShred) - { - string sLineTmp = "Press s for Shred (S for all drives)"; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLineTmp.size()/2), sLineTmp.c_str()); - u16Line++; - } - if(menustate.bDelete) - { - string sLineTmp = "Press d for Delete"; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLineTmp.size()/2), sLineTmp.c_str()); - } + if (menustate.bAbort) + { + string sLineTmp = "Press a for Abort"; + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str()); + u16Line++; + } + if (menustate.bShred) + { + string sLineTmp = "Press s for Shred (S for all drives)"; + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str()); + u16Line++; + } + if (menustate.bDelete) + { + string sLineTmp = "Press d for Delete"; + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLineTmp.size() / 2), sLineTmp.c_str()); + } return newWindow; } -WINDOW* TUI::createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string task, string optionA, string optionB) +WINDOW *TUI::createDialog(int iXSize, int iYSize, int iXStart, int iYStart, string task, string optionA, string optionB) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -489,14 +488,14 @@ WINDOW* TUI::createDialog(int iXSize, int iYSize, int iXStart, int iYStart, stri centerTitle(newWindow, task.c_str()); uint16_t u16Line = 3; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(optionA.size()/2), optionA.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (optionA.size() / 2), optionA.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(optionB.size()/2), optionB.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (optionB.size() / 2), optionB.c_str()); return newWindow; } -WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, string sProgress) +WINDOW *TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, string sProgress) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -507,10 +506,10 @@ WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStar string sHeader = "Drive " + sPath + " is frozen"; string sLine01 = "Please detach this drive and check it manually:"; string sShredState = "Shredding stopped after " + sProgress; - string sLinePath = "Path: " +sPath; + string sLinePath = "Path: " + sPath; string sLineModelFamlily = "ModelFamily: " + sModelFamily; - string sLineModelName = "ModelName: " + sModelName; - string sLineSerial = "Serial: " + sSerial; + string sLineModelName = "ModelName: " + sModelName; + string sLineSerial = "Serial: " + sSerial; string sLine02 = "reHDD was not able to write data to the drive."; string sLine03 = "This can be caused by an malfunctioning drive."; @@ -518,21 +517,21 @@ WINDOW* TUI::createFrozenWarning(int iXSize, int iYSize, int iXStart, int iYStar centerTitle(newWindow, sHeader.c_str()); uint16_t u16Line = 2; - mvwaddstr(newWindow,u16Line++, 3, sLine01.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLine01.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, 3, sLinePath.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLineModelFamlily.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLineModelName.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLineSerial.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLinePath.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLineModelFamlily.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLineModelName.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLineSerial.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, 3, sLine02.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLine03.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sShredState.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLine02.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLine03.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sShredState.c_str()); return newWindow; } -WINDOW* TUI::createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, uint32_t u32Checksum) +WINDOW *TUI::createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, string sModelFamily, string sModelName, string sSerial, uint32_t u32Checksum) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -543,10 +542,10 @@ WINDOW* TUI::createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int string sHeader = "Drive " + sPath + " is NOT successfully shredded!"; string sLine01 = "Please detach this drive and check it manually:"; string sShredChecksum = "After shredding the checksum was: " + to_string(u32Checksum); - string sLinePath = "Path: " +sPath; + string sLinePath = "Path: " + sPath; string sLineModelFamily = "ModelFamily: " + sModelFamily; - string sLineModelName = "ModelName: " + sModelName; - string sLineSerial = "Serial: " + sSerial; + string sLineModelName = "ModelName: " + sModelName; + string sLineSerial = "Serial: " + sSerial; string sLine02 = "reHDD was not able to write zero into every byte on the drive."; string sLine03 = "This can be caused by an malfunctioning drive."; @@ -554,16 +553,16 @@ WINDOW* TUI::createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int centerTitle(newWindow, sHeader.c_str()); uint16_t u16Line = 2; - mvwaddstr(newWindow,u16Line++, 3, sLine01.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLine01.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, 3, sLinePath.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLineModelFamily.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLineModelName.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLineSerial.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLinePath.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLineModelFamily.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLineModelName.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLineSerial.c_str()); u16Line++; - mvwaddstr(newWindow,u16Line++, 3, sLine02.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sLine03.c_str()); - mvwaddstr(newWindow,u16Line++, 3, sShredChecksum.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLine02.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sLine03.c_str()); + mvwaddstr(newWindow, u16Line++, 3, sShredChecksum.c_str()); return newWindow; } @@ -571,12 +570,12 @@ WINDOW* TUI::createZeroChecksumWarning(int iXSize, int iYSize, int iXStart, int string TUI::formatTimeDuration(time_t u32Duration) { std::ostringstream out; - int dy=(int)((u32Duration)/86400); - int hr=(int)(((u32Duration)/3600)%24); - int min=((int)((u32Duration)/60))%60; - int sec=(int)((u32Duration)%60); + int dy = (int)((u32Duration) / 86400); + int hr = (int)(((u32Duration) / 3600) % 24); + int min = ((int)((u32Duration) / 60)) % 60; + int sec = (int)((u32Duration) % 60); char s[25]; - sprintf(s, "%02d:%02d:%02d:%02d", dy, hr, min, sec); + sprintf(s, "%02d:%02d:%02d:%02d", dy, hr, min, sec); out << s; return out.str(); } @@ -584,21 +583,21 @@ string TUI::formatTimeDuration(time_t u32Duration) string TUI::formatSpeed(time_t u32ShredTimeDelta, unsigned long ulWrittenBytes) { std::ostringstream out; - double dDeltaSec = ((double)((u32ShredTimeDelta)/1000000000.0)); //convert nano in sec - double speed = ((ulWrittenBytes/1000000.0)/dDeltaSec); + double dDeltaSec = ((double)((u32ShredTimeDelta) / 1000000000.0)); // convert nano in sec + double speed = ((ulWrittenBytes / 1000000.0) / dDeltaSec); char s[25]; sprintf(s, "%0.2lf MB/s", speed); out << s; return out.str(); } -void TUI::vTruncateText(string* psText, uint16_t u16MaxLenght) +void TUI::vTruncateText(string *psText, uint16_t u16MaxLenght) { if (psText->length() > u16MaxLenght) - { - psText->resize(u16MaxLenght-3); - *psText = *psText + "..."; - } + { + psText->resize(u16MaxLenght - 3); + *psText = *psText + "..."; + } } void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY) @@ -606,63 +605,63 @@ void TUI::displaySelectedDrive(Drive drive, int stdscrX, int stdscrY) struct MenuState menustate; menustate.bAbort = false; menustate.bConfirmDelete = false; - menustate.bConfirmShred = false; + menustate.bConfirmShred = false; menustate.bDelete = false; menustate.bShred = false; // set menustate based on drive state switch (drive.state) - { - case Drive::NONE: //no task running or selected for this drive - menustate.bShred = true; - menustate.bDelete = true; - break; - case Drive::DELETE_ACTIVE : //delete task running for this drive - menustate.bAbort = true; - break; + { + case Drive::NONE: // no task running or selected for this drive + menustate.bShred = true; + menustate.bDelete = true; + break; + case Drive::DELETE_ACTIVE: // delete task running for this drive + menustate.bAbort = true; + break; - case Drive::SHRED_ACTIVE : //shred task running for this drive - menustate.bAbort = true; - break; + case Drive::SHRED_ACTIVE: // shred task running for this drive + menustate.bAbort = true; + break; - case Drive::CHECK_ACTIVE : //check task running for this drive - menustate.bAbort = true; - break; + case Drive::CHECK_ACTIVE: // check task running for this drive + menustate.bAbort = true; + break; - case Drive::DELETE_SELECTED : //delete task selected for this drive - menustate.bConfirmDelete = true; - break; + case Drive::DELETE_SELECTED: // delete task selected for this drive + menustate.bConfirmDelete = true; + break; - case Drive::SHRED_SELECTED : //shred task selected for this drive - menustate.bConfirmShred = true; - break; - default: - break; - } + case Drive::SHRED_SELECTED: // shred task selected for this drive + menustate.bConfirmShred = true; + break; + default: + break; + } - detailview=createDetailViewWindow((stdscrX)-((int)(stdscrX *(float)(3.0/7.0)))-7, (stdscrY-15), (int)(stdscrX *(float)(3.0/7.0)+5), drive); + detailview = createDetailViewWindow((stdscrX) - ((int)(stdscrX * (float)(3.0 / 7.0))) - 7, (stdscrY - 15), (int)(stdscrX * (float)(3.0 / 7.0) + 5), drive); wrefresh(detailview); - menuview=createMenuView(((int)(stdscrX *(float)(2.0/7.0)))-3, 12, (int)(stdscrX *(float)(3.0/7.0)+5),(stdscrY-13), menustate); + menuview = createMenuView(((int)(stdscrX * (float)(2.0 / 7.0))) - 3, 12, (int)(stdscrX * (float)(3.0 / 7.0) + 5), (stdscrY - 13), menustate); wrefresh(menuview); - if(menustate.bConfirmShred == true) - { - 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); - } - 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); - } + if (menustate.bConfirmShred == true) + { + 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); + } + 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); + } else - { - delwin(dialog); - } + { + delwin(dialog); + } } -WINDOW* TUI::createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount, uint32_t u32Temperature) +WINDOW *TUI::createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart, string sPath, uint32_t u32PowerOnHours, uint32_t u32PowerCycles, uint32_t u32ErrorCount, uint32_t u32Temperature) { WINDOW *newWindow; newWindow = newwin(iYSize, iXSize, iYStart, iXStart); @@ -676,34 +675,34 @@ WINDOW* TUI::createSmartWarning(int iXSize, int iYSize, int iXStart, int iYStart centerTitle(newWindow, sHeader.c_str()); uint16_t u16Line = 2; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLine01.c_str()); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLine01.c_str()); u16Line++; - if(u32PowerOnHours > WORSE_HOURS) - { - string sLineTmp = "Operating hours exceeded " + to_string(WORSE_HOURS) + " hours: " + to_string(u32PowerOnHours); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str()); - u16Line++; - } + if (u32PowerOnHours > WORSE_HOURS) + { + string sLineTmp = "Operating hours exceeded " + to_string(WORSE_HOURS) + " hours: " + to_string(u32PowerOnHours); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLineTmp.c_str()); + u16Line++; + } - if(u32PowerCycles > WORSE_POWERUP) - { - string sLineTmp = "Power-on exceeded " + to_string(WORSE_POWERUP) + " cycles: " + to_string(u32PowerCycles); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str()); - u16Line++; - } + if (u32PowerCycles > WORSE_POWERUP) + { + string sLineTmp = "Power-on exceeded " + to_string(WORSE_POWERUP) + " cycles: " + to_string(u32PowerCycles); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLineTmp.c_str()); + u16Line++; + } - if(u32ErrorCount > 0) - { - string sLineTmp = "S.M.A.R.T. errors detected: " + to_string(u32ErrorCount); - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str()); - u16Line++; - } + if (u32ErrorCount > 0) + { + string sLineTmp = "S.M.A.R.T. errors detected: " + to_string(u32ErrorCount); + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLineTmp.c_str()); + u16Line++; + } - if(u32Temperature >= WORSE_TEMPERATURE) - { - string sLineTmp = "Drive too hot: " + to_string(u32Temperature)+" C"; - mvwaddstr(newWindow,u16Line++, (iXSize/2)-(sLine01.size()/2), sLineTmp.c_str()); - } + if (u32Temperature >= WORSE_TEMPERATURE) + { + string sLineTmp = "Drive too hot: " + to_string(u32Temperature) + " C"; + mvwaddstr(newWindow, u16Line++, (iXSize / 2) - (sLine01.size() / 2), sLineTmp.c_str()); + } return newWindow; }