diff options
| author | cyan <cyjan@mrcyjanek.net> | 2024-10-21 11:30:40 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-10-21 11:30:40 +0200 |
| commit | d54c9023bdf089489468d86b3aedd017e8973252 (patch) | |
| tree | 39d96db065dfb35cd995968ee21bff00ea836a99 /monero_libwallet2_api_c | |
| parent | f956f6b78164412c60ba6e7e368afc17635ae7ce (diff) | |
| parent | d04dcf67ec042fca76b48ffc09ea9d2ea4b5106e (diff) | |
Merge branch 'master' into ledgerledger
Diffstat (limited to 'monero_libwallet2_api_c')
| -rw-r--r-- | monero_libwallet2_api_c/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | monero_libwallet2_api_c/src/main/cpp/helpers.cpp | 67 |
2 files changed, 67 insertions, 1 deletions
diff --git a/monero_libwallet2_api_c/CMakeLists.txt b/monero_libwallet2_api_c/CMakeLists.txt index eb1714e..60be91c 100644 --- a/monero_libwallet2_api_c/CMakeLists.txt +++ b/monero_libwallet2_api_c/CMakeLists.txt @@ -32,6 +32,7 @@ if(${HOST_ABI} STREQUAL "x86_64-linux-android" OR ${HOST_ABI} STREQUAL "aarch64-linux-android" OR ${HOST_ABI} STREQUAL "armv7a-linux-androideabi") add_link_options(-stdlib=libc++ -static-libstdc++) + set(EXTRA_LIBS_ANDROID log) endif() add_library( wallet2_api_c diff --git a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp index d692879..8e45eba 100644 --- a/monero_libwallet2_api_c/src/main/cpp/helpers.cpp +++ b/monero_libwallet2_api_c/src/main/cpp/helpers.cpp @@ -9,6 +9,71 @@ #include <set> #include <sstream> #include <cstring> +#include <thread> + +#ifdef __ANDROID__ +#include <android/log.h> + +#define LOG_TAG "moneroc" +#define BUFFER_SIZE 1024*32 + +static int stdoutToLogcat(const char *buf, int size) { + __android_log_write(ANDROID_LOG_INFO, LOG_TAG, buf); + return size; +} + +static int stderrToLogcat(const char *buf, int size) { + __android_log_write(ANDROID_LOG_ERROR, LOG_TAG, buf); + return size; +} + +void redirectStdoutThread(int pipe_stdout[2]) { + char bufferStdout[BUFFER_SIZE]; + while (true) { + int read_size = read(pipe_stdout[0], bufferStdout, sizeof(bufferStdout) - 1); + if (read_size > 0) { + bufferStdout[read_size] = '\0'; + stdoutToLogcat(bufferStdout, read_size); + } + } +} + +void redirectStderrThread(int pipe_stderr[2]) { + char bufferStderr[BUFFER_SIZE]; + while (true) { + int read_size = read(pipe_stderr[0], bufferStderr, sizeof(bufferStderr) - 1); + if (read_size > 0) { + bufferStderr[read_size] = '\0'; + stderrToLogcat(bufferStderr, read_size); + } + } +} + +void setupAndroidLogging() { + static int pfdStdout[2]; + static int pfdStderr[2]; + + pipe(pfdStdout); + pipe(pfdStderr); + + dup2(pfdStdout[1], STDOUT_FILENO); + dup2(pfdStderr[1], STDERR_FILENO); + + std::thread stdoutThread(redirectStdoutThread, pfdStdout); + std::thread stderrThread(redirectStderrThread, pfdStderr); + + stdoutThread.detach(); + stderrThread.detach(); +} + +#endif // __ANDROID__ + +__attribute__((constructor)) +void library_init() { +#ifdef __ANDROID__ + setupAndroidLogging(); // This will now run automatically when the library is loaded +#endif +} const char* vectorToString(const std::vector<std::string>& vec, const std::string separator) { // Check if the vector is empty @@ -195,4 +260,4 @@ std::vector<uint64_t> splitStringUint(const std::string& str, const std::string& } tokens.push_back(std::stoull(content)); // Inserting the last token return tokens; -}
\ No newline at end of file +} |
