Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3e4b2ec2 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Add getExportedNamespace NB callback"

parents faa6c489 d2ace387
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -164,8 +164,9 @@ bool NativeBridgeLinkNamespaces(struct native_bridge_namespace_t* from,
void* NativeBridgeLoadLibraryExt(const char* libpath, int flag,
                                 struct native_bridge_namespace_t* ns);

// Returns vendor namespace if it is enabled for the device and null otherwise
struct native_bridge_namespace_t* NativeBridgeGetVendorNamespace();
// Returns exported namespace by the name. This is a reflection of
// android_get_exported_namespace function. Introduced in v5.
struct native_bridge_namespace_t* NativeBridgeGetExportedNamespace(const char* name);

// Native bridge interfaces to runtime.
struct NativeBridgeCallbacks {
@@ -362,7 +363,17 @@ struct NativeBridgeCallbacks {
  //
  // Returns:
  //   vendor namespace or null if it was not set up for the device
  //
  // Starting with v5 (Android Q) this function is no longer used.
  // Use getExportedNamespace() below.
  struct native_bridge_namespace_t* (*getVendorNamespace)();

  // Get native bridge version of exported namespace. Peer of
  // android_get_exported_namespace(const char*) function.
  //
  // Returns:
  //   exported namespace or null if it was not set up for the device
  struct native_bridge_namespace_t* (*getExportedNamespace)(const char* name);
};

// Runtime interfaces to native bridge.
+1 −1
Original line number Diff line number Diff line
@@ -24,7 +24,7 @@ LIBNATIVEBRIDGE_1 {
    NativeBridgeGetError;
    NativeBridgeIsPathSupported;
    NativeBridgeCreateNamespace;
    NativeBridgeGetVendorNamespace;
    NativeBridgeGetExportedNamespace;
    NativeBridgeLinkNamespaces;
    NativeBridgeLoadLibraryExt;
    NativeBridgeInitAnonymousNamespace;
+15 −3
Original line number Diff line number Diff line
@@ -101,6 +101,8 @@ enum NativeBridgeImplementationVersion {
  NAMESPACE_VERSION = 3,
  // The version with vendor namespaces
  VENDOR_NAMESPACE_VERSION = 4,
  // The version with runtime namespaces
  RUNTIME_NAMESPACE_VERSION = 5,
};

// Whether we had an error at some point.
@@ -610,14 +612,24 @@ bool NativeBridgeLinkNamespaces(native_bridge_namespace_t* from, native_bridge_n
  return false;
}

native_bridge_namespace_t* NativeBridgeGetVendorNamespace() {
  if (!NativeBridgeInitialized() || !isCompatibleWith(VENDOR_NAMESPACE_VERSION)) {
native_bridge_namespace_t* NativeBridgeGetExportedNamespace(const char* name) {
  if (!NativeBridgeInitialized()) {
    return nullptr;
  }

  if (isCompatibleWith(RUNTIME_NAMESPACE_VERSION)) {
    return callbacks->getExportedNamespace(name);
  }

  // sphal is vendor namespace name -> use v4 callback in the case NB callbacks
  // are not compatible with v5
  if (isCompatibleWith(VENDOR_NAMESPACE_VERSION) && name != nullptr && strcmp("sphal", name) == 0) {
    return callbacks->getVendorNamespace();
  }

  return nullptr;
}

void* NativeBridgeLoadLibraryExt(const char* libpath, int flag, native_bridge_namespace_t* ns) {
  if (NativeBridgeInitialized()) {
    if (isCompatibleWith(NAMESPACE_VERSION)) {
+1 −1
Original line number Diff line number Diff line
@@ -300,7 +300,7 @@ class LibraryNamespaces {
        return nullptr;
      }

      native_bridge_namespace_t* vendor_ns = NativeBridgeGetVendorNamespace();
      native_bridge_namespace_t* vendor_ns = NativeBridgeGetExportedNamespace(kVendorNamespaceName);

      if (!NativeBridgeLinkNamespaces(ns, nullptr, system_exposed_libraries.c_str())) {
        *error_msg = NativeBridgeGetError();