registeredNames static method

List<String> registeredNames()

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);
  }
}