summaryrefslogtreecommitdiff
path: root/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c')
-rw-r--r--libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c b/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
index 0edbb2e965a..05b0d960e03 100644
--- a/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
+++ b/libjava/classpath/native/jni/java-lang/java_lang_VMSystem.c
@@ -154,3 +154,35 @@ Java_java_lang_VMSystem_getenv (JNIEnv * env,
JCL_free_cstring (env, jname, cname);
return (*env)->NewStringUTF (env, envname);
}
+
+JNIEXPORT jobject JNICALL
+Java_java_lang_VMSystem_environ (JNIEnv *env,
+ jclass klass __attribute__((__unused__)))
+{
+ char **env_pointer;
+ jobject variables;
+ jclass list_class;
+ jmethodID list_constructor;
+ jmethodID add;
+
+ list_class = (*env)->FindClass(env, "java/util/LinkedList");
+ if (list_class == NULL)
+ return NULL;
+ list_constructor = (*env)->GetMethodID(env, list_class, "<init>", "()V");
+ if (list_constructor == NULL)
+ return NULL;
+ variables = (*env)->NewObject(env, list_class, list_constructor);
+ if (variables == NULL)
+ return NULL;
+ add = (*env)->GetMethodID(env, list_class, "add", "(Ljava/lang/Object;)Z");
+ if (add == NULL)
+ return NULL;
+ env_pointer = environ;
+ while (*env_pointer != NULL)
+ {
+ jstring string = (*env)->NewStringUTF(env, *env_pointer);
+ (*env)->CallBooleanMethod(env, variables, add, string);
+ ++env_pointer;
+ }
+ return variables;
+}