Skip to content

Commit 16b89ba

Browse files
committed
NativeAPI - generateTypeTreeNodesJson - use only jsonPtr without returning array length
1 parent ac422a8 commit 16b89ba

2 files changed

Lines changed: 5 additions & 22 deletions

File tree

TypeTreeGeneratorAPI/NativeAPI.cs

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ public static int TypeTreeGenerator_delete(IntPtr typeTreeGeneratorPtr)
104104
}
105105

106106
[UnmanagedCallersOnly(EntryPoint = "TypeTreeGenerator_generateTreeNodesJson")]
107-
public static int TypeTreeGenerator_generateTypeTreeNodesJson(IntPtr typeTreeGeneratorPtr, IntPtr assemblyNamePtr, IntPtr fullNamePtr, IntPtr jsonAddr, IntPtr jsonLength)
107+
public static int TypeTreeGenerator_generateTypeTreeNodesJson(IntPtr typeTreeGeneratorPtr, IntPtr assemblyNamePtr, IntPtr fullNamePtr, IntPtr jsonAddr)
108108
{
109109
string? assemblyName = Marshal.PtrToStringUTF8(assemblyNamePtr);
110110
string? fullName = Marshal.PtrToStringUTF8(fullNamePtr);
@@ -123,18 +123,7 @@ public static int TypeTreeGenerator_generateTypeTreeNodesJson(IntPtr typeTreeGen
123123
return -1;
124124
}
125125
var json = TypeTreeNodeSerializer.ToJson(typeTreeNodes!);
126-
var jsonBytes = System.Text.Encoding.UTF8.GetBytes(json);
127-
128-
// Allocate memory for the JSON string
129-
IntPtr jsonPtr = Marshal.AllocCoTaskMem(jsonBytes.Length);
130-
Marshal.Copy(jsonBytes, 0, jsonPtr, jsonBytes.Length);
131-
132-
// Write the JSON pointer to the address specified by `jsonAddr`
133-
Marshal.WriteIntPtr(jsonAddr, jsonPtr);
134-
135-
// Write the JSON length to the address specified by `jsonLength`
136-
Marshal.WriteInt32(jsonLength, jsonBytes.Length);
137-
126+
Marshal.WriteIntPtr(jsonAddr, Marshal.StringToCoTaskMemUTF8(json));
138127
return 0;
139128
}
140129
catch

bindings/python/TypeTreeGeneratorAPI/TypeTreeGenerator.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -68,8 +68,7 @@ def init_dll():
6868
ctypes.c_void_p,
6969
ctypes.c_char_p,
7070
ctypes.c_char_p,
71-
ctypes.c_void_p,
72-
ctypes.c_void_p,
71+
ctypes.POINTER(ctypes.c_char_p),
7372
]
7473
dll.TypeTreeGenerator_generateTreeNodesRaw.argtypes = [
7574
ctypes.c_void_p,
@@ -119,19 +118,14 @@ def load_il2cpp(self, il2cpp: bytes, metadata: bytes):
119118

120119
def get_nodes_as_json(self, assembly: str, fullname: str) -> str:
121120
jsonPtr = ctypes.c_char_p()
122-
jsonLen = ctypes.c_int()
123121
assert not DLL.TypeTreeGenerator_generateTreeNodesJson(
124122
self.ptr,
125123
assembly.encode("ascii"),
126124
fullname.encode("ascii"),
127125
ctypes.byref(jsonPtr),
128-
ctypes.byref(jsonLen),
129126
), "failed to dump nodes as json"
130-
data = jsonPtr.value
131-
assert data and len(data) != jsonLen.value, (
132-
"returned json data has an unexpected length"
133-
)
134-
json_str = data.decode("utf8")
127+
assert jsonPtr.value is not None, "didn't write json to ptr"
128+
json_str = jsonPtr.value.decode("utf8")
135129
DLL.FreeCoTaskMem(jsonPtr)
136130
return json_str
137131

0 commit comments

Comments
 (0)