summaryrefslogtreecommitdiff
path: root/vulkan/libvulkan/driver.cpp
diff options
context:
space:
mode:
author Nick Desaulniers <ndesaulniers@google.com> 2019-10-21 16:36:19 -0700
committer Nick Desaulniers <ndesaulniers@google.com> 2019-10-21 16:36:19 -0700
commita70447192bd04c77f4380a37f5a56a94d41488b5 (patch)
tree7c043be4fa7c2e966a56fa9c4f1e6d205bcd1922 /vulkan/libvulkan/driver.cpp
parent8ba0cadc7de8f7c65d58eac5878ca0a18d363c96 (diff)
[frameworks][native][vulkan] fix -Walloca
Alloca cannot be checked for failure. Replace alloca with dynamic memory allocations. Bug: 139945549 Bug: 142475221 Test: mm Merged-In: I1a154b479c8da66e25d20dced6bf9ae269b906f8 Change-Id: Ife0a599db7f85f0c324717f526050f276fe43445 Signed-off-by: Nick Desaulniers <ndesaulniers@google.com>
Diffstat (limited to 'vulkan/libvulkan/driver.cpp')
-rw-r--r--vulkan/libvulkan/driver.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/vulkan/libvulkan/driver.cpp b/vulkan/libvulkan/driver.cpp
index c77fa064e6..85e1c923e7 100644
--- a/vulkan/libvulkan/driver.cpp
+++ b/vulkan/libvulkan/driver.cpp
@@ -24,7 +24,10 @@
#include <dlfcn.h>
#include <algorithm>
#include <array>
+#include <climits>
#include <new>
+#include <sstream>
+#include <string>
#include <log/log.h>
@@ -153,15 +156,12 @@ class CreateInfoWrapper {
Hal Hal::hal_;
void* LoadLibrary(const android_dlextinfo& dlextinfo,
- const char* subname,
- int subname_len) {
+ const std::string_view subname) {
ATRACE_CALL();
- 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);
+ std::stringstream ss;
+ ss << "vulkan." << subname << ".so";
+ return android_dlopen_ext(ss.str().c_str(), RTLD_LOCAL | RTLD_NOW, &dlextinfo);
}
const std::array<const char*, 2> HAL_SUBNAME_KEY_PROPERTIES = {{
@@ -181,8 +181,9 @@ 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) {
- so = LoadLibrary(dlextinfo, prop, prop_len);
+ 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 (so)
break;
}