diff options
author | Nick Vaccaro <nvaccaro@google.com> | 2015-08-04 19:09:47 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-08-04 19:09:47 +0000 |
commit | 990d26fd3b669751e1820e9a505ed00ba76c1f33 (patch) | |
tree | 736f147e5f7f372498cb3bc7141ce4ea3cb0a5f9 | |
parent | 948b99ed9d7fdc45e9512d51667fb2b3c161608b (diff) | |
parent | 3f93d2a9705df0c4c341ac3e75b3751da82c98c6 (diff) | |
download | libhardware-990d26fd3b669751e1820e9a505ed00ba76c1f33.tar.gz |
am 3f93d2a9: Merge "libhardware: sensors: update multi hal to support 64bit builds"
* commit '3f93d2a9705df0c4c341ac3e75b3751da82c98c6':
libhardware: sensors: update multi hal to support 64bit builds
-rw-r--r-- | modules/sensors/Android.mk | 4 | ||||
-rw-r--r-- | modules/sensors/multihal.cpp | 46 |
2 files changed, 15 insertions, 35 deletions
diff --git a/modules/sensors/Android.mk b/modules/sensors/Android.mk index 445f69ec..94d100b0 100644 --- a/modules/sensors/Android.mk +++ b/modules/sensors/Android.mk @@ -20,9 +20,9 @@ ifeq ($(USE_SENSOR_MULTI_HAL),true) include $(CLEAR_VARS) -LOCAL_MODULE := sensors.$(TARGET_DEVICE) +LOCAL_MODULE := sensors.$(TARGET_BOARD_PLATFORM) -LOCAL_MODULE_PATH := $(TARGET_OUT_SHARED_LIBRARIES)/hw +LOCAL_MODULE_RELATIVE_PATH := hw LOCAL_CFLAGS := -DLOG_TAG=\"MultiHal\" diff --git a/modules/sensors/multihal.cpp b/modules/sensors/multihal.cpp index cd67f6d5..5fedd4d4 100644 --- a/modules/sensors/multihal.cpp +++ b/modules/sensors/multihal.cpp @@ -27,6 +27,8 @@ #include <cutils/log.h> #include <vector> +#include <string> +#include <fstream> #include <map> #include <string> @@ -36,8 +38,6 @@ static const char* CONFIG_FILENAME = "/system/etc/sensors/hals.conf"; -static const char* LEGAL_SUBHAL_PATH_PREFIX = "/system/lib/hw/"; -static const char* LEGAL_SUBHAL_ALTERNATE_PATH_PREFIX = "/system/vendor/lib/"; static const int MAX_CONF_LINE_LENGTH = 1024; static pthread_mutex_t init_modules_mutex = PTHREAD_MUTEX_INITIALIZER; @@ -463,39 +463,19 @@ static bool starts_with(const char* s, const char* prefix) { * Adds valid paths from the config file to the vector passed in. * The vector must not be null. */ -static void get_so_paths(std::vector<char*> *so_paths) { - FILE *conf_file = fopen(CONFIG_FILENAME, "r"); - if (conf_file == NULL) { +static void get_so_paths(std::vector<std::string> *so_paths) { + std::string line; + std::ifstream conf_file(CONFIG_FILENAME); + + if(!conf_file) { ALOGW("No multihal config file found at %s", CONFIG_FILENAME); return; } ALOGV("Multihal config file found at %s", CONFIG_FILENAME); - char *line = NULL; - size_t len = 0; - int line_count = 0; - while (getline(&line, &len, conf_file) != -1) { - // overwrite trailing eoln with null char - char* pch = strchr(line, '\n'); - if (pch != NULL) { - *pch = '\0'; - } - ALOGV("config file line #%d: '%s'", ++line_count, line); - char *real_path = realpath(line, NULL); - if (starts_with(real_path, LEGAL_SUBHAL_PATH_PREFIX) || - starts_with(real_path, LEGAL_SUBHAL_ALTERNATE_PATH_PREFIX)) { - ALOGV("accepting valid path '%s'", real_path); - char* compact_line = new char[strlen(real_path) + 1]; - strcpy(compact_line, real_path); - so_paths->push_back(compact_line); - } else { - ALOGW("rejecting path '%s' because it does not start with '%s' or '%s'", - real_path, LEGAL_SUBHAL_PATH_PREFIX, LEGAL_SUBHAL_ALTERNATE_PATH_PREFIX); - } - free(real_path); + while (std::getline(conf_file, line)) { + ALOGV("config file line: '%s'", line.c_str()); + so_paths->push_back(line); } - free(line); - fclose(conf_file); - ALOGV("hals.conf contained %d lines", line_count); } /* @@ -508,15 +488,15 @@ static void lazy_init_modules() { pthread_mutex_unlock(&init_modules_mutex); return; } - std::vector<char*> *so_paths = new std::vector<char*>(); + std::vector<std::string> *so_paths = new std::vector<std::string>(); get_so_paths(so_paths); // dlopen the module files and cache their module symbols in sub_hw_modules sub_hw_modules = new std::vector<hw_module_t *>(); dlerror(); // clear any old errors const char* sym = HAL_MODULE_INFO_SYM_AS_STR; - for (std::vector<char*>::iterator it = so_paths->begin(); it != so_paths->end(); it++) { - char* path = *it; + for (std::vector<std::string>::iterator it = so_paths->begin(); it != so_paths->end(); it++) { + const char* path = it->c_str(); void* lib_handle = dlopen(path, RTLD_LAZY); if (lib_handle == NULL) { ALOGW("dlerror(): %s", dlerror()); |