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

Commit a61c48d5 authored by Dimitry Ivanov's avatar Dimitry Ivanov Committed by Gerrit Code Review
Browse files

Merge "Allow different namespace types for different classloaders"

parents 0ad600bd d836ab00
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -104,7 +104,7 @@ int NativeBridgeUnloadLibrary(void* handle);

// Get last error message of native bridge when fail to load library or search symbol.
// This is reflection of dlerror() for native bridge.
char* NativeBridgeGetError();
const char* NativeBridgeGetError();

struct native_bridge_namespace_t;

@@ -244,7 +244,7 @@ struct NativeBridgeCallbacks {
  // Returns:
  //   A string describing the most recent error that occurred when load library
  //   or lookup symbol via native bridge.
  char* (*getError)();
  const char* (*getError)();

  // Check whether library paths are supported by native bridge.
  //
+3 −3
Original line number Diff line number Diff line
@@ -551,15 +551,15 @@ int NativeBridgeUnloadLibrary(void* handle) {
  return -1;
}

char* NativeBridgeGetError() {
const char* NativeBridgeGetError() {
  if (NativeBridgeInitialized()) {
    if (isCompatibleWith(NAMESPACE_VERSION)) {
      return callbacks->getError();
    } else {
      ALOGE("not compatible with version %d, cannot get message", NAMESPACE_VERSION);
      return "native bridge implementation is not compatible with version 3, cannot get message";
    }
  }
  return nullptr;
  return "native bridge is not initialized";
}

bool NativeBridgeIsPathSupported(const char* path) {
+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ extern "C" int native_bridge3_unloadLibrary(void* /* handle */) {
  return 0;
}

extern "C" char* native_bridge3_getError() {
extern "C" const char* native_bridge3_getError() {
  return nullptr;
}

+11 −7
Original line number Diff line number Diff line
@@ -308,13 +308,17 @@ class LibraryNamespaces {
    // code is one example) unknown to linker in which  case linker uses anonymous
    // namespace. The second argument specifies the search path for the anonymous
    // namespace which is the library_path of the classloader.
    if (!is_native_bridge) {
      initialized_ = android_init_namespaces(public_libraries_.c_str(), library_path);
    initialized_ = android_init_namespaces(public_libraries_.c_str(),
                                           is_native_bridge ? nullptr : library_path);
    if (!initialized_) {
      *error_msg = dlerror();
      return false;
    }
    } else {
      initialized_ = NativeBridgeInitNamespace(public_libraries_.c_str(), library_path);

    // and now initialize native bridge namespaces if necessary.
    if (NativeBridgeInitialized()) {
      initialized_ = NativeBridgeInitNamespace(public_libraries_.c_str(),
                                               is_native_bridge ? library_path : nullptr);
      if (!initialized_) {
        *error_msg = NativeBridgeGetError();
      }