From 9f61a1f86ca85da52a13a57290db95655cd5740e Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 12 Jul 2024 14:53:16 +0200 Subject: feat: improve the project structure --- src/sdk/GFSDKBasic.cpp | 106 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 src/sdk/GFSDKBasic.cpp (limited to 'src/sdk/GFSDKBasic.cpp') diff --git a/src/sdk/GFSDKBasic.cpp b/src/sdk/GFSDKBasic.cpp new file mode 100644 index 00000000..4d8af6c8 --- /dev/null +++ b/src/sdk/GFSDKBasic.cpp @@ -0,0 +1,106 @@ +/** + * Copyright (C) 2021 Saturneric + * + * This file is part of GpgFrontend. + * + * GpgFrontend is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * GpgFrontend is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with GpgFrontend. If not, see . + * + * The initial version of the source code is inherited from + * the gpg4usb project, which is under GPL-3.0-or-later. + * + * All the source code of GpgFrontend was modified and released by + * Saturneric starting on May 12, 2021. + * + * SPDX-License-Identifier: GPL-3.0-or-later + * + */ + +#include "GFSDKBasic.h" + +#include "core/function/SecureMemoryAllocator.h" +#include "core/function/gpg/GpgCommandExecutor.h" +#include "core/utils/BuildInfoUtils.h" +#include "core/utils/CommonUtils.h" + +auto GFAllocateMemory(uint32_t size) -> void* { + return GpgFrontend::SecureMemoryAllocator::Allocate(size); +} + +void GFFreeMemory(void* ptr) { + return GpgFrontend::SecureMemoryAllocator::Deallocate(ptr); +} + +auto GFProjectVersion() -> const char* { + return GpgFrontend::GFStrDup(GpgFrontend::GetProjectVersion()); +} + +auto GFQtEnvVersion() -> const char* { + return GpgFrontend::GFStrDup(QT_VERSION_STR); +} + +void GFExecuteCommandSync(const char* cmd, int32_t argc, const char** argv, + GFCommandExeucteCallback cb, void* data) { + QStringList args; + for (int i = 0; i < argc; i++) { + args.append(GpgFrontend::GFUnStrDup(argv[i])); + } + + GpgFrontend::GpgCommandExecutor::ExecuteContext const context{ + cmd, args, [=](int exit_code, const QString& out, const QString& err) { + cb(data, exit_code, out.toUtf8(), err.toUtf8()); + }}; + + GpgFrontend::GpgCommandExecutor::ExecuteSync(context); +} + +void GFExecuteCommandBatchSync(int32_t context_size, + const GFCommandExecuteContext* context) { + QList contexts; + + for (int i = 0; i < context_size; i++) { + const auto& exec_context = context[i]; + + QStringList args; + const char** argv = exec_context.argv; + for (int j = 0; j < exec_context.argc; j++) { + args.append(GpgFrontend::GFUnStrDup(argv[j])); + } + + contexts.append( + {exec_context.cmd, args, + [data = exec_context.data, cb = exec_context.cb]( + int exit_code, const QString& out, const QString& err) { + cb(data, exit_code, out.toUtf8(), err.toUtf8()); + }}); + } + + GpgFrontend::GpgCommandExecutor::ExecuteConcurrentlySync(contexts); +} + +auto StrlenSafe(const char* str, size_t max_len) -> size_t { + const char* end = static_cast(memchr(str, '\0', max_len)); + if (end == nullptr) return max_len; + return end - str; +} + +auto GPGFRONTEND_MODULE_SDK_EXPORT GFModuleStrDup(const char* src) -> char* { + auto len = StrlenSafe(src, kGfStrlenMax); + if (len > kGfStrlenMax) return nullptr; + + char* dst = static_cast(GFAllocateMemory((len + 1) * sizeof(char))); + memcpy(dst, src, len); + dst[len] = '\0'; + + return dst; +} \ No newline at end of file -- cgit v1.2.3 From d1d6859e2a50a78f57388ebf0a06f0636d4d0910 Mon Sep 17 00:00:00 2001 From: saturneric Date: Fri, 12 Jul 2024 20:38:16 +0200 Subject: feat: add some ui apis to sdk --- src/sdk/GFSDKBasic.cpp | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) (limited to 'src/sdk/GFSDKBasic.cpp') diff --git a/src/sdk/GFSDKBasic.cpp b/src/sdk/GFSDKBasic.cpp index 4d8af6c8..aefa022a 100644 --- a/src/sdk/GFSDKBasic.cpp +++ b/src/sdk/GFSDKBasic.cpp @@ -31,7 +31,8 @@ #include "core/function/SecureMemoryAllocator.h" #include "core/function/gpg/GpgCommandExecutor.h" #include "core/utils/BuildInfoUtils.h" -#include "core/utils/CommonUtils.h" +#include "sdk/private/CommonUtils.h" +#include "ui/GpgFrontendUIInit.h" auto GFAllocateMemory(uint32_t size) -> void* { return GpgFrontend::SecureMemoryAllocator::Allocate(size); @@ -42,18 +43,16 @@ void GFFreeMemory(void* ptr) { } auto GFProjectVersion() -> const char* { - return GpgFrontend::GFStrDup(GpgFrontend::GetProjectVersion()); + return GFStrDup(GpgFrontend::GetProjectVersion()); } -auto GFQtEnvVersion() -> const char* { - return GpgFrontend::GFStrDup(QT_VERSION_STR); -} +auto GFQtEnvVersion() -> const char* { return GFStrDup(QT_VERSION_STR); } void GFExecuteCommandSync(const char* cmd, int32_t argc, const char** argv, GFCommandExeucteCallback cb, void* data) { QStringList args; for (int i = 0; i < argc; i++) { - args.append(GpgFrontend::GFUnStrDup(argv[i])); + args.append(GFUnStrDup(argv[i])); } GpgFrontend::GpgCommandExecutor::ExecuteContext const context{ @@ -74,7 +73,7 @@ void GFExecuteCommandBatchSync(int32_t context_size, QStringList args; const char** argv = exec_context.argv; for (int j = 0; j < exec_context.argc; j++) { - args.append(GpgFrontend::GFUnStrDup(argv[j])); + args.append(GFUnStrDup(argv[j])); } contexts.append( @@ -94,7 +93,7 @@ auto StrlenSafe(const char* str, size_t max_len) -> size_t { return end - str; } -auto GPGFRONTEND_MODULE_SDK_EXPORT GFModuleStrDup(const char* src) -> char* { +auto GFModuleStrDup(const char* src) -> char* { auto len = StrlenSafe(src, kGfStrlenMax); if (len > kGfStrlenMax) return nullptr; @@ -103,4 +102,15 @@ auto GPGFRONTEND_MODULE_SDK_EXPORT GFModuleStrDup(const char* src) -> char* { dst[len] = '\0'; return dst; -} \ No newline at end of file +} + +auto GFAppActiveLocale() -> char* { return GFStrDup(QLocale().name()); } + +auto GFAppRegisterTranslator(char* data, int size) -> int { + auto b = QByteArray(data, size); + QMetaObject::invokeMethod(QApplication::instance()->thread(), [b]() { + GpgFrontend::UI::InstallTranslatorFromQMData(b); + }); + GFFreeMemory(data); + return 0; +} -- cgit v1.2.3 From 5be04d1602355278814bc86c69ec9f648978be8c Mon Sep 17 00:00:00 2001 From: saturneric Date: Sat, 27 Jul 2024 14:18:26 +0200 Subject: feat: improve sdk api for pinentry module --- src/sdk/GFSDKBasic.cpp | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/sdk/GFSDKBasic.cpp') diff --git a/src/sdk/GFSDKBasic.cpp b/src/sdk/GFSDKBasic.cpp index aefa022a..8b884c84 100644 --- a/src/sdk/GFSDKBasic.cpp +++ b/src/sdk/GFSDKBasic.cpp @@ -38,6 +38,10 @@ auto GFAllocateMemory(uint32_t size) -> void* { return GpgFrontend::SecureMemoryAllocator::Allocate(size); } +auto GFReallocateMemory(void* ptr, uint32_t size) -> void* { + return GpgFrontend::SecureMemoryAllocator::Reallocate(ptr, size); +} + void GFFreeMemory(void* ptr) { return GpgFrontend::SecureMemoryAllocator::Deallocate(ptr); } -- cgit v1.2.3