registeredNames static method
Snapshot of currently-registered plugin names.
Implementation
static List<String> registeredNames() {
final lib = PlatformLoader.loadCommons();
final fn = lib.lookupFunction<
Int32 Function(Pointer<Pointer<Pointer<Utf8>>>, Pointer<IntPtr>),
int Function(Pointer<Pointer<Pointer<Utf8>>>, Pointer<IntPtr>)>(
'rac_registry_registered_names',
);
final outNamesPtr = calloc<Pointer<Pointer<Utf8>>>();
final outCountPtr = calloc<IntPtr>();
try {
final rc = fn(outNamesPtr, outCountPtr);
if (rc != RAC_SUCCESS) {
_logger.warning(
'rac_registry_registered_names failed: ${RacResultCode.getMessage(rc)}',
);
return const <String>[];
}
final namesArray = outNamesPtr.value;
final count = outCountPtr.value;
final results = <String>[];
for (var i = 0; i < count; i++) {
final namePtr = namesArray[i];
if (namePtr != nullptr) {
results.add(namePtr.toDartString());
}
}
// Free the array (and its strings) if a free function exists.
try {
final freeFn = lib.lookupFunction<
Void Function(Pointer<Pointer<Utf8>>, IntPtr),
void Function(Pointer<Pointer<Utf8>>, int)>(
'rac_registry_names_free',
);
freeFn(namesArray, count);
} catch (_) {
// Optional symbol — if missing we leak; harmless once-per-call.
}
return results;
} finally {
calloc.free(outNamesPtr);
calloc.free(outCountPtr);
}
}