-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.cpp
84 lines (66 loc) · 2.48 KB
/
main.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*!
QCVECheckReport project
@file: main.cpp
@author: Raffaele de Cicco <[email protected]>
@abstract:
This tool is able to create a report to analyze CVE of a yocto build image using CVECheck json report and
NVD CVE DB of NIST created by the same tool retriving information by https://www.nist.gov/
@copyright: Copyright 2024 Raffaele de Cicco <[email protected]>
@legalese:
Licensed under the General Public License, Version 3.0 (the "License");
you may not use this file except in compliance with the License.
See file gnu-gpl-v3.0.md or obtain a copy of the License at
https://www.gnu.org/licenses/gpl-3.0.html
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "qcvecheckapp.h"
#include <QApplication>
#include <QLocale>
#include <QTranslator>
#include <initializer_list>
#include <signal.h>
#include <unistd.h>
void ignoreUnixSignals(std::initializer_list<int> ignoreSignals) {
// all these signals will be ignored.
for (int sig : ignoreSignals)
signal(sig, SIG_IGN);
}
void catchUnixSignals(std::initializer_list<int> quitSignals) {
auto handler = [](int sig) -> void {
// blocking and not aysnc-signal-safe func are valid
printf("\nquit the application by signal(%d).\n", sig);
QApplication::quit();
};
sigset_t blocking_mask;
sigemptyset(&blocking_mask);
for (auto sig : quitSignals)
sigaddset(&blocking_mask, sig);
struct sigaction sa;
sa.sa_handler = handler;
sa.sa_mask = blocking_mask;
sa.sa_flags = 0;
for (auto sig : quitSignals)
sigaction(sig, &sa, nullptr);
}
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QApplication::setWindowIcon(QIcon(QPixmap("://CVE.png")));
catchUnixSignals({SIGQUIT, SIGINT, SIGTERM, SIGHUP});
QTranslator translator;
const QStringList uiLanguages = QLocale::system().uiLanguages();
for (const QString &locale : uiLanguages) {
const QString baseName = "QCVECheckReport_" + QLocale(locale).name();
if (translator.load(":/i18n/" + baseName)) {
a.installTranslator(&translator);
break;
}
}
QCVECheckApp w;
w.show();
return a.exec();
}