auto import from //depot/cupcake/@135843
diff --git a/core/jni/android_os_SystemProperties.cpp b/core/jni/android_os_SystemProperties.cpp
new file mode 100644
index 0000000..ca4fa11
--- /dev/null
+++ b/core/jni/android_os_SystemProperties.cpp
@@ -0,0 +1,108 @@
+/* //device/libs/android_runtime/android_os_SystemProperties.cpp
+**
+** Copyright 2006, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#include "cutils/properties.h"
+#include "jni.h"
+#include "android_runtime/AndroidRuntime.h"
+#include <nativehelper/JNIHelp.h>
+
+namespace android
+{
+
+static jstring SystemProperties_getSS(JNIEnv *env, jobject clazz,
+ jstring keyJ, jstring defJ)
+{
+ int len;
+ const char* key;
+ char buf[PROPERTY_VALUE_MAX];
+ jstring rvJ = NULL;
+
+ if (keyJ == NULL) {
+ jniThrowException(env, "java/lang/NullPointerException",
+ "key must not be null.");
+ goto error;
+ }
+
+ key = env->GetStringUTFChars(keyJ, NULL);
+
+ len = property_get(key, buf, "");
+ if ((len <= 0) && (defJ != NULL)) {
+ rvJ = defJ;
+ } else if (len >= 0) {
+ rvJ = env->NewStringUTF(buf);
+ } else {
+ rvJ = env->NewStringUTF("");
+ }
+
+ env->ReleaseStringUTFChars(keyJ, key);
+
+error:
+ return rvJ;
+}
+
+static jstring SystemProperties_getS(JNIEnv *env, jobject clazz,
+ jstring keyJ)
+{
+ return SystemProperties_getSS(env, clazz, keyJ, NULL);
+}
+
+static void SystemProperties_set(JNIEnv *env, jobject clazz,
+ jstring keyJ, jstring valJ)
+{
+ int err;
+ const char* key;
+ const char* val;
+
+ if (keyJ == NULL) {
+ jniThrowException(env, "java/lang/NullPointerException",
+ "key must not be null.");
+ return ;
+ }
+ key = env->GetStringUTFChars(keyJ, NULL);
+
+ if (valJ == NULL) {
+ val = ""; /* NULL pointer not allowed here */
+ } else {
+ val = env->GetStringUTFChars(valJ, NULL);
+ }
+
+ err = property_set(key, val);
+
+ env->ReleaseStringUTFChars(keyJ, key);
+
+ if (valJ != NULL) {
+ env->ReleaseStringUTFChars(valJ, val);
+ }
+}
+
+static JNINativeMethod method_table[] = {
+ { "native_get", "(Ljava/lang/String;)Ljava/lang/String;",
+ (void*) SystemProperties_getS },
+ { "native_get", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;",
+ (void*) SystemProperties_getSS },
+ { "native_set", "(Ljava/lang/String;Ljava/lang/String;)V",
+ (void*) SystemProperties_set },
+};
+
+int register_android_os_SystemProperties(JNIEnv *env)
+{
+ return AndroidRuntime::registerNativeMethods(
+ env, "android/os/SystemProperties",
+ method_table, NELEM(method_table));
+}
+
+};