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