diff options
author | 2024-04-23 21:46:22 +0000 | |
---|---|---|
committer | 2024-04-23 21:46:22 +0000 | |
commit | d9519c346f7769ae0571b1fd48d8f11ab8469310 (patch) | |
tree | 01a4422ec951a3322942187c2279e678a11fab7c | |
parent | 2ad6d539c2b3e3d1cf0fb43a3f1cff70106d19c2 (diff) |
SystemProperties.set(): more exception message detail.
Bug: https://issuetracker.google.com/336223505
Change-Id: I5bbee1c036565d117e95941b8751f26494390be0
-rw-r--r-- | core/jni/android_os_SystemProperties.cpp | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/core/jni/android_os_SystemProperties.cpp b/core/jni/android_os_SystemProperties.cpp index 7f3b32e1abed..88e6fa3028ad 100644 --- a/core/jni/android_os_SystemProperties.cpp +++ b/core/jni/android_os_SystemProperties.cpp @@ -190,15 +190,31 @@ void SystemProperties_set(JNIEnv *env, jobject clazz, jstring keyJ, return; } } + // Calling SystemProperties.set() with a null value is equivalent to an + // empty string, but this is not true for the underlying libc function. + const char* value_c_str = value ? value->c_str() : ""; + // Explicitly clear errno so we can recognize __system_property_set() + // failures from failed system calls (as opposed to "init rejected your + // request" failures). + errno = 0; bool success; #if defined(__BIONIC__) - success = !__system_property_set(key.c_str(), value ? value->c_str() : ""); + success = !__system_property_set(key.c_str(), value_c_str); #else - success = android::base::SetProperty(key.c_str(), value ? value->c_str() : ""); + success = android::base::SetProperty(key.c_str(), value_c_str); #endif if (!success) { - jniThrowException(env, "java/lang/RuntimeException", - "failed to set system property (check logcat for reason)"); + if (errno != 0) { + jniThrowExceptionFmt(env, "java/lang/RuntimeException", + "failed to set system property \"%s\" to \"%s\": %m", + key.c_str(), value_c_str); + } else { + // Must have made init unhappy, which will have logged something, + // but there's no API to ask for more detail. + jniThrowExceptionFmt(env, "java/lang/RuntimeException", + "failed to set system property \"%s\" to \"%s\" (check logcat for reason)", + key.c_str(), value_c_str); + } } } |