]> git.bitcoin.ninja Git - ldk-java/commitdiff
[C#] Fix bool passing
authorMatt Corallo <git@bluematt.me>
Fri, 7 Jun 2024 01:26:57 +0000 (01:26 +0000)
committerMatt Corallo <git@bluematt.me>
Fri, 7 Jun 2024 02:00:35 +0000 (02:00 +0000)
It turns out that C# always expects bools to be passed as 4-byte
ints, which matches the classic C definition (which was usually
typedef'd to int) but is platform-dependent. On some platforms we
were building with 1-byte ints which led to bools getting mangled
when passing them to C#.

Luckily we already have bools passed to C# separated from bools
passed to Rust, so we can simply redefine `jboolean` to `int32_t`.

csharp_strings.py

index 3e5e247dc7dfc2747a3abf10a088cb0d27a480c1..3b0f9f1a411054fd0c910e046b4b8a87612a666b 100644 (file)
@@ -442,7 +442,8 @@ static inline LDKStr str_ref_to_owned_c(const jstring str) {
        return res;
 }
 
-typedef bool jboolean;
+// The C# Bool marshalling is defined as 4 bytes, but the size of bool is platform-dependent
+typedef int32_t jboolean;
 
 int64_t CS_LDK_allocate_buffer(int64_t len) {
        return (int64_t)MALLOC(len, "C#-requested buffer");