From ff2087c811c68908bfd08a28207061df1488c85c Mon Sep 17 00:00:00 2001 From: Felix Riiga Date: Fri, 21 Jun 2024 23:33:02 +0200 Subject: [PATCH 1/5] Add compiler warnings --- CMakeLists.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 1759f5e..cf6b50e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,6 +8,7 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic") if(NOT DEFINED QT_VERSION_MAJOR) set(QT_VERSION_MAJOR 6) From dc8100d3eedbeac917175129b3dd1c5e8a7f0e6a Mon Sep 17 00:00:00 2001 From: spiros Date: Sat, 22 Jun 2024 17:55:48 +0300 Subject: [PATCH 2/5] Addressed some issues with the code that produced warnings --- src/mainwindow.cpp | 10 +++++----- src/mainwindow.h | 16 +++------------- src/utils.cpp | 12 ++++++------ src/utils.h | 4 ++-- 4 files changed, 16 insertions(+), 26 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index d998bb5..f673944 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -975,7 +975,7 @@ void MainWindow::on_actionAbout_triggered() void MainWindow::on_actionIgnore_C4_Reallocation_Event_Count_toggled(bool enabled) { - settings.setValue("IgnoreC4", ui->actionIgnore_C4_Reallocation_Event_Count->isChecked()); + settings.setValue("IgnoreC4", enabled); if (!initializing) { Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk); updateUI(); @@ -984,7 +984,7 @@ void MainWindow::on_actionIgnore_C4_Reallocation_Event_Count_toggled(bool enable void MainWindow::on_actionHEX_toggled(bool enabled) { - settings.setValue("HEX", ui->actionHEX->isChecked()); + settings.setValue("HEX", enabled); if (!initializing) { Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk); updateUI(); @@ -993,7 +993,7 @@ void MainWindow::on_actionHEX_toggled(bool enabled) void MainWindow::on_actionUse_Fahrenheit_toggled(bool enabled) { - settings.setValue("Fahrenheit", ui->actionUse_Fahrenheit->isChecked()); + settings.setValue("Fahrenheit", enabled); if (!initializing) { Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk); updateUI(); @@ -1002,14 +1002,14 @@ void MainWindow::on_actionUse_Fahrenheit_toggled(bool enabled) void MainWindow::on_actionCyclic_Navigation_toggled(bool cyclicNavigation) { - settings.setValue("CyclicNavigation", ui->actionCyclic_Navigation->isChecked()); + settings.setValue("CyclicNavigation", cyclicNavigation); int currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); updateNavigationButtons(currentIndex); } void MainWindow::on_actionUse_GB_instead_of_TB_toggled(bool gigabytes) { - settings.setValue("UseGB", ui->actionUse_GB_instead_of_TB->isChecked()); + settings.setValue("UseGB", gigabytes); if (!initializing) { Utils.clearButtonGroup(buttonGroup, horizontalLayout, buttonStretch, menuDisk); updateUI(); diff --git a/src/mainwindow.h b/src/mainwindow.h index be9c725..306b3e7 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -19,7 +19,6 @@ QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT - bool initializing; public: MainWindow(QWidget *parent = nullptr); @@ -27,27 +26,20 @@ public: private slots: void on_actionQuit_triggered(); - void on_actionSave_JSON_triggered(); - void on_actionGitHub_triggered(); - void on_actionRescan_Refresh_triggered(); - void on_actionAbout_triggered(); - void on_actionIgnore_C4_Reallocation_Event_Count_toggled(bool enabled); - void on_actionHEX_toggled(bool enabled); - void on_actionUse_Fahrenheit_toggled(bool enabled); - void on_actionCyclic_Navigation_toggled(bool arg1); - void on_actionUse_GB_instead_of_TB_toggled(bool arg1); private: Ui::MainWindow *ui; + QSettings settings; + bool initializing; QLocale locale; utils Utils; QButtonGroup *buttonGroup; @@ -60,15 +52,12 @@ private: QColor goodColor, cautionColor, badColor, naColor; QJsonObject deviceJson; QSpacerItem *buttonStretch; - QSettings settings; QAction *actionCyclic_Navigation; - QMenu *menuDevice; QMenu *menuDisk; QMenu *selfTestMenu; QAction *selfTestLogAction; QActionGroup *disksGroup; - QJsonArray devices; QStringList deviceOutputs; QJsonObject globalObj; @@ -85,4 +74,5 @@ private: void addSmartAttributesTable(const QJsonArray &attributes); void mousePressEvent(QMouseEvent*); }; + #endif diff --git a/src/utils.cpp b/src/utils.cpp index dae2978..1a23089 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -14,7 +14,7 @@ void utils::clearButtonGroup(QButtonGroup* buttonGroup, QHBoxLayout* horizontalL menuDisk->clear(); } -QString utils::getSmartctlPath(bool initializing) { +QString utils::getSmartctlPath() { QStringList paths = QString::fromLocal8Bit(qgetenv("PATH")).split(QDir::listSeparator(), Qt::SkipEmptyParts); paths << "/usr/sbin" << "/usr/local/sbin"; @@ -37,10 +37,10 @@ QString utils::getSmartctlOutput(const QStringList &arguments, bool root, bool i if (root) { command = "pkexec"; } else { - command = getSmartctlPath(initializing); + command = getSmartctlPath(); } - if (!getSmartctlPath(initializing).isEmpty()) { + if (!getSmartctlPath().isEmpty()) { process.start(command, arguments); process.waitForFinished(-1); } @@ -67,7 +67,7 @@ QPair utils::scanDevices(bool initializing) QJsonDocument doc = QJsonDocument::fromJson(output.toUtf8()); QJsonObject jsonObj = doc.object(); QJsonArray devices = jsonObj["devices"].toArray(); - QString smartctlPath = getSmartctlPath(initializing); + QString smartctlPath = getSmartctlPath(); QStringList commandList; QStringList deviceOutputs; @@ -112,7 +112,7 @@ QPair utils::scanDevices(bool initializing) QString utils::initiateSelfTest(const QString &testType, const QString &deviceNode) { QProcess process; - QString command = getSmartctlPath(false); + QString command = getSmartctlPath(); QStringList arguments; arguments << command << "--json=o" << "-t" << testType << deviceNode; @@ -129,7 +129,7 @@ QString utils::initiateSelfTest(const QString &testType, const QString &deviceNo void utils::cancelSelfTest(const QString &deviceNode) { QProcess process; - QString command = getSmartctlPath(false); + QString command = getSmartctlPath(); QStringList arguments; arguments << command << "-X" << deviceNode; diff --git a/src/utils.h b/src/utils.h index 1318b59..17ad5db 100644 --- a/src/utils.h +++ b/src/utils.h @@ -30,7 +30,7 @@ public: utils(); void clearButtonGroup(QButtonGroup* buttonGroup, QHBoxLayout* horizontalLayout, QSpacerItem* buttonStretch, QMenu* menuDisk); - QString getSmartctlPath(bool initializing); + QString getSmartctlPath(); QString getSmartctlOutput(const QStringList &arguments, bool root, bool initializing); QPair scanDevices(bool initializing); QString initiateSelfTest(const QString &testType, const QString &deviceNode); @@ -39,4 +39,4 @@ public: QString toTitleCase(const QString& sentence); }; -#endif // UTILS_H +#endif From 86c4c7647f47e599b3d8c071a777b299611ecc18 Mon Sep 17 00:00:00 2001 From: spiros Date: Sat, 22 Jun 2024 18:04:27 +0300 Subject: [PATCH 3/5] Remove some useless casts --- src/mainwindow.cpp | 2 +- src/statusdot.cpp | 2 +- src/utils.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index f673944..4b7544e 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -643,7 +643,7 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal int i = 0; for (const QString& key : keys) { - QString minutes = QString::number(static_cast(pollingMinutes[key].toInt())); + QString minutes = QString::number(pollingMinutes[key].toInt()); QString keyTranslated; if (key == "short") { keyTranslated = tr("Short"); diff --git a/src/statusdot.cpp b/src/statusdot.cpp index e98760f..8cf5971 100644 --- a/src/statusdot.cpp +++ b/src/statusdot.cpp @@ -9,7 +9,7 @@ void StatusDot::paint(QPainter *painter, const QStyleOptionViewItem &option, con painter->save(); painter->setRenderHint(QPainter::Antialiasing, true); QRect dotRect(opt.rect.center().x() - dotSize / 2, opt.rect.center().y() - dotSize / 2, dotSize, dotSize); - QColor color = QColor(index.data(Qt::BackgroundRole).value()); + QColor color = index.data(Qt::BackgroundRole).value(); painter->setBrush(color); painter->setPen(Qt::NoPen); painter->drawEllipse(dotRect); diff --git a/src/utils.cpp b/src/utils.cpp index 1a23089..7f52c06 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -74,7 +74,7 @@ QPair utils::scanDevices(bool initializing) for (const QJsonValue &value : std::as_const(devices)) { QJsonObject device = value.toObject(); QString deviceName = device["name"].toString(); - commandList.append(QString(smartctlPath + " --all --json=o %1").arg(deviceName)); + commandList.append((smartctlPath + " --all --json=o %1").arg(deviceName)); } QString command = commandList.join(" ; "); From 6b43da2a4cfdf41a3e6a8b9ac4fdb6f304b001ff Mon Sep 17 00:00:00 2001 From: Felix Riiga Date: Sat, 22 Jun 2024 17:46:15 +0200 Subject: [PATCH 4/5] Add some more compiler warnings --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index cf6b50e..89eae2a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -8,7 +8,7 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) -set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic") +set(CMAKE_CXX_FLAGS "-Wall -Wextra -Wpedantic -Wuseless-cast -Wconversion -Wsign-conversion -Wshadow") if(NOT DEFINED QT_VERSION_MAJOR) set(QT_VERSION_MAJOR 6) From 94da0612a5424aceaf3336a45f569dec26efcda4 Mon Sep 17 00:00:00 2001 From: spiros Date: Sat, 22 Jun 2024 19:39:59 +0300 Subject: [PATCH 5/5] Assign the correct type to some variable and fix shadowing cases --- src/custombutton.cpp | 4 +- src/custombutton.h | 3 +- src/jsonparser.cpp | 8 ++-- src/mainwindow.cpp | 109 +++++++++++++++++++++++++------------------ src/mainwindow.h | 2 +- src/utils.cpp | 6 +-- 6 files changed, 73 insertions(+), 59 deletions(-) diff --git a/src/custombutton.cpp b/src/custombutton.cpp index 7d7e739..f4c1f85 100644 --- a/src/custombutton.cpp +++ b/src/custombutton.cpp @@ -1,8 +1,8 @@ #include "custombutton.h" #include -CustomButton::CustomButton(const QString &text1, const QString &text2, const QString &text3, const QColor &lineColor, QWidget *parent) - : QPushButton(parent), text1(text1), text2(text2), text3(text3), lineColor(lineColor) { +CustomButton::CustomButton(const QString &text1_, const QString &text2_, const QString &text3_, const QColor &lineColor_, QWidget *parent) + : QPushButton(parent), text1(text1_), text2(text2_), text3(text3_), lineColor(lineColor_) { setMinimumHeight(60); adjustWidthToFitText(); } diff --git a/src/custombutton.h b/src/custombutton.h index ed38a0f..db4d05f 100644 --- a/src/custombutton.h +++ b/src/custombutton.h @@ -8,7 +8,7 @@ class CustomButton : public QPushButton { Q_OBJECT public: - CustomButton(const QString &text1, const QString &text2, const QString &text3, const QColor &lineColor, QWidget *parent = nullptr); + CustomButton(const QString &text1_, const QString &text2_, const QString &text3_, const QColor &lineColor_, QWidget *parent = nullptr); protected: void paintEvent(QPaintEvent *event) override; @@ -18,7 +18,6 @@ protected: void setText3(const QString &newText3); void adjustWidthToFitText(); - private: QString text1; QString text2; diff --git a/src/jsonparser.cpp b/src/jsonparser.cpp index b8164a9..c9da0e7 100644 --- a/src/jsonparser.cpp +++ b/src/jsonparser.cpp @@ -32,10 +32,10 @@ QVector> JsonParser::parse(const QString &json) if (trimmedLine.contains("}")) { break; } - int colon_pos = trimmedLine.indexOf(":"); - if (colon_pos != -1) { - QString key = removeQuotes(trimmedLine.left(colon_pos)); - QString valueString = trimmedLine.mid(colon_pos + 1).trimmed(); + qsizetype colonPos = trimmedLine.indexOf(":"); + if (colonPos != -1) { + QString key = removeQuotes(trimmedLine.left(colonPos)); + QString valueString = trimmedLine.mid(colonPos + 1).trimmed(); valueString.chop(1); int value = valueString.toInt(); data.append(qMakePair(key, value)); diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index 4b7544e..e5d43b9 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -104,21 +104,21 @@ MainWindow::~MainWindow() void MainWindow::onNextButtonClicked() { - int currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); - int nextIndex = (currentIndex + 1) % buttonGroup->buttons().size(); + qsizetype currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); + qsizetype nextIndex = (currentIndex + 1) % buttonGroup->buttons().size(); buttonGroup->buttons().at(nextIndex)->click(); updateNavigationButtons(nextIndex); } void MainWindow::onPrevButtonClicked() { - int currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); - int prevIndex = (currentIndex - 1 + buttonGroup->buttons().size()) % buttonGroup->buttons().size(); + qsizetype currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); + qsizetype prevIndex = (currentIndex - 1 + buttonGroup->buttons().size()) % buttonGroup->buttons().size(); buttonGroup->buttons().at(prevIndex)->click(); updateNavigationButtons(prevIndex); } -void MainWindow::updateNavigationButtons(int currentIndex) +void MainWindow::updateNavigationButtons(qsizetype currentIndex) { prevButton->setEnabled(currentIndex > 0 || (ui->actionCyclic_Navigation->isChecked() && buttonGroup->buttons().size() > 1)); // We can use setVisible if we want to mimic CrystalDiskInfo nextButton->setEnabled(currentIndex < buttonGroup->buttons().size() - 1 || ui->actionCyclic_Navigation->isChecked()); @@ -151,7 +151,7 @@ void MainWindow::updateUI() QString health; QColor healthColor; - float diskCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9; + double diskCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9; QString gbSymbol = locale.formattedDataSize(1 << 30, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1]; QString tbSymbol = locale.formattedDataSize(qint64(1) << 40, 1, QLocale::DataSizeTraditionalFormat).split(' ')[1]; QString diskCapacityString; @@ -243,7 +243,7 @@ void MainWindow::updateUI() button->setCheckable(true); button->setAutoExclusive(true); - int buttonIndex = buttonGroup->buttons().indexOf(button); + qsizetype buttonIndex = buttonGroup->buttons().indexOf(button); auto updateWindow = [=]() { if (isNvme) { @@ -295,7 +295,7 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal QJsonObject nvmeLog = localObj["nvme_smart_health_information_log"].toObject(); QString modelName = localObj["model_name"].toString(); QString firmwareVersion = localObj["firmware_version"].toString(); - float diskCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9; + double diskCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9; int diskCapacityGbInt = static_cast(diskCapacityGB); int temperatureInt = localObj["temperature"].toObject()["current"].toInt(); int totalWritesInt = 0; @@ -329,32 +329,38 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal auto createTablePopup = [=](QJsonArray selfTestsTable) { QWidget *popup = new QWidget(); - QTableWidget *tableWidget = new QTableWidget(); + QTableWidget *selfTestsTableWidget = new QTableWidget(); + selfTestsTableWidget->setFocusPolicy(Qt::NoFocus); - tableWidget->setRowCount(selfTestsTable.size()); - tableWidget->setColumnCount(3); - tableWidget->verticalHeader()->setVisible(false); - tableWidget->setHorizontalHeaderLabels({tr("Type"), tr("Status"), tr("Power On Hours")}); + qsizetype rowCount = selfTestsTable.size(); + if (rowCount > std::numeric_limits::max()) { + rowCount = std::numeric_limits::max(); + } - for (int i = 0; i < selfTestsTable.size(); ++i) { + selfTestsTableWidget->setRowCount(static_cast(rowCount)); + selfTestsTableWidget->setColumnCount(3); + selfTestsTableWidget->verticalHeader()->setVisible(false); + selfTestsTableWidget->setHorizontalHeaderLabels({tr("Type"), tr("Status"), tr("Power On Hours")}); + + for (int i = 0; i < rowCount; ++i) { QJsonObject entry = selfTestsTable[i].toObject(); QTableWidgetItem *item; if (isNvme) { - tableWidget->setItem(i, 0, new QTableWidgetItem(entry["self_test_code"].toObject()["string"].toString())); - tableWidget->setItem(i, 1, new QTableWidgetItem(entry["self_test_result"].toObject()["string"].toString())); + selfTestsTableWidget->setItem(i, 0, new QTableWidgetItem(entry["self_test_code"].toObject()["string"].toString())); + selfTestsTableWidget->setItem(i, 1, new QTableWidgetItem(entry["self_test_result"].toObject()["string"].toString())); item = new QTableWidgetItem(QString::number(entry["power_on_hours"].toInt())); } else { - tableWidget->setItem(i, 0, new QTableWidgetItem(entry["type"].toObject()["string"].toString())); - tableWidget->setItem(i, 1, new QTableWidgetItem(entry["status"].toObject()["string"].toString())); + selfTestsTableWidget->setItem(i, 0, new QTableWidgetItem(entry["type"].toObject()["string"].toString())); + selfTestsTableWidget->setItem(i, 1, new QTableWidgetItem(entry["status"].toObject()["string"].toString())); item = new QTableWidgetItem(QString::number(entry["lifetime_hours"].toInt())); } item->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); - tableWidget->setItem(i, 2, item); + selfTestsTableWidget->setItem(i, 2, item); } - for (int i = 0; i < tableWidget->columnCount(); ++i) { - QTableWidgetItem *headerItem = tableWidget->horizontalHeaderItem(i); + for (int i = 0; i < selfTestsTableWidget->columnCount(); ++i) { + QTableWidgetItem *headerItem = selfTestsTableWidget->horizontalHeaderItem(i); if (headerItem) { if (i == 2) { headerItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); @@ -365,19 +371,19 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal } - tableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); - for (int i = 0; i < tableWidget->columnCount(); ++i) { + selfTestsTableWidget->horizontalHeader()->setSectionResizeMode(1, QHeaderView::Stretch); + for (int i = 0; i < selfTestsTableWidget->columnCount(); ++i) { if (i != 1) { - tableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::ResizeToContents); + selfTestsTableWidget->horizontalHeader()->setSectionResizeMode(i, QHeaderView::ResizeToContents); } } - tableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); - tableWidget->verticalHeader()->setDefaultSectionSize(31); - tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); + selfTestsTableWidget->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); + selfTestsTableWidget->verticalHeader()->setDefaultSectionSize(31); + selfTestsTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); QVBoxLayout *layout = new QVBoxLayout; - layout->addWidget(tableWidget); + layout->addWidget(selfTestsTableWidget); popup->setLayout(layout); popup->setWindowTitle(tr("Self Test Log")); popup->resize(400, 400); @@ -449,10 +455,10 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal double gigabytes = (attrObj["raw"].toObject()["value"].toInt() * 32 * 1024.0 * 1024.0) / 1e9; totalWritesInt = static_cast(gigabytes); } else if (attrObj["name"] == "Total_LBAs_Written") { - unsigned int logicalBlockSize = localObj["logical_block_size"].toInt(); - unsigned long long lbaWritten = attrObj["raw"].toObject()["value"].toVariant().toLongLong(); - unsigned long long oneGB = static_cast(std::pow(2, 30)); - unsigned long long gigabytes = (lbaWritten * logicalBlockSize) / oneGB; + int logicalBlockSize = localObj["logical_block_size"].toInt(); + qlonglong lbaWritten = attrObj["raw"].toObject()["value"].toVariant().toLongLong(); + qlonglong oneGB = static_cast(std::pow(2, 30)); + qlonglong gigabytes = (lbaWritten * logicalBlockSize) / oneGB; totalWritesInt = static_cast(gigabytes); } else if (attrObj["name"] == "Host_Writes_GiB" || attrObj["name"] == "Lifetime_Writes_GiB") { double gibibytes = attrObj["raw"].toObject()["value"].toDouble(); @@ -470,10 +476,10 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal double gigabytes = (attrObj["raw"].toObject()["value"].toInt() * 32 * 1024.0 * 1024.0) / 1e9; totalReadsInt = static_cast(gigabytes); } else if (attrObj["name"] == "Total_LBAs_Read") { - unsigned int logicalBlockSize = localObj["logical_block_size"].toInt(); - unsigned long long lbaRead = attrObj["raw"].toObject()["value"].toVariant().toLongLong(); - unsigned long long oneGB = static_cast(std::pow(2, 30)); - unsigned long long gigabytes = (lbaRead * logicalBlockSize) / oneGB; + int logicalBlockSize = localObj["logical_block_size"].toInt(); + qlonglong lbaRead = attrObj["raw"].toObject()["value"].toVariant().toLongLong(); + qlonglong oneGB = static_cast(std::pow(2, 30)); + qlonglong gigabytes = (lbaRead * logicalBlockSize) / oneGB; totalReadsInt = static_cast(gigabytes); } else if (attrObj["name"] == "Host_Reads_GiB" || attrObj["name"] == "Lifetime_Reads_GiB") { double gibibytes = attrObj["raw"].toObject()["value"].toDouble(); @@ -485,10 +491,10 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal } } else if (attrObj["id"] == 246) { // MX500 if (attrObj["name"] == "Total_LBAs_Written") { - unsigned int logicalBlockSize = localObj["logical_block_size"].toInt(); - unsigned long long lbaWritten = attrObj["raw"].toObject()["value"].toVariant().toLongLong(); - unsigned long long oneGB = static_cast(std::pow(2, 30)); - unsigned long long gigabytes = (lbaWritten * logicalBlockSize) / oneGB; + int logicalBlockSize = localObj["logical_block_size"].toInt(); + qlonglong lbaWritten = attrObj["raw"].toObject()["value"].toVariant().toLongLong(); + qlonglong oneGB = static_cast(std::pow(2, 30)); + qlonglong gigabytes = (lbaWritten * logicalBlockSize) / oneGB; totalWritesInt = static_cast(gigabytes); } } else if (attrObj["name"] == "Remaining_Lifetime_Perc") { @@ -568,7 +574,7 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal nvmeHasSelfTest = true; } } else if (stringValue.startsWith("Warning Comp. Temp. Threshold")) { - int pos = stringValue.indexOf(':'); + qsizetype pos = stringValue.indexOf(':'); if (pos != -1) { QString thresholdStr = stringValue.mid(pos + 1).trimmed(); int temperature = thresholdStr.section(' ', 0, 0).toInt(); @@ -577,7 +583,7 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal } } } else if (stringValue.startsWith("Critical Comp. Temp. Threshold")) { - int pos = stringValue.indexOf(':'); + qsizetype pos = stringValue.indexOf(':'); if (pos != -1) { QString thresholdStr = stringValue.mid(pos + 1).trimmed(); int temperature = thresholdStr.section(' ', 0, 0).toInt(); @@ -721,11 +727,17 @@ void MainWindow::addNvmeLogTable(const QVector>& nvmeLogOrde { QString warningMessage = ""; + qsizetype rowCount = nvmeLogOrdered.size(); + if (rowCount > std::numeric_limits::max()) { + rowCount = std::numeric_limits::max(); + } + + tableWidget->setRowCount(static_cast(rowCount)); tableWidget->setColumnCount(4); tableWidget->setHorizontalHeaderLabels({"", tr("ID"), tr("Attribute Name"), tr("Raw Values")}); tableWidget->verticalHeader()->setVisible(false); tableWidget->setItemDelegateForColumn(0, new StatusDot(tableWidget)); - tableWidget->setRowCount(nvmeLogOrdered.size()); + tableWidget->horizontalHeaderItem(2)->setTextAlignment(Qt::AlignLeft | Qt::AlignVCenter); tableWidget->horizontalHeaderItem(3)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter); @@ -817,11 +829,16 @@ void MainWindow::addNvmeLogTable(const QVector>& nvmeLogOrde void MainWindow::addSmartAttributesTable(const QJsonArray &attributes) { + qsizetype rowCount = attributes.size(); + if (rowCount > std::numeric_limits::max()) { + rowCount = std::numeric_limits::max(); + } + + tableWidget->setRowCount(static_cast(rowCount)); tableWidget->setColumnCount(7); tableWidget->setHorizontalHeaderLabels({"", tr("ID"), tr("Attribute Name"), tr("Current"), tr("Worst"), tr("Threshold"), tr("Raw Values")}); tableWidget->verticalHeader()->setVisible(false); tableWidget->setItemDelegateForColumn(0, new StatusDot(tableWidget)); - tableWidget->setRowCount(attributes.size()); for (int i = 0; i < tableWidget->columnCount(); ++i) { QTableWidgetItem *headerItem = tableWidget->horizontalHeaderItem(i); @@ -845,7 +862,7 @@ void MainWindow::addSmartAttributesTable(const QJsonArray &attributes) QString rawString = attrObj["raw"].toObject()["string"].toString(); QString rawHEX = rawString; - int spaceIndex = rawHEX.indexOf(' '); + qsizetype spaceIndex = rawHEX.indexOf(' '); if (spaceIndex != -1) { rawHEX = rawHEX.left(spaceIndex); } @@ -1003,7 +1020,7 @@ void MainWindow::on_actionUse_Fahrenheit_toggled(bool enabled) void MainWindow::on_actionCyclic_Navigation_toggled(bool cyclicNavigation) { settings.setValue("CyclicNavigation", cyclicNavigation); - int currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); + qsizetype currentIndex = buttonGroup->buttons().indexOf(buttonGroup->checkedButton()); updateNavigationButtons(currentIndex); } diff --git a/src/mainwindow.h b/src/mainwindow.h index 306b3e7..ad65833 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -67,7 +67,7 @@ private: void onNextButtonClicked(); void onPrevButtonClicked(); - void updateNavigationButtons(int currentIndex); + void updateNavigationButtons(qsizetype currentIndex); void updateUI(); void populateWindow(const QJsonObject &tempObj, const QString &health, const QVector>& nvmeLogOrdered = QVector>()); void addNvmeLogTable(const QVector>& nvmeLogOrdered); diff --git a/src/utils.cpp b/src/utils.cpp index 7f52c06..32a65ef 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -85,8 +85,8 @@ QPair utils::scanDevices(bool initializing) QString allDevicesOutput = getSmartctlOutput({"sh", "-c", command}, true, initializing); - int startIndex = 0; - int endIndex = 0; + qsizetype startIndex = 0; + qsizetype endIndex = 0; static const QRegularExpression regex("\\}\\n\\{"); @@ -153,8 +153,6 @@ void utils::selfTestHandler(const QString &mode, const QString &name, const QStr QJsonDocument testDoc = QJsonDocument::fromJson(output.toUtf8()); QJsonObject testObj = testDoc.object(); QJsonObject smartctlObj = testObj.value("smartctl").toObject(); - QJsonObject deviceObj = testObj.value("device").toObject(); - QString name = deviceObj.value("name").toString(); int exitStatus = smartctlObj.value("exit_status").toInt(); QJsonArray outputArray = smartctlObj["output"].toArray();