Skip to content

Commit 109d1fd

Browse files
authored
Update call-c-from-java.yaml
1 parent 10d4c4a commit 109d1fd

File tree

1 file changed

+6
-13
lines changed

1 file changed

+6
-13
lines changed

content/language/call-c-from-java.yaml

Lines changed: 6 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,7 @@ oldCode: |-
2222
// Run javac -h to generate the .h file, then write C:
2323
// JNIEXPORT int JNICALL Java_CallCFromJava_greet(
2424
// JNIEnv *env, jclass clazz, jstring str) {
25-
// const char* name =
26-
// (*env)->GetStringUTFChars(env, str, NULL);
25+
// const char* name = (*env)->GetStringUTFChars(env, str, NULL);
2726
// printf("Hello %s\n", name);
2827
// return 0;
2928
// }
@@ -32,17 +31,11 @@ modernCode: |-
3231
try (var arena = Arena.ofConfined()) {
3332
// Use any system library directly — no C wrapper needed
3433
var stdlib = Linker.nativeLinker().defaultLookup();
35-
var foreignFuncAddr =
36-
stdlib.find("strlen").orElseThrow();
37-
var strlenSig =
38-
FunctionDescriptor.of(
39-
ValueLayout.JAVA_LONG, ValueLayout.ADDRESS);
40-
var strlenMethod =
41-
Linker.nativeLinker()
42-
.downcallHandle(foreignFuncAddr, strlenSig);
43-
var ret = (long) strlenMethod.invokeExact(
44-
arena.allocateFrom("Bambi"));
45-
System.out.println("Return value " + ret); // 5
34+
var foreignFuncAddr = stdlib.find("strlen").orElseThrow();
35+
var strlenSig = FunctionDescriptor.of(ValueLayout.JAVA_LONG, ValueLayout.ADDRESS);
36+
var strlenMethod = Linker.nativeLinker() .downcallHandle(foreignFuncAddr, strlenSig);
37+
var ret = (long) strlenMethod.invokeExact(arena.allocateFrom("Bambi"));
38+
IO.println("Return value " + ret); // 5
4639
}
4740
}
4841

0 commit comments

Comments
 (0)