self.util_fn_pfx = """package org.ldk.structs;
import org.ldk.impl.bindings;
import java.util.Arrays;
+import org.ldk.enums.*;
public class UtilMethods {
"""
static inline jstring str_ref_to_java(JNIEnv *env, const char* chars, size_t len) {
// Sadly we need to create a temporary because Java can't accept a char* without a 0-terminator
- char* err_buf = MALLOC(len + 1, "str conv buf");
- memcpy(err_buf, chars, len);
- err_buf[len] = 0;
- jstring err_conv = (*env)->NewStringUTF(env, chars);
- FREE(err_buf);
- return err_conv;
+ char* conv_buf = MALLOC(len + 1, "str conv buf");
+ memcpy(conv_buf, chars, len);
+ conv_buf[len] = 0;
+ jstring ret = (*env)->NewStringUTF(env, conv_buf);
+ FREE(conv_buf);
+ return ret;
+}
+static inline LDKStr java_to_owned_str(JNIEnv *env, jstring str) {
+ uint64_t str_len = (*env)->GetStringUTFLength(env, str);
+ char* newchars = MALLOC(str_len + 1, "String chars");
+ const char* jchars = (*env)->GetStringUTFChars(env, str, NULL);
+ memcpy(newchars, jchars, str_len);
+ newchars[str_len] = 0;
+ (*env)->ReleaseStringUTFChars(env, str, jchars);
+ LDKStr res = {
+ .chars = newchars,
+ .len = str_len,
+ .chars_is_owned = true
+ };
+ return res;
}
"""
else:
return "(*env)->Release" + ty_info.java_ty.strip("[]").title() + "ArrayElements(env, " + arr_name + ", " + dest_name + ", 0)"
- def str_ref_to_c_call(self, var_name, str_len):
+ def str_ref_to_native_call(self, var_name, str_len):
return "str_ref_to_java(env, " + var_name + ", " + str_len + ")"
+ def str_ref_to_c_call(self, var_name):
+ return "java_to_owned_str(env, " + var_name + ")"
def c_fn_name_define_pfx(self, fn_name, has_args):
if has_args: