aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--README.adoc3
-rw-r--r--tools/lxdrgen-cpp-qt.cpp23
2 files changed, 25 insertions, 1 deletions
diff --git a/README.adoc b/README.adoc
index debedf1..20a4612 100644
--- a/README.adoc
+++ b/README.adoc
@@ -45,8 +45,9 @@ lxdrgen-c.awk::
LibertyXDR backend that builds on top of the C pseudolibrary.
lxdrgen-cpp.awk::
-lxdrgen-cpp-win32.cpp::
lxdrgen-cpp-posix.cpp::
+lxdrgen-cpp-qt.cpp::
+lxdrgen-cpp-win32.cpp::
LibertyXDR backend for C++, primarily targeting Win32 and its wide strings.
Link the result together with one of the accompanied source files.
diff --git a/tools/lxdrgen-cpp-qt.cpp b/tools/lxdrgen-cpp-qt.cpp
new file mode 100644
index 0000000..60e7293
--- /dev/null
+++ b/tools/lxdrgen-cpp-qt.cpp
@@ -0,0 +1,23 @@
+// lxdrgen-cpp-qt.cpp: Qt support code for lxdrgen-cpp.awk.
+//
+// Copyright (c) 2024, Přemysl Eric Janouch <p@janouch.name>
+// SPDX-License-Identifier: 0BSD
+#include <QString>
+#include <string>
+
+namespace LibertyXDR {
+
+bool utf8_to_wstring(const uint8_t *utf8, size_t length, std::wstring &wide) {
+ QByteArrayView view(reinterpret_cast<const char *>(utf8), length);
+ if (!view.isValidUtf8())
+ return false;
+ wide = QString::fromUtf8(view).toStdWString();
+ return true;
+}
+
+bool wstring_to_utf8(const std::wstring &wide, std::string &utf8) {
+ utf8 = QString::fromStdWString(wide).toUtf8().toStdString();
+ return true;
+}
+
+} // namespace LibertyXDR