util/os_misc: use ndk api __system_property_get

__system_property_get is available since api level 3. There was a glitch
back in Android L, but the complete official supported was added back to
NDK immediately after the removal, and was patched into the same api
level 21. So it's safe to say this api is available all the time.
Our helper does not have a default prop value, so __system_property_get
is a better fit.

Reviewed-by: Dhruv Mark Collins <mark@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41222>
This commit is contained in:
Yiwei Zhang 2026-04-27 15:30:02 -07:00 committed by Marge Bot
parent 11399b15e0
commit d147817599

View file

@ -57,7 +57,7 @@
# define LOG_TAG "MESA"
# include <unistd.h>
# include <log/log.h>
# include <cutils/properties.h>
# include <sys/system_properties.h>
#elif DETECT_OS_LINUX || DETECT_OS_CYGWIN || DETECT_OS_SOLARIS || DETECT_OS_HURD || DETECT_OS_MANAGARM
# include <unistd.h>
#elif DETECT_OS_OPENBSD || DETECT_OS_FREEBSD
@ -147,8 +147,8 @@ os_log_message(const char *message)
* all property names.
*/
#if ANDROID_API_LEVEL >= 26
#undef PROPERTY_KEY_MAX
#define PROPERTY_KEY_MAX 128
#undef PROP_NAME_MAX
#define PROP_NAME_MAX 128
#endif /* ANDROID_API_LEVEL >= 26 */
/**
@ -174,9 +174,9 @@ os_log_message(const char *message)
static char *
os_get_android_option(const char *name)
{
static thread_local char os_android_option_value[PROPERTY_VALUE_MAX];
char key[PROPERTY_KEY_MAX];
char *p = key, *end = key + PROPERTY_KEY_MAX;
static thread_local char os_android_option_value[PROP_VALUE_MAX];
char key[PROP_NAME_MAX];
char *p = key, *end = key + PROP_NAME_MAX;
/* add "mesa." prefix if necessary: */
if (strstr(name, "MESA_") != name)
p += strlcpy(p, "mesa.", end - p);
@ -191,12 +191,12 @@ os_get_android_option(const char *name)
/* prefixes to search sorted by preference */
const char *prefices[] = { "debug.", "vendor.", "" };
char full_key[PROPERTY_KEY_MAX];
char full_key[PROP_NAME_MAX];
int len = 0;
for (int i = 0; i < ARRAY_SIZE(prefices); i++) {
strlcpy(full_key, prefices[i], PROPERTY_KEY_MAX);
strlcat(full_key, key, PROPERTY_KEY_MAX);
len = property_get(full_key, os_android_option_value, NULL);
strlcpy(full_key, prefices[i], PROP_NAME_MAX);
strlcat(full_key, key, PROP_NAME_MAX);
len = __system_property_get(full_key, os_android_option_value);
if (len > 0)
return os_android_option_value;
}