mirror of
https://github.com/keepassxreboot/keepassxc.git
synced 2025-01-11 15:29:51 -05:00
parent
9a63e80386
commit
b1180b3341
@ -43,6 +43,11 @@ namespace Utils
|
||||
QTextStream STDIN;
|
||||
QTextStream DEVNULL;
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
UINT origCodePage;
|
||||
UINT origOutputCodePage;
|
||||
#endif
|
||||
|
||||
void setDefaultTextStreams()
|
||||
{
|
||||
auto fd = new QFile();
|
||||
@ -66,6 +71,9 @@ namespace Utils
|
||||
DEVNULL.setDevice(fd);
|
||||
|
||||
#ifdef Q_OS_WIN
|
||||
origCodePage = GetConsoleCP();
|
||||
origOutputCodePage = GetConsoleOutputCP();
|
||||
|
||||
// On Windows, we ask via keepassxc-cli.exe.manifest to use UTF-8,
|
||||
// but the console code-page isn't automatically changed to match.
|
||||
SetConsoleCP(GetACP());
|
||||
@ -73,6 +81,14 @@ namespace Utils
|
||||
#endif
|
||||
}
|
||||
|
||||
void resetTextStreams()
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
SetConsoleCP(origCodePage);
|
||||
SetConsoleOutputCP(origOutputCodePage);
|
||||
#endif
|
||||
}
|
||||
|
||||
void setStdinEcho(bool enable = true)
|
||||
{
|
||||
#ifdef Q_OS_WIN
|
||||
|
@ -39,6 +39,7 @@ namespace Utils
|
||||
static const QStringList EntryFieldNames(QStringList() << UuidFieldName << TagsFieldName);
|
||||
|
||||
void setDefaultTextStreams();
|
||||
void resetTextStreams();
|
||||
|
||||
void setStdinEcho(bool enable);
|
||||
bool loadFileKey(const QString& path, QSharedPointer<FileKey>& fileKey);
|
||||
|
@ -181,6 +181,8 @@ int main(int argc, char** argv)
|
||||
|
||||
QCoreApplication app(argc, argv);
|
||||
QCoreApplication::setApplicationVersion(KEEPASSXC_VERSION);
|
||||
// Cleanup code pages after cli exits
|
||||
QObject::connect(&app, &QCoreApplication::destroyed, &app, [] { Utils::resetTextStreams(); });
|
||||
|
||||
Bootstrap::bootstrap(config()->get(Config::GUI_Language).toString());
|
||||
Utils::setDefaultTextStreams();
|
||||
@ -218,7 +220,9 @@ int main(int argc, char** argv)
|
||||
// Switch to parser.showVersion() when available (QT 5.4).
|
||||
out << KEEPASSXC_VERSION << Qt::endl;
|
||||
return EXIT_SUCCESS;
|
||||
} else if (parser.isSet(debugInfoOption)) {
|
||||
}
|
||||
|
||||
if (parser.isSet(debugInfoOption)) {
|
||||
QString debugInfo = Tools::debugInfo().append("\n").append(Crypto::debugInfo());
|
||||
out << debugInfo << Qt::endl;
|
||||
return EXIT_SUCCESS;
|
||||
|
@ -174,6 +174,8 @@ int main(int argc, char** argv)
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
Utils::setDefaultTextStreams();
|
||||
|
||||
// Apply the configured theme before creating any GUI elements
|
||||
app.applyTheme();
|
||||
|
||||
@ -192,9 +194,6 @@ int main(int argc, char** argv)
|
||||
mainWindow.setAllowScreenCapture(parser.isSet(allowScreenCaptureOption));
|
||||
|
||||
const bool pwstdin = parser.isSet(pwstdinOption);
|
||||
if (!fileNames.isEmpty() && pwstdin) {
|
||||
Utils::setDefaultTextStreams();
|
||||
}
|
||||
for (const QString& filename : fileNames) {
|
||||
QString password;
|
||||
if (pwstdin) {
|
||||
@ -228,5 +227,7 @@ int main(int argc, char** argv)
|
||||
__lsan_disable();
|
||||
#endif
|
||||
|
||||
Utils::resetTextStreams();
|
||||
|
||||
return exitCode;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user