From 2f38636a277833d48bb093f27eb9db2fc194c5bc Mon Sep 17 00:00:00 2001 From: Milan Suman <> Date: Wed, 20 Jul 2022 10:38:55 +0530 Subject: [PATCH] lib/javacompat: implement exportJavaString --- src/lib/javacompat.cpp | 53 +++++++++++++++++++++++++++++++++++++---- src/lib/javacompat.h++ | 3 ++- src/test/javacompat.cpp | 17 ++++++++++++- 3 files changed, 66 insertions(+), 7 deletions(-) diff --git a/src/lib/javacompat.cpp b/src/lib/javacompat.cpp index 05e5dee..b60bc88 100644 --- a/src/lib/javacompat.cpp +++ b/src/lib/javacompat.cpp @@ -16,8 +16,18 @@ #include #include #include "error.h++" - #include "javacompat.h++" +#include "../../.endianness" + +#ifdef FOSSVG_ENDIAN_BIG_WORD + #error "Honeywell-316-style endianness is not supported. If you feel like it should, feel free to participate in the project to maintain it." +#endif +#ifdef FOSSVG_ENDIAN_LITTLE_WORD + #error "PDP-11-style endianness is not supported. If you feel like it should, feel free to participate in the project to maintain it." +#endif +#ifdef FOSSVG_ENDIAN_UNKNOWN + #error "The endianness of your system could not be determined. Please set it manually. FOSS-VG is currently implemented using some endian-specific functions." +#endif namespace JavaCompat { //FIXME: contrary to what I said, we need to explicitly pass the data @@ -37,9 +47,42 @@ namespace JavaCompat { } return tiny_utf8::string(stdString); } - /* - ErrorOr exportJavaString(tiny_utf8::string data) { - return ErrorOr(nullptr); + + ErrorOr> exportJavaString(tiny_utf8::string data) { + uint16_t* size = new uint16_t; + uint8_t* sizeBytes = reinterpret_cast(size); + std::vector output = std::vector(); + std::string stdString = data.cpp_str(); + + *size = (uint16_t) stdString.size(); + + //placeholder size bytes + output.push_back(0x00); + output.push_back(0x00); + for(int i=0; i #include "error.h++" +#include namespace JavaCompat { //FIXME: contrary to what I said, we need to explicitly pass the data // size because files could have been tampered with or corrupted tiny_utf8::string importJavaString(uint8_t data[]); - ErrorOr exportJavaString(tiny_utf8::string data); + ErrorOr> exportJavaString(tiny_utf8::string data); } diff --git a/src/test/javacompat.cpp b/src/test/javacompat.cpp index 87d7862..49b1154 100644 --- a/src/test/javacompat.cpp +++ b/src/test/javacompat.cpp @@ -28,7 +28,7 @@ int main(){ // java-style_unicode: 119 bytes, 85 characters ?? std::cout << "################################################################################" << std::endl; - std::cout << "Java String Tests" << std::endl; + std::cout << "Import String Tests" << std::endl; std::cout << "################################################################################" << std::endl; char* nextChar = new char; @@ -78,6 +78,21 @@ int main(){ ASSERT(normalString == importedString); std::cout << "Passed Import Java string test." << std::endl; + std::cout << "################################################################################" << std::endl; + std::cout << "Export String Tests" << std::endl; + std::cout << "################################################################################" << std::endl; + + //using normalString from when we read the file earlier + //there's no need to read the same file twice + + std::vector data = JavaCompat::exportJavaString(normalString).value; + std::string exportedString = std::string(); + for(int i=0; i