diff options
author | 2024-02-13 03:07:54 +0000 | |
---|---|---|
committer | 2024-02-13 03:07:54 +0000 | |
commit | d53ea98501a54d48e88fb2e9ca9d0da9bf741b1b (patch) | |
tree | 13ea824a31dc76dc6a8aecf58dd4dc8d92827320 /libs/binder/IServiceManager.cpp | |
parent | 8203d98554b2f9ea40d0761cb66c1cf516a95961 (diff) | |
parent | b66de05eddd3dd0719d1e2591ebfd832c4aeebf2 (diff) |
Merge "binder: add openDeclaredPassthroughHal()" into main am: a38f2a995b am: b66de05edd
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2952185
Change-Id: Id50d2a0b5d4ed2c8672ee66b6e1c4e36774b728a
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
Diffstat (limited to 'libs/binder/IServiceManager.cpp')
-rw-r--r-- | libs/binder/IServiceManager.cpp | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/libs/binder/IServiceManager.cpp b/libs/binder/IServiceManager.cpp index fe566fccb2..39573ec54d 100644 --- a/libs/binder/IServiceManager.cpp +++ b/libs/binder/IServiceManager.cpp @@ -40,6 +40,11 @@ #include "ServiceManagerHost.h" #endif +#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__) && !defined(__ANDROID_NATIVE_BRIDGE__) +#include <android/apexsupport.h> +#include <vndksupport/linker.h> +#endif + #include "Static.h" namespace android { @@ -259,6 +264,27 @@ bool checkPermission(const String16& permission, pid_t pid, uid_t uid, bool logP } } +void* openDeclaredPassthroughHal(const String16& interface, const String16& instance, int flag) { +#if defined(__ANDROID__) && !defined(__ANDROID_RECOVERY__) && !defined(__ANDROID_NATIVE_BRIDGE__) + sp<IServiceManager> sm = defaultServiceManager(); + String16 name = interface + String16("/") + instance; + if (!sm->isDeclared(name)) { + return nullptr; + } + String16 libraryName = interface + String16(".") + instance + String16(".so"); + if (auto updatableViaApex = sm->updatableViaApex(name); updatableViaApex.has_value()) { + return AApexSupport_loadLibrary(String8(libraryName).c_str(), + String8(*updatableViaApex).c_str(), flag); + } + return android_load_sphal_library(String8(libraryName).c_str(), flag); +#else + (void)interface; + (void)instance; + (void)flag; + return nullptr; +#endif +} + #endif //__ANDROID_VNDK__ // ---------------------------------------------------------------------- |