summaryrefslogtreecommitdiff
path: root/vulkan/libvulkan/driver.cpp
diff options
context:
space:
mode:
author Nick Desaulniers <ndesaulniers@google.com> 2019-10-25 11:23:08 -0700
committer Nick Desaulniers <ndesaulniers@google.com> 2019-10-25 11:24:55 -0700
commit03b11cfca168df1e6b37790a7672a27ae280c9d1 (patch)
treeb327d5586e77c330a295b41843acf89d8257acd9 /vulkan/libvulkan/driver.cpp
parentc864a0495f9256314c0a76d4bfc9ff394fce7a17 (diff)
Revert "[frameworks][native][vulkan] fix -Walloca"
This reverts commit a70447192bd04c77f4380a37f5a56a94d41488b5. Test: atest CtsGpuToolsHostTestCases:android.gputools.cts.CtsRootlessGpuDebugHostTest#testDebugLayerLoadExternalVulkan Bug: 139945549 Bug: 142475221 Bug: 143156243 Change-Id: Ie8b3fbddf63c8a4505f7fb196082c58a530d4993 Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Diffstat (limited to 'vulkan/libvulkan/driver.cpp')
-rw-r--r--vulkan/libvulkan/driver.cpp16
1 files changed, 9 insertions, 7 deletions
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp
index d92f35ac23..a544bc5ff8 100644
--- a/vulkan/libvulkan/driver.cpp
+++ b/vulkan/libvulkan/driver.cpp
@@ -151,12 +151,15 @@ class CreateInfoWrapper {
Hal Hal::hal_;
void* LoadLibrary(const android_dlextinfo& dlextinfo,
- const std::string_view subname) {
+ const char* subname,
+ int subname_len) {
ATRACE_CALL();
- std::stringstream ss;
- ss << "vulkan." << subname << ".so";
- return android_dlopen_ext(ss.str().c_str(), RTLD_LOCAL | RTLD_NOW, &dlextinfo);
+ const char kLibFormat[] = "vulkan.%*s.so";
+ char* name = static_cast<char*>(
+ alloca(sizeof(kLibFormat) + static_cast<size_t>(subname_len)));
+ sprintf(name, kLibFormat, subname_len, subname);
+ return android_dlopen_ext(name, RTLD_LOCAL | RTLD_NOW, &dlextinfo);
}
const std::array<const char*, 2> HAL_SUBNAME_KEY_PROPERTIES = {{
@@ -176,9 +179,8 @@ int LoadDriver(android_namespace_t* library_namespace,
char prop[PROPERTY_VALUE_MAX];
for (auto key : HAL_SUBNAME_KEY_PROPERTIES) {
int prop_len = property_get(key, prop, nullptr);
- if (prop_len > 0 && prop_len <= UINT_MAX) {
- std::string_view lib_name(prop, static_cast<unsigned int>(prop_len));
- so = LoadLibrary(dlextinfo, lib_name);
+ if (prop_len > 0) {
+ so = LoadLibrary(dlextinfo, prop, prop_len);
if (so)
break;
}