|  | // Copyright 2005-2006 Google Inc. | 
|  | // All Rights Reserved. | 
|  |  | 
|  | // A slim and portable set of JNI methods for GWT hosted mode | 
|  |  | 
|  | #include <jni.h> | 
|  | #include <stdlib.h> | 
|  |  | 
|  | extern "C" { | 
|  |  | 
|  | /* | 
|  | * Class:     com_google_gwt_dev_shell_LowLevel | 
|  | * Method:    newGlobalRefInt | 
|  | * Signature: (Ljava/lang/Object;)I | 
|  | */ | 
|  | JNIEXPORT jint JNICALL Java_com_google_gwt_dev_shell_LowLevel__1newGlobalRefInt(JNIEnv* env, jclass, jobject o) { | 
|  | return reinterpret_cast<int>(env->NewGlobalRef(o)); | 
|  | } | 
|  | /* | 
|  | * Class:     com_google_gwt_dev_shell_LowLevel | 
|  | * Method:    objFromGlobalRefInt | 
|  | * Signature: (I)Ljava/lang/Object; | 
|  | */ | 
|  | JNIEXPORT jobject JNICALL Java_com_google_gwt_dev_shell_LowLevel__1objFromGlobalRefInt(JNIEnv* env, jclass, jint globalRef) { | 
|  | return reinterpret_cast<jobject>(globalRef); | 
|  | } | 
|  |  | 
|  | /* | 
|  | * Class:     com_google_gwt_dev_shell_LowLevel | 
|  | * Method:    deleteGlobalRefInt | 
|  | * Signature: (I)I | 
|  | */ | 
|  | JNIEXPORT void JNICALL Java_com_google_gwt_dev_shell_LowLevel__1deleteGlobalRefInt(JNIEnv* env, jclass, jint globalRef) { | 
|  | env->DeleteGlobalRef(reinterpret_cast<jobject>(globalRef)); | 
|  | } | 
|  |  | 
|  | /* | 
|  | * Class:     com_google_gwt_dev_shell_LowLevel | 
|  | * Method:    getEnv | 
|  | * Signature: (Ljava/lang/String;)Ljava/lang/String; | 
|  | */ | 
|  | JNIEXPORT jstring JNICALL Java_com_google_gwt_dev_shell_LowLevel__1getEnv(JNIEnv* env, jclass, jstring key) { | 
|  | if (!key) { | 
|  | // null -> null | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | const char* keyPtr = env->GetStringUTFChars(key, 0); | 
|  | if (!keyPtr) { | 
|  | // There will be a pending OutOfMemoryException on this thread, so leave immediately and let it be thrown. | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | const char* valuePtr = getenv(keyPtr); | 
|  | env->ReleaseStringUTFChars(key, keyPtr); | 
|  |  | 
|  | if (!valuePtr) { | 
|  | // no match found | 
|  | return 0; | 
|  | } | 
|  |  | 
|  | // return the result | 
|  | return env->NewStringUTF(valuePtr); | 
|  | } | 
|  |  | 
|  | } // extern "C" |