| Retrieves android properties from system environment varaibles. |
| |
| - Converts the key names to capital letters. |
| - Replaces '.' with '-', as '.' is not supported in env variable names. |
| |
| |
| diff --git a/platform2/aosp/system/libbase/properties.cpp b/platform2/aosp/system/libbase/properties.cpp |
| index 8190987..34bd3e4 100644 |
| --- a/platform2/aosp/system/libbase/properties.cpp |
| +++ b/platform2/aosp/system/libbase/properties.cpp |
| @@ -20,6 +20,9 @@ |
| #define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ |
| #include <sys/system_properties.h> |
| #include <sys/_system_properties.h> |
| +#else |
| +#include <stdlib.h> |
| +#include <cstring> |
| #endif |
| |
| #include <algorithm> |
| @@ -53,6 +56,23 @@ int __system_property_set(const char* key, const char* value) { |
| return 0; |
| } |
| |
| +// Convert a key name to a format acceptible for an envronment variable |
| +std::string ConvertKeyToEnvVar(const std::string& key) { |
| + std::string result = key; |
| + // Convert to upper case |
| + std::transform(result.begin(), result.end(), result.begin(), ::toupper); |
| + // Convert '.' to '_' |
| + std::replace(result.begin(), result.end(), '.', '_'); |
| + |
| + return result; |
| +} |
| + |
| +std::string GetPropertyFromEnvVar(const std::string& key, const std::string& default_value) { |
| + std::string env_key = ConvertKeyToEnvVar(key); |
| + char* env_value = getenv(env_key.c_str()); |
| + return env_value ? std::string(env_value) : default_value; |
| +} |
| + |
| int __system_property_get(const char* key, char* value) { |
| auto it = g_properties.find(key); |
| if (it == g_properties.end()) { |
| @@ -119,10 +139,12 @@ std::string GetProperty(const std::string& key, const std::string& default_value |
| }, |
| &property_value); |
| #else |
| - // TODO: implement host __system_property_find()/__system_property_read_callback()? |
| auto it = g_properties.find(key); |
| - if (it == g_properties.end()) return default_value; |
| - property_value = it->second; |
| + if (it != g_properties.end()) { |
| + property_value = it->second; |
| + } else { |
| + property_value = GetPropertyFromEnvVar(key, default_value); |
| + } |
| #endif |
| // If the property exists but is empty, also return the default value. |
| // Since we can't remove system properties, "empty" is traditionally |