summaryrefslogtreecommitdiff
path: root/ext/rpc/java/java.c
diff options
context:
space:
mode:
authorSam Ruby <rubys@php.net>2000-03-15 10:35:38 +0000
committerSam Ruby <rubys@php.net>2000-03-15 10:35:38 +0000
commit3e5398ffba9cc4752428bcf89180db59d060e6a7 (patch)
treecbc68dd2a1a96781fc7f22ae6ec4a1bfc1499864 /ext/rpc/java/java.c
parent6ac297fbc1f0ae227b9e3f68b5508a3d5d096817 (diff)
downloadphp-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.c38
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