java_lang_System.cpp revision e22935d3c7040c22b48d53bd18878844f381287c
1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/* 2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License. 6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at 7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * 10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and 14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License. 15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */ 16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 17abf945fb9ce99d8c2769ac5b2691b2732fa59887Elliott Hughes#define LOG_TAG "System" 18abf945fb9ce99d8c2769ac5b2691b2732fa59887Elliott Hughes 19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include "JNIHelp.h" 20e22935d3c7040c22b48d53bd18878844f381287cElliott Hughes#include "JniConstants.h" 2105960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes#include "ScopedUtfChars.h" 22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <stdlib.h> 24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project#include <string.h> 25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 2605960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughesstatic jstring System_getEnvByName(JNIEnv* env, jclass, jstring javaName) { 2705960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes ScopedUtfChars name(env, javaName); 2805960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes if (name.c_str() == NULL) { 2905960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes return NULL; 30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project } 3105960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes return env->NewStringUTF(getenv(name.c_str())); 32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 3405960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes// Pointer to complete environment. 35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectextern char** environ; 36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 3705960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughesstatic jstring System_getEnvByIndex(JNIEnv* env, jclass, jint index) { 3805960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes return env->NewStringUTF(environ[index]); 39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 4105960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes// Sets a field via JNI. Used for the standard streams, which are read-only otherwise. 4205960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughesstatic void System_setFieldImpl(JNIEnv* env, jclass clazz, 4305960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes jstring javaName, jstring javaSignature, jobject object) { 4405960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes ScopedUtfChars name(env, javaName); 4505960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes if (name.c_str() == NULL) { 4605960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes return; 4705960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes } 4805960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes ScopedUtfChars signature(env, javaSignature); 4905960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes if (signature.c_str() == NULL) { 5005960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes return; 5105960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes } 5205960876dff6a5b686821eed8f7ae7cef5af4f50Elliott Hughes jfieldID fieldID = env->GetStaticFieldID(clazz, name.c_str(), signature.c_str()); 5394367e0ead84fc2228799a78ec207ea52e203f1aElliott Hughes env->SetStaticObjectField(clazz, fieldID, object); 54adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project 56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectstatic JNINativeMethod gMethods[] = { 57e22935d3c7040c22b48d53bd18878844f381287cElliott Hughes NATIVE_METHOD(System, getEnvByIndex, "(I)Ljava/lang/String;"), 58e22935d3c7040c22b48d53bd18878844f381287cElliott Hughes NATIVE_METHOD(System, getEnvByName, "(Ljava/lang/String;)Ljava/lang/String;"), 59e22935d3c7040c22b48d53bd18878844f381287cElliott Hughes NATIVE_METHOD(System, setFieldImpl, "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V"), 60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}; 6194367e0ead84fc2228799a78ec207ea52e203f1aElliott Hughesint register_java_lang_System(JNIEnv* env) { 62c08f9fb2a3be82bb1a3f477ca1524ddcf7a1d4b8Elliott Hughes return jniRegisterNativeMethods(env, "java/lang/System", gMethods, NELEM(gMethods)); 63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project} 64