diff options
author | Sam Ruby <rubys@php.net> | 2000-03-15 10:35:38 +0000 |
---|---|---|
committer | Sam Ruby <rubys@php.net> | 2000-03-15 10:35:38 +0000 |
commit | 3e5398ffba9cc4752428bcf89180db59d060e6a7 (patch) | |
tree | cbc68dd2a1a96781fc7f22ae6ec4a1bfc1499864 /ext/rpc/java/java.c | |
parent | 6ac297fbc1f0ae227b9e3f68b5508a3d5d096817 (diff) | |
download | php-git-3e5398ffba9cc4752428bcf89180db59d060e6a7.tar.gz |
Cleanup, better error recovery, easier configuration
Diffstat (limited to 'ext/rpc/java/java.c')
-rw-r--r-- | ext/rpc/java/java.c | 38 |
1 files changed, 24 insertions, 14 deletions
diff --git a/ext/rpc/java/java.c b/ext/rpc/java/java.c index 286783c637..9b0c2c53c2 100644 --- a/ext/rpc/java/java.c +++ b/ext/rpc/java/java.c @@ -85,10 +85,12 @@ static PHP_INI_MH(OnIniUpdate) { PHP_INI_BEGIN() PHP_INI_ENTRY1("java.class.path", NULL, PHP_INI_ALL, OnIniUpdate, &classpath) +#ifndef JNI_11 PHP_INI_ENTRY1("java.home", NULL, PHP_INI_ALL, OnIniUpdate, &javahome) PHP_INI_ENTRY1("java.library.path", NULL, PHP_INI_ALL, OnIniUpdate, &libpath) +#endif PHP_INI_END() /***************************************************************************/ @@ -143,12 +145,6 @@ static int jvm_create() { iniUpdated=0; - if (!classpath) classpath = getenv("CLASSPATH"); - -#ifndef PHP_WIN32 - if (!libpath) libpath = getenv("LD_LIBRARY_PATH"); -#endif - #ifdef JNI_12 vm_args.version = JNI_VERSION_1_2; @@ -185,14 +181,19 @@ static int jvm_create() { local_php_reflect = (*jenv)->FindClass(jenv, "net/php/reflect"); error = (*jenv)->ExceptionOccurred(jenv); if (error) { - jclass errClass = (*jenv)->GetObjectClass(jenv, error); - jmethodID toString = (*jenv)->GetMethodID(jenv, errClass, "toString", + jclass errClass; + jmethodID toString; + jobject errString; + const char *errAsUTF; + jboolean isCopy; + (*jenv)->ExceptionClear(jenv); + errClass = (*jenv)->GetObjectClass(jenv, error); + toString = (*jenv)->GetMethodID(jenv, errClass, "toString", "()Ljava/lang/String;"); - jobject errString = (*jenv)->CallObjectMethod(jenv, error, toString); - const char *errAsUTF = (*jenv)->GetStringUTFChars(jenv, errString, 0); + errString = (*jenv)->CallObjectMethod(jenv, error, toString); + errAsUTF = (*jenv)->GetStringUTFChars(jenv, errString, &isCopy); php_error(E_ERROR, "%s", errAsUTF); - (*jenv)->ReleaseStringUTFChars(jenv, error, errAsUTF); - (*jenv)->ExceptionClear(jenv); + if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, error, errAsUTF); jvm_destroy(); return -1; } @@ -407,6 +408,14 @@ PHP_MINIT_FUNCTION(java) { le_jobject = register_list_destructors(_php_java_destructor,NULL); REGISTER_INI_ENTRIES(); + + if (!classpath) classpath = getenv("CLASSPATH"); + + if (!libpath) { + PLS_FETCH(); + libpath=PG(extension_dir); + } + return SUCCESS; } @@ -444,13 +453,14 @@ DLEXPORT zend_module_entry *get_module(void) { return &java_module_entry; } JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString (JNIEnv *jenv, jclass self, jlong result, jstring value) { - const char *valueAsUTF = (*jenv)->GetStringUTFChars(jenv, value, 0); + jboolean isCopy; + const char *valueAsUTF = (*jenv)->GetStringUTFChars(jenv, value, &isCopy); pval *presult = (pval*)(long)result; presult->type=IS_STRING; presult->value.str.len=strlen(valueAsUTF); presult->value.str.val=emalloc(presult->value.str.len+1); strcpy(presult->value.str.val, valueAsUTF); - (*jenv)->ReleaseStringUTFChars(jenv, value, valueAsUTF); + if (isCopy) (*jenv)->ReleaseStringUTFChars(jenv, value, valueAsUTF); } JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong |