Skip to content

Commit d572e29

Browse files
committed
Rename native POSIX support
1 parent 64c02ef commit d572e29

8 files changed

Lines changed: 58 additions & 58 deletions

File tree

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/builtins/objects/mmap/PMMap.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
import com.oracle.graal.python.nodes.PConstructAndRaiseNode;
4949
import com.oracle.graal.python.nodes.util.CastToJavaIntExactNode;
5050
import com.oracle.graal.python.runtime.AsyncHandler;
51-
import com.oracle.graal.python.runtime.NFIPosixSupport;
51+
import com.oracle.graal.python.runtime.NativePosixSupport;
5252
import com.oracle.graal.python.runtime.PosixSupportLibrary;
5353
import com.oracle.graal.python.runtime.PosixSupportLibrary.PosixException;
5454
import com.oracle.graal.python.runtime.PythonContext;
@@ -211,7 +211,7 @@ void close(PosixSupportLibrary posixLib, Object posixSupport) {
211211
@ExportMessage
212212
boolean isNative(
213213
@Bind Node inliningTarget) {
214-
return PythonContext.get(inliningTarget).getPosixSupport() instanceof NFIPosixSupport;
214+
return PythonContext.get(inliningTarget).getPosixSupport() instanceof NativePosixSupport;
215215
}
216216

217217
@ExportMessage

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/NFIPosixConstants.java renamed to graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/NativePosixConstants.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2023, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -40,7 +40,7 @@
4040
*/
4141
package com.oracle.graal.python.runtime;
4242

43-
public enum NFIPosixConstants {
43+
public enum NativePosixConstants {
4444
// start generated
4545
SIZEOF_STRUCT_SOCKADDR,
4646
SIZEOF_STRUCT_SOCKADDR_SA_FAMILY,

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/NFIPosixSupport.java renamed to graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/NativePosixSupport.java

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -47,21 +47,21 @@
4747
import static com.oracle.graal.python.annotations.NativeSimpleType.VOID;
4848
import static com.oracle.graal.python.nodes.StringLiterals.J_NFI_LANGUAGE;
4949
import static com.oracle.graal.python.nodes.StringLiterals.T_NATIVE;
50-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_IN6_ADDR_S6_ADDR;
51-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_IN_ADDR_S_ADDR;
52-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_ADDR;
53-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_FLOWINFO;
54-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_PORT;
55-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID;
56-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN_SIN_ADDR;
57-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN_SIN_PORT;
58-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_SA_FAMILY;
59-
import static com.oracle.graal.python.runtime.NFIPosixConstants.OFFSETOF_STRUCT_SOCKADDR_UN_SUN_PATH;
60-
import static com.oracle.graal.python.runtime.NFIPosixConstants.SIZEOF_STRUCT_SOCKADDR_IN;
61-
import static com.oracle.graal.python.runtime.NFIPosixConstants.SIZEOF_STRUCT_SOCKADDR_IN6;
62-
import static com.oracle.graal.python.runtime.NFIPosixConstants.SIZEOF_STRUCT_SOCKADDR_SA_FAMILY;
63-
import static com.oracle.graal.python.runtime.NFIPosixConstants.SIZEOF_STRUCT_SOCKADDR_STORAGE;
64-
import static com.oracle.graal.python.runtime.NFIPosixConstants.SIZEOF_STRUCT_SOCKADDR_UN_SUN_PATH;
50+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_IN6_ADDR_S6_ADDR;
51+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_IN_ADDR_S_ADDR;
52+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_ADDR;
53+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_FLOWINFO;
54+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_PORT;
55+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID;
56+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN_SIN_ADDR;
57+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_IN_SIN_PORT;
58+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_SA_FAMILY;
59+
import static com.oracle.graal.python.runtime.NativePosixConstants.OFFSETOF_STRUCT_SOCKADDR_UN_SUN_PATH;
60+
import static com.oracle.graal.python.runtime.NativePosixConstants.SIZEOF_STRUCT_SOCKADDR_IN;
61+
import static com.oracle.graal.python.runtime.NativePosixConstants.SIZEOF_STRUCT_SOCKADDR_IN6;
62+
import static com.oracle.graal.python.runtime.NativePosixConstants.SIZEOF_STRUCT_SOCKADDR_SA_FAMILY;
63+
import static com.oracle.graal.python.runtime.NativePosixConstants.SIZEOF_STRUCT_SOCKADDR_STORAGE;
64+
import static com.oracle.graal.python.runtime.NativePosixConstants.SIZEOF_STRUCT_SOCKADDR_UN_SUN_PATH;
6565
import static com.oracle.graal.python.runtime.PosixConstants.AF_INET;
6666
import static com.oracle.graal.python.runtime.PosixConstants.AF_INET6;
6767
import static com.oracle.graal.python.runtime.PosixConstants.AF_UNIX;
@@ -148,7 +148,7 @@
148148
* downcalls.
149149
*/
150150
@ExportLibrary(PosixSupportLibrary.class)
151-
public final class NFIPosixSupport extends PosixSupport {
151+
public final class NativePosixSupport extends PosixSupport {
152152
private static final String SUPPORTING_NATIVE_LIB_NAME = "posix";
153153
private static final Source NFI_WARMUP_SIGNATURE = Source.newBuilder(J_NFI_LANGUAGE, "with native ():void", "python-nfi-warmup").internal(true).build();
154154

@@ -160,7 +160,7 @@ public final class NFIPosixSupport extends PosixSupport {
160160

161161
private static final int MAX_READ = Integer.MAX_VALUE / 2;
162162

163-
private static final TruffleLogger LOGGER = PythonLanguage.getLogger(NFIPosixSupport.class);
163+
private static final TruffleLogger LOGGER = PythonLanguage.getLogger(NativePosixSupport.class);
164164

165165
private static final Unsafe UNSAFE = PythonUtils.initUnsafe();
166166

@@ -626,24 +626,24 @@ static NativeLibrary loadNativeLibrary(PythonContext context) {
626626
}
627627

628628
private final PythonContext context;
629-
private final TruffleString nfiBackend;
629+
private final TruffleString nativeBackend;
630630
private final PosixNativeFunctionInvoker posixNativeFunctionInvoker;
631631
private final CryptNativeFunctionInvoker cryptNativeFunctionInvoker;
632632
@CompilationFinal(dimensions = 1) private long[] constantValues;
633633

634-
public NFIPosixSupport(PythonContext context, TruffleString nfiBackend) {
635-
assert nfiBackend.equalsUncached(T_NATIVE, TS_ENCODING);
634+
public NativePosixSupport(PythonContext context, TruffleString nativeBackend) {
635+
assert nativeBackend.equalsUncached(T_NATIVE, TS_ENCODING);
636636
this.context = context;
637-
this.nfiBackend = nfiBackend;
637+
this.nativeBackend = nativeBackend;
638638
this.posixNativeFunctionInvoker = new PosixNativeFunctionInvokerGen(context);
639639
this.cryptNativeFunctionInvoker = new CryptNativeFunctionInvokerGen(context);
640640
setEnv(context.getEnv());
641641
}
642642

643-
long getConstant(NFIPosixConstants constant) {
643+
long getConstant(NativePosixConstants constant) {
644644
if (constantValues == null) {
645645
CompilerDirectives.transferToInterpreterAndInvalidate();
646-
long[] values = new long[NFIPosixConstants.values().length];
646+
long[] values = new long[NativePosixConstants.values().length];
647647
long nativeValues = NativeMemory.mallocLongArray(values.length);
648648
try {
649649
int result = posixNativeFunctionInvoker.init_constants(nativeValues, values.length);
@@ -680,7 +680,7 @@ public void setEnv(Env env) {
680680
// native cwd is global, but Truffle cwd is per context.
681681
// TruffleFile will be unaware of the real working directory and keep resolving against the
682682
// original working directory. This should not matter since we do not use TruffleFile for
683-
// ordinary I/O when using NFI backend.
683+
// ordinary I/O when using the native backend.
684684
try {
685685
TruffleFile truffleFile = context.getEnv().getInternalTruffleFile(".").getAbsoluteFile();
686686
context.getEnv().setCurrentWorkingDirectory(truffleFile);
@@ -691,7 +691,7 @@ public void setEnv(Env env) {
691691

692692
@ExportMessage
693693
public TruffleString getBackend() {
694-
return nfiBackend;
694+
return nativeBackend;
695695
}
696696

697697
@ExportMessage
@@ -1305,7 +1305,7 @@ public Object dirEntryGetName(Object dirEntryObj) {
13051305
@ExportMessage
13061306
public static class DirEntryGetPath {
13071307
@Specialization(guards = "endsWithSlash(scandirPath)")
1308-
static Buffer withSlash(@SuppressWarnings("unused") NFIPosixSupport receiver, DirEntry dirEntry, Object scandirPath) {
1308+
static Buffer withSlash(@SuppressWarnings("unused") NativePosixSupport receiver, DirEntry dirEntry, Object scandirPath) {
13091309
Buffer scandirPathBuffer = (Buffer) scandirPath;
13101310
int pathLen = scandirPathBuffer.data.length;
13111311
int nameLen = (int) dirEntry.name.length;
@@ -1316,7 +1316,7 @@ static Buffer withSlash(@SuppressWarnings("unused") NFIPosixSupport receiver, Di
13161316
}
13171317

13181318
@Specialization(guards = "!endsWithSlash(scandirPath)")
1319-
static Buffer withoutSlash(@SuppressWarnings("unused") NFIPosixSupport receiver, DirEntry dirEntry, Object scandirPath) {
1319+
static Buffer withoutSlash(@SuppressWarnings("unused") NativePosixSupport receiver, DirEntry dirEntry, Object scandirPath) {
13201320
Buffer scandirPathBuffer = (Buffer) scandirPath;
13211321
int pathLen = scandirPathBuffer.data.length;
13221322
int nameLen = (int) dirEntry.name.length;
@@ -2627,7 +2627,7 @@ private TruffleString gai_strerror(Node inliningTarget, int errorCode, NativeMem
26272627
* }
26282628
* </pre>
26292629
*
2630-
* To avoid multiple NFI calls, we transfer the data in batch using arrays of {@code int}s and
2630+
* To avoid multiple native calls, we transfer the data in batch using arrays of {@code int}s and
26312631
* {@code long}s - int values are stored in {@code intData}, the {@code ai_canonname} and
26322632
* {@code ai_next} pointers are stored in {@code longData} and the socket address pointed to by
26332633
* {@code ai_addr} is copied into Java byte array {@code socketAddress}. We also cache two
@@ -2647,16 +2647,16 @@ private static class AddrInfo {
26472647
private final long[] longData = new long[2];
26482648
private byte[] socketAddress;
26492649

2650-
private void update(long ptr, NFIPosixSupport nfiPosixSupport) {
2651-
socketAddress = new byte[(int) nfiPosixSupport.getConstant(SIZEOF_STRUCT_SOCKADDR_STORAGE)];
2650+
private void update(long ptr, NativePosixSupport nativePosixSupport) {
2651+
socketAddress = new byte[(int) nativePosixSupport.getConstant(SIZEOF_STRUCT_SOCKADDR_STORAGE)];
26522652
long nativeIntData = NULLPTR;
26532653
long nativeLongData = NULLPTR;
26542654
long nativeSocketAddress = NULLPTR;
26552655
try {
26562656
nativeIntData = NativeMemory.mallocIntArray(intData.length);
26572657
nativeLongData = NativeMemory.mallocLongArray(longData.length);
26582658
nativeSocketAddress = NativeMemory.mallocByteArray(socketAddress.length);
2659-
int res = nfiPosixSupport.posixNativeFunctionInvoker.get_addrinfo_members(ptr, nativeIntData, nativeLongData, nativeSocketAddress);
2659+
int res = nativePosixSupport.posixNativeFunctionInvoker.get_addrinfo_members(ptr, nativeIntData, nativeLongData, nativeSocketAddress);
26602660
if (res != 0) {
26612661
throw shouldNotReachHere("the length of ai_canonname does not fit into an int");
26622662
}
@@ -2711,21 +2711,21 @@ long getNextPtr() {
27112711
@ExportLibrary(AddrInfoCursorLibrary.class)
27122712
protected static class AddrInfoCursorImpl implements AddrInfoCursor {
27132713

2714-
private final NFIPosixSupport nfiPosixSupport;
2714+
private final NativePosixSupport nativePosixSupport;
27152715
private long head;
27162716
private AddrInfo info;
27172717

2718-
AddrInfoCursorImpl(NFIPosixSupport nfiPosixSupport, long head) {
2719-
this.nfiPosixSupport = nfiPosixSupport;
2718+
AddrInfoCursorImpl(NativePosixSupport nativePosixSupport, long head) {
2719+
this.nativePosixSupport = nativePosixSupport;
27202720
this.head = head;
27212721
info = new AddrInfo();
2722-
info.update(head, nfiPosixSupport);
2722+
info.update(head, nativePosixSupport);
27232723
}
27242724

27252725
@ExportMessage
27262726
void release() {
27272727
checkReleased();
2728-
nfiPosixSupport.posixNativeFunctionInvoker.call_freeaddrinfo(head);
2728+
nativePosixSupport.posixNativeFunctionInvoker.call_freeaddrinfo(head);
27292729
head = 0;
27302730
}
27312731

@@ -2736,7 +2736,7 @@ boolean next() {
27362736
if (nextPtr == 0) {
27372737
return false;
27382738
}
2739-
info.update(nextPtr, nfiPosixSupport);
2739+
info.update(nextPtr, nativePosixSupport);
27402740
return true;
27412741
}
27422742

@@ -2779,7 +2779,7 @@ Object getCanonName() {
27792779

27802780
@ExportMessage
27812781
UniversalSockAddr getSockAddr() {
2782-
UniversalSockAddrImpl addr = new UniversalSockAddrImpl(nfiPosixSupport);
2782+
UniversalSockAddrImpl addr = new UniversalSockAddrImpl(nativePosixSupport);
27832783
PythonUtils.arraycopy(info.socketAddress, 0, addr.data, 0, info.getAddrLen());
27842784
addr.setFamily(info.getAddrFamily());
27852785
addr.setLen(info.getAddrLen());
@@ -2833,12 +2833,12 @@ UniversalSockAddr createUniversalSockAddrUnix(UnixSockAddr src) throws InvalidUn
28332833
@ExportLibrary(UniversalSockAddrLibrary.class)
28342834
protected static class UniversalSockAddrImpl implements UniversalSockAddr {
28352835

2836-
private final NFIPosixSupport nfiPosixSupport;
2836+
private final NativePosixSupport nativePosixSupport;
28372837
private final byte[] data;
28382838
private int len = 0;
28392839

2840-
UniversalSockAddrImpl(NFIPosixSupport nfiPosixSupport) {
2841-
this.nfiPosixSupport = nfiPosixSupport;
2840+
UniversalSockAddrImpl(NativePosixSupport nativePosixSupport) {
2841+
this.nativePosixSupport = nativePosixSupport;
28422842
this.data = new byte[(int) getConstant(SIZEOF_STRUCT_SOCKADDR_STORAGE)];
28432843
}
28442844

@@ -2924,8 +2924,8 @@ UnixSockAddr asUnixSockAddr() {
29242924
return new UnixSockAddr(pathBuf);
29252925
}
29262926

2927-
long getConstant(NFIPosixConstants constant) {
2928-
return nfiPosixSupport.getConstant(constant);
2927+
long getConstant(NativePosixConstants constant) {
2928+
return nativePosixSupport.getConstant(constant);
29292929
}
29302930

29312931
int getLen() {

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PosixSupportLibrary.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -348,7 +348,7 @@ public record OpenPtyResult(int masterFd, int slaveFd) {
348348

349349
public abstract TruffleString ctermid(Object receiver) throws PosixException;
350350

351-
// note: this leaks memory in nfi backend and is not synchronized
351+
// note: this leaks memory in native backend and is not synchronized
352352
// TODO is it worth synchronizing at least all accesses made through PosixSupportLibrary?
353353
public abstract void setenv(Object receiver, Object name, Object value, boolean overwrite) throws PosixException;
354354

graalpython/com.oracle.graal.python/src/com/oracle/graal/python/runtime/PythonContext.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1887,21 +1887,21 @@ private void initializePosixSupport() {
18871887
} else if (selectedNativeBackend) {
18881888
if (env.isPreInitialization()) {
18891889
EmulatedPosixSupport emulatedPosixSupport = new EmulatedPosixSupport(this);
1890-
NFIPosixSupport nativePosixSupport = new NFIPosixSupport(this, option);
1890+
NativePosixSupport nativePosixSupport = new NativePosixSupport(this, option);
18911891
result = new PreInitPosixSupport(env, nativePosixSupport, emulatedPosixSupport);
18921892
} else if (TruffleOptions.AOT) {
18931893
// We always use a PreInitPosixSupport on SVM to keep the type of the posixSupport
18941894
// field consistent for both pre-initialized and not-pre-initialized contexts so
18951895
// that host inlining and PE see only one type, and also to avoid polymorphism when
18961896
// calling library methods.
1897-
NFIPosixSupport nativePosixSupport = new NFIPosixSupport(this, option);
1897+
NativePosixSupport nativePosixSupport = new NativePosixSupport(this, option);
18981898
result = new PreInitPosixSupport(env, nativePosixSupport, null);
18991899
} else {
19001900
if (!getOption(PythonOptions.RunViaLauncher)) {
19011901
writeWarning("Native Posix backend is not fully supported when embedding. For example, standard I/O always uses file " +
19021902
"descriptors 0, 1 and 2 regardless of stream redirection specified in Truffle environment");
19031903
}
1904-
result = new NFIPosixSupport(this, option);
1904+
result = new NativePosixSupport(this, option);
19051905
}
19061906
} else {
19071907
throw new IllegalStateException(String.format("Wrong value for the PosixModuleBackend option: '%s'", option));

graalpython/python-libposix/src/fork_exec.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
/* Copyright (c) 2021, 2025, Oracle and/or its affiliates.
1+
/* Copyright (c) 2021, 2026, Oracle and/or its affiliates.
22
* Copyright (C) 1996-2020 Python Software Foundation
33
*
44
* Licensed under the PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
@@ -396,7 +396,7 @@ child_exec(char *const exec_array[],
396396

397397

398398
/*
399-
* data, offsets, offsetsLen, argsPos, envPos, cwdPos - see comment in NFiPosixSupport.forkExec()
399+
* data, offsets, offsetsLen, argsPos, envPos, cwdPos - see comment in NativePosixSupport.forkExec()
400400
* stdinRdFd - read end of the pipe for the child's stdin - closed by parent, dupped to fd 0 by child
401401
* stdinWrFd - write end of the pipe for the child's stdin - closed by child, written to by parent
402402
* stdoutRdFd - read end of the pipe for the child's stdout - closed by child, read from by parent

graalpython/python-libposix/src/posix.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
*/
4141

4242
// Helper functions that mostly delegate to POSIX functions
43-
// These functions are called from NFIPosixSupport Java class using NFI
43+
// These functions are called from NativePosixSupport Java class using native-access downcalls
4444

4545
// This file uses GNU extensions. Functions that require non-GNU versions (e.g. strerror_r)
4646
// need to go to posix_no_gnu.c
@@ -781,7 +781,7 @@ int32_t call_unsetenv(char *name) {
781781
return unsetenv(name);
782782
}
783783

784-
// See comment in NFiPosixSupport.execv() for the description of arguments
784+
// See comment in NativePosixSupport.execv() for the description of arguments
785785
void call_execv(char *data, int64_t *offsets, int32_t offsetsLen) {
786786
// We reuse the memory allocated for offsets to avoid the need to allocate and reliably free another array
787787
char **strings = (char **) offsets;
@@ -1008,7 +1008,7 @@ void call_gai_strerror(int32_t error, char *buf, int32_t buflen) {
10081008
}
10091009

10101010
int32_t get_addrinfo_members(int64_t ptr, int32_t *intData, int64_t *longData, int8_t *addr) {
1011-
// see NFIPosixSupport.AddrInfo for description of the way data is transferred
1011+
// see NativePosixSupport.AddrInfo for description of the way data is transferred
10121012
struct addrinfo *ai = (struct addrinfo *) ptr;
10131013

10141014
memcpy(addr, ai->ai_addr, ai->ai_addrlen);

graalpython/python-libposix/src/posix_no_gnu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright (c) 2020, 2023, Oracle and/or its affiliates. All rights reserved.
2+
* Copyright (c) 2020, 2026, Oracle and/or its affiliates. All rights reserved.
33
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
44
*
55
* The Universal Permissive License (UPL), Version 1.0
@@ -40,7 +40,7 @@
4040
*/
4141

4242
// This source contains functions that require POSIX functions without GNU extensions
43-
// These functions are called from NFIPosixSupport Java class using NFI
43+
// These functions are called from NativePosixSupport Java class using native-access downcalls
4444

4545
#include <stdint.h>
4646
#include <string.h>

0 commit comments

Comments
 (0)