Menu

Diff of /trunk/php-java-bridge/java.c [r320] .. [r321]  Maximize  Restore

Switch to side-by-side view

--- a/trunk/php-java-bridge/java.c
+++ b/trunk/php-java-bridge/java.c
@@ -26,7 +26,7 @@
 
 #ifdef __MINGW32__
 static int java_errno=0;
-int *__errno (void) { return &java_errno; }
+int *__errno (void) { java_errno = GetLastError(); return &java_errno; }
 #define php_info_print_table_row(a, b, c) \
    php_info_print_table_row_ex(a, "java", b, c)
 #endif
@@ -51,9 +51,7 @@
 	  if((*JG(jenv))->s) free((*JG(jenv))->s);
 	  if((*JG(jenv))->send) free((*JG(jenv))->send);
 	  if((*JG(jenv))->server_name) free((*JG(jenv))->server_name);
-	  if((*JG(jenv))->servlet_redirect) free((*JG(jenv))->servlet_redirect);
-	  if((*JG(jenv))->cookie_name) free((*JG(jenv))->cookie_name);
-	  if((*JG(jenv))->cookie_value) free((*JG(jenv))->cookie_value);
+	  if((*JG(jenv))->servlet_ctx) free((*JG(jenv))->servlet_ctx);
 	  free(*JG(jenv));
 	}
 	free(JG(jenv));
@@ -63,27 +61,32 @@
   return SUCCESS;
 }
 
+static void last_exception_get(proxyenv *jenv, zval**return_value)
+{
+  (*jenv)->writeInvokeBegin(jenv, 0, "lastException", 0, 'P', *return_value);
+  (*jenv)->writeInvokeEnd(jenv);
+}
 EXT_FUNCTION(EXT_GLOBAL(last_exception_get))
 {
+  if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
   proxyenv *jenv = EXT_GLOBAL(connect_to_server)(TSRMLS_C);
   if(!jenv) {RETURN_NULL();}
 
+  last_exception_get(jenv, &return_value);
+}
+
+static void last_exception_clear(proxyenv*jenv, zval**return_value) {
+  (*jenv)->writeInvokeBegin(jenv, 0, "lastException", 0, 'P', *return_value);
+  (*jenv)->writeObject(jenv, 0);
+  (*jenv)->writeInvokeEnd(jenv);
+}
+EXT_FUNCTION(EXT_GLOBAL(last_exception_clear))
+{
   if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
-
-  (*jenv)->writeInvokeBegin(jenv, 0, "lastException", 0, 'P', return_value);
-  (*jenv)->writeInvokeEnd(jenv);
-}
-
-EXT_FUNCTION(EXT_GLOBAL(last_exception_clear))
-{
   proxyenv *jenv = EXT_GLOBAL(connect_to_server)(TSRMLS_C);
   if(!jenv) {RETURN_NULL();}
 
-  if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;
-
-  (*jenv)->writeInvokeBegin(jenv, 0, "lastException", 0, 'P', return_value);
-  (*jenv)->writeObject(jenv, 0);
-  (*jenv)->writeInvokeEnd(jenv);
+  last_exception_clear(jenv, &return_value);
 }
 
 EXT_FUNCTION(EXT_GLOBAL(set_file_encoding))
@@ -103,6 +106,8 @@
 }
 
 static void require(INTERNAL_FUNCTION_PARAMETERS) {
+  static const char ext_dir[] = "extension_dir";
+  char *ext = php_ini_string((char*)ext_dir, sizeof ext_dir, 0);
   zval **path;
   proxyenv *jenv = EXT_GLOBAL(connect_to_server)(TSRMLS_C);
   if(!jenv) {RETURN_NULL();}
@@ -118,6 +123,7 @@
   (*jenv)->writeInvokeBegin(jenv, 0, "setLibraryPath", 0, 'I', return_value);
 #endif
   (*jenv)->writeString(jenv, Z_STRVAL_PP(path), Z_STRLEN_PP(path));
+  (*jenv)->writeString(jenv, ext, strlen(ext));
   (*jenv)->writeInvokeEnd(jenv);
 }
 EXT_FUNCTION(EXT_GLOBAL(set_library_path))
@@ -152,7 +158,7 @@
   class = 0;
   EXT_GLOBAL(get_jobject_from_object)(*pclass, &class TSRMLS_CC);
   if(!class) {
-	zend_error(E_ERROR, "Arument #2 for %s() must be a "/**/EXT_NAME()/**/" object", get_active_function_name(TSRMLS_C));
+	zend_error(E_ERROR, "Argument #2 for %s() must be a "/**/EXT_NAME()/**/" object", get_active_function_name(TSRMLS_C));
 	return;
   }
 
@@ -213,6 +219,7 @@
 
   (*jenv)->writeInvokeBegin(jenv, 0, "reset", 0, 'I', return_value);
   (*jenv)->writeInvokeEnd(jenv);
+  php_error(E_WARNING, "php_mod_"/**/EXT_NAME()/**/"(%d): Your script has called the privileged procedure \""/**/EXT_NAME()/**/"_reset()\" which resets the "/**/EXT_NAME()/**/" backend to its initial state. Therefore all "/**/EXT_NAME()/**/" session variables and all caches are gone.", 18);
 }
 
 
@@ -241,8 +248,8 @@
   (*jenv)->writeObject(jenv, obj);
   (*jenv)->writeInvokeEnd(jenv);
 #else
-  ZVAL_NULL(return_value);
-  REPLACE_ZVAL_VALUE(&return_value, *pobj, 1);
+  *return_value = **pobj;
+  zval_copy_ctor(return_value);
 #endif
 }
 
@@ -260,8 +267,9 @@
 {
   char *string_key;
   ulong num_key;
-  zval **pobj, **pfkt, **pclass;
+  zval **pobj, **pfkt, **pclass, **val;
   long obj, class = 0;
+  short eval_class_array = 0;
   int key_type;
   proxyenv *jenv;
   int argc = ZEND_NUM_ARGS();
@@ -273,49 +281,159 @@
   jenv = EXT_GLOBAL(connect_to_server)(TSRMLS_C);
   if(!jenv) RETURN_NULL();
 
-  if (argc>2) {
-	EXT_GLOBAL(get_jobject_from_object)(*pclass, &class TSRMLS_CC);
-	if(!class) {
-	  zend_error(E_ERROR, "Argument #3 for %s() must be a "/**/EXT_NAME()/**/" object", get_active_function_name(TSRMLS_C));
-	  return;
-	}
-  }
-	
+
+  if (argc>0 && *pobj && Z_TYPE_PP(pobj) == IS_OBJECT) {
+	zval_add_ref(pobj);
+  }
+
+  (*jenv)->writeInvokeBegin(jenv, 0, "makeClosure", 0, 'I', return_value);
+  (*jenv)->writeLong(jenv, (argc==0||Z_TYPE_PP(pobj)==IS_NULL)?0:(long)*pobj);
+
+  /* fname -> cname Map */
+  (*jenv)->writeCompositeBegin_h(jenv);
   if(argc>1) {
-	if (Z_TYPE_PP(pfkt) == IS_STRING) {
-	  char *str = Z_STRVAL_PP(pfkt);
-	  size_t length = Z_STRLEN_PP(pfkt);
-	  ALLOC_HASHTABLE(function_mappings);
-	  zend_hash_init(function_mappings, 0, NULL, ZVAL_PTR_DTOR, 0);
-	  zend_hash_add(function_mappings, str, length, str, length, 0);
+	if (Z_TYPE_PP(pfkt) == IS_ARRAY) {
+	  zend_hash_internal_pointer_reset(Z_ARRVAL_PP(pfkt));
+	  while ((key_type = zend_hash_get_current_key(Z_ARRVAL_PP(pfkt), &string_key, &num_key, 1)) != HASH_KEY_NON_EXISTANT) {
+		if ((zend_hash_get_current_data(Z_ARRVAL_PP(pfkt), (void**)&val) == SUCCESS) && key_type==HASH_KEY_IS_STRING) {
+		  EXT_GLOBAL(get_jobject_from_object)(*val, &class TSRMLS_CC);
+		  if(class) { 
+			size_t len = strlen(string_key);
+			(*jenv)->writePairBegin_s(jenv, string_key, len);
+			(*jenv)->writeString(jenv, string_key, len);
+			(*jenv)->writePairEnd(jenv);
+		  } else {
+			zend_error(E_ERROR, "Argument #2 for %s() must be null, a string, or a map of java->php function names.", get_active_function_name(TSRMLS_C));
+		  }
+		}
+		zend_hash_move_forward(Z_ARRVAL_PP(pfkt));
+	  }
+	} else if (Z_TYPE_PP(pfkt) == IS_STRING) {
+	  (*jenv)->writePairBegin_s(jenv, Z_STRVAL_PP(pfkt), Z_STRLEN_PP(pfkt));
+	  (*jenv)->writeString(jenv, Z_STRVAL_PP(pfkt), Z_STRLEN_PP(pfkt));
+	  (*jenv)->writePairEnd(jenv);
+	}
+  }
+  (*jenv)->writeCompositeEnd(jenv);
+
+
+  /* interfaces */
+  if(argc>2) {
+	(*jenv)->writeCompositeBegin_a(jenv);
+	if(Z_TYPE_PP(pclass) == IS_ARRAY) {
+	  zend_hash_internal_pointer_reset(Z_ARRVAL_PP(pclass));
+	  while ((key_type = zend_hash_get_current_data(Z_ARRVAL_PP(pclass), (void**)&val)) == SUCCESS) {
+		EXT_GLOBAL(get_jobject_from_object)(*val, &class TSRMLS_CC);
+		if(class) { 
+		  (*jenv)->writePairBegin(jenv);
+		  (*jenv)->writeObject(jenv, class);
+		  (*jenv)->writePairEnd(jenv);
+		} else {
+		  zend_error(E_ERROR, "Argument #3 for %s() must be a "/**/EXT_NAME()/**/" interface or an array of interfaces.", get_active_function_name(TSRMLS_C));
+		}
+		zend_hash_move_forward(Z_ARRVAL_PP(pclass));
+	  }
 	} else {
-	  if(!ZVAL_IS_NULL(*pfkt)) WRONG_PARAM_COUNT;		/* FIXME: check array */
-	}
-  } 
-
-  if (Z_TYPE_PP(pobj) == IS_OBJECT) {
-	zval_add_ref(pobj);
-  }
-
-  (*jenv)->writeInvokeBegin(jenv, 0, "makeClosure", 0, 'I', return_value);
-  (*jenv)->writeLong(jenv, (long)*pobj);
-  (*jenv)->writeObject(jenv, class);
-  (*jenv)->writeCompositeBegin_a(jenv);
-
-  if(function_mappings) {
-	zend_hash_internal_pointer_reset(function_mappings);
-	while ((key_type = zend_hash_get_current_key(function_mappings, &string_key, &num_key, 1)) != HASH_KEY_NON_EXISTANT) {
-	  if (key_type == HASH_KEY_IS_STRING) {
+	  EXT_GLOBAL(get_jobject_from_object)(*pclass, &class TSRMLS_CC);
+	  if(class) { 
 		(*jenv)->writePairBegin(jenv);
-		(*jenv)->writeString(jenv, string_key, strlen(string_key));
+		(*jenv)->writeObject(jenv, class);
 		(*jenv)->writePairEnd(jenv);
+	  } else {
+		zend_error(E_ERROR, "Argument #3 for %s() must be a "/**/EXT_NAME()/**/" interface or an array of interfaces.", get_active_function_name(TSRMLS_C));
 	  }
-	  zend_hash_move_forward(function_mappings);
-	}
-  }
-
-  (*jenv)->writeCompositeEnd(jenv);
-  (*jenv)->writeInvokeEnd(jenv);
+	}
+	(*jenv)->writeCompositeEnd(jenv);
+  }
+  (*jenv)->writeInvokeEnd(jenv);
+}
+
+/**
+ * Exception handler for php5
+ */
+EXT_FUNCTION(EXT_GLOBAL(exception_handler))
+{
+  zval **pobj;
+  if (ZEND_NUM_ARGS()!=1 || zend_get_parameters_ex(1, &pobj) == FAILURE) WRONG_PARAM_COUNT;
+  MAKE_STD_ZVAL(JG(exception)); 
+  *JG(exception)=**pobj;
+  zval_copy_ctor(JG(exception));
+
+  RETURN_NULL();
+}
+
+/**
+ * Exception handler for php4
+ */
+static void check_php4_exception() {
+#ifndef ZEND_ENGINE_2
+  last_exception_get(JG(jenv), &JG(exception));
+#endif
+}
+static int allocate_php4_exception() {
+#ifndef ZEND_ENGINE_2
+  MAKE_STD_ZVAL(JG(exception));
+  ZVAL_NULL(JG(exception));
+  last_exception_clear(JG(jenv), &JG(exception));
+  return !setjmp(JG(php4_throw_buf));
+#endif
+  return 1;
+}
+static void call_with_handler(char*handler, const char*name TSRMLS_DC) {
+	if(allocate_php4_exception())
+	  if(zend_eval_string((char*)handler, *JG(retval_ptr), (char*)name TSRMLS_CC)!=SUCCESS) { 
+		php_error(E_WARNING, "php_mod_"/**/EXT_NAME()/**/"(%d): Could not call user function: %s.", 22, Z_STRVAL_P(JG(func)));
+	  }
+}
+static void call_with_params(int count, zval ***func_params TSRMLS_DC) {
+  if(allocate_php4_exception())	/* checked and destroyed in client. handle_exception() */
+	if (call_user_function_ex(0, JG(object), JG(func), JG(retval_ptr), count, func_params, 0, NULL TSRMLS_CC) != SUCCESS) {
+	  php_error(E_WARNING, "php_mod_"/**/EXT_NAME()/**/"(%d): Could not call user function: %s.", 23, Z_STRVAL_P(JG(func)));
+	}
+}
+EXT_FUNCTION(EXT_GLOBAL(call_with_exception_handler))
+{
+  zval ***func_params;
+  HashTable *func_params_ht;
+  int count, current;
+  if (ZEND_NUM_ARGS()==1) {
+	*return_value=*JG(func_params);
+	zval_copy_ctor(return_value);
+	return;
+  }
+  /* for functions in the global environment */
+  if(!*JG(object)) {
+	static const char name[] = "call_with_exception_handler";
+	static const char call_user_funcH[] = "call_user_func_array(";
+	static const char call_user_funcT[] = ","/**/EXT_NAME()/**/"_call_with_exception_handler(true));";
+	char *handler=emalloc(sizeof(call_user_funcH)-1+Z_STRLEN_P(JG(func))+sizeof(call_user_funcT));
+	assert(handler); if(!handler) exit(9);
+	strcpy(handler, call_user_funcH); 
+	strcat(handler, Z_STRVAL_P(JG(func))); 
+	strcat(handler, call_user_funcT);
+
+	MAKE_STD_ZVAL(*JG(retval_ptr)); ZVAL_NULL(*JG(retval_ptr)); 
+	call_with_handler(handler, name TSRMLS_CC);
+	check_php4_exception();
+	efree(handler);
+	RETURN_NULL();
+  }
+  /* for methods */
+  current=0;
+  func_params_ht = Z_ARRVAL_P(JG(func_params));
+  count = zend_hash_num_elements(func_params_ht);
+  func_params = safe_emalloc(sizeof(zval **), count, 0);
+  for (zend_hash_internal_pointer_reset(func_params_ht);
+	   zend_hash_get_current_data(func_params_ht, (void **) &func_params[current]) == SUCCESS;
+	   zend_hash_move_forward(func_params_ht)
+	   ) {
+	current++;
+  }
+
+  call_with_params(count, func_params TSRMLS_CC);
+  check_php4_exception();
+  efree(func_params);
+  RETURN_NULL();
 }
 
 EXT_FUNCTION(EXT_GLOBAL(inspect)) {
@@ -354,6 +472,8 @@
 	EXT_FE(EXT_GLOBAL(get_values), NULL)
 	EXT_FE(EXT_GLOBAL(values), NULL)
 	EXT_FE(EXT_GLOBAL(closure), NULL)
+	EXT_FE(EXT_GLOBAL(call_with_exception_handler), NULL)
+	EXT_FE(EXT_GLOBAL(exception_handler), NULL)
 	EXT_FE(EXT_GLOBAL(inspect), NULL)
 	{NULL, NULL, NULL}
 };
@@ -378,12 +498,15 @@
 int EXT_GLOBAL(ini_updated), EXT_GLOBAL(ini_user), EXT_GLOBAL(ini_set);
 zend_class_entry *EXT_GLOBAL(class_entry);
 zend_class_entry *EXT_GLOBAL(class_class_entry);
+zend_class_entry *EXT_GLOBAL(class_class_entry_jsr);
 zend_class_entry *EXT_GLOBAL(exception_class_entry);
 
 #ifdef ZEND_ENGINE_2
 zend_object_handlers EXT_GLOBAL(handlers);
 #endif
 
+static char off[]="Off";
+static char on[]="On";
 static PHP_INI_MH(OnIniHosts)
 {
 	if (new_value) {
@@ -404,9 +527,10 @@
 	}
 	return SUCCESS;
 }
+
 static PHP_INI_MH(OnIniSockname)
 {
-	if (new_value) {
+	if (new_value && strlen(new_value) && strncasecmp(off, new_value, sizeof(off)-1)) {
 	  if((EXT_GLOBAL (ini_set) &U_SOCKNAME)) free(EXT_GLOBAL(cfg)->sockname);
 	  EXT_GLOBAL(cfg)->sockname=strdup(new_value);
 	  assert(EXT_GLOBAL(cfg)->sockname); if(!EXT_GLOBAL(cfg)->sockname) exit(6);
@@ -481,11 +605,11 @@
 	 PHP_INI_ENTRY(EXT_NAME()/**/".hosts",   NULL, PHP_INI_SYSTEM, OnIniHosts)
 	 PHP_INI_ENTRY(EXT_NAME()/**/".classpath", NULL, PHP_INI_SYSTEM, OnIniClassPath)
 	 PHP_INI_ENTRY(EXT_NAME()/**/".libpath",   NULL, PHP_INI_SYSTEM, OnIniLibPath)
-	 PHP_INI_ENTRY(EXT_NAME()/**/"."/**/EXT_NAME()/**/"",   NULL, PHP_INI_ALL, OnIniJava)
-	 PHP_INI_ENTRY(EXT_NAME()/**/"."/**/EXT_NAME()/**/"_home",   NULL, PHP_INI_ALL, OnIniJavaHome)
+	 PHP_INI_ENTRY(EXT_NAME()/**/"."/**/EXT_NAME()/**/"",   NULL, PHP_INI_SYSTEM, OnIniJava)
+	 PHP_INI_ENTRY(EXT_NAME()/**/"."/**/EXT_NAME()/**/"_home",   NULL, PHP_INI_SYSTEM, OnIniJavaHome)
 
 	 PHP_INI_ENTRY(EXT_NAME()/**/".log_level",   NULL, PHP_INI_ALL, OnIniLogLevel)
-	 PHP_INI_ENTRY(EXT_NAME()/**/".log_file",   NULL, PHP_INI_ALL, OnIniLogFile)
+	 PHP_INI_ENTRY(EXT_NAME()/**/".log_file",   NULL, PHP_INI_SYSTEM, OnIniLogFile)
 PHP_INI_END()
 
 /* vm_alloc_globals_ctor(zend_vm_globals *vm_globals) */
@@ -510,43 +634,6 @@
 
 	EXT_GLOBAL(call_function_handler)(INTERNAL_FUNCTION_PARAM_PASSTHRU,
 								   EXT_NAME(), CONSTRUCTOR, 1,
-								   getThis(),
-								   argc, argv);
-	efree(argv);
-}
-
-EXT_METHOD(EXT, EXT_GLOBAL(class))
-{
-	zval **argv;
-	int argc = ZEND_NUM_ARGS();
-
-	argv = (zval **) safe_emalloc(sizeof(zval *), argc, 0);
-	if (zend_get_parameters_array(ht, argc, argv) == FAILURE) {
-		php_error(E_ERROR, "Couldn't fetch arguments into array.");
-		RETURN_NULL();
-	}
-
-	EXT_GLOBAL(call_function_handler)(INTERNAL_FUNCTION_PARAM_PASSTHRU,
-								   EXT_NAME(), CONSTRUCTOR, 0, 
-								   getThis(),
-								   argc, argv);
-	efree(argv);
-}
-
-// exact copy of vm_class for jsr223 compatibility
-EXT_METHOD(EXT, EXT_GLOBAL_N(class))
-{
-	zval **argv;
-	int argc = ZEND_NUM_ARGS();
-
-	argv = (zval **) safe_emalloc(sizeof(zval *), argc, 0);
-	if (zend_get_parameters_array(ht, argc, argv) == FAILURE) {
-		php_error(E_ERROR, "Couldn't fetch arguments into array.");
-		RETURN_NULL();
-	}
-
-	EXT_GLOBAL(call_function_handler)(INTERNAL_FUNCTION_PARAM_PASSTHRU,
-								   EXT_NAME(), CONSTRUCTOR, 0, 
 								   getThis(),
 								   argc, argv);
 	efree(argv);
@@ -770,9 +857,10 @@
 ZEND_END_ARG_INFO();
 
 function_entry EXT_GLOBAL(class_functions)[] = {
-  EXT_ME(EXT, EXT_GLOBAL_N(class), NULL, 0)
-  EXT_ME(EXT, EXT_GLOBAL(class), NULL, 0)
   EXT_ME(EXT, EXT, NULL, 0)
+  EXT_MALIAS(EXT, EXT_GLOBAL_N(class), EXT, NULL, 0)
+  EXT_MALIAS(EXT, EXT_GLOBAL(class), EXT, NULL, 0)
+  EXT_MALIAS(EXT, __construct, EXT, arginfo_set, ZEND_ACC_PUBLIC)
   EXT_ME(EXT, __call, arginfo_set, ZEND_ACC_PUBLIC)
   EXT_ME(EXT, __tostring, arginfo_zero, ZEND_ACC_PUBLIC)
   EXT_ME(EXT, __get, arginfo_get, ZEND_ACC_PUBLIC)
@@ -1035,13 +1123,19 @@
   char *name = Z_STRVAL(function_name->element);
   int arg_count = ZEND_NUM_ARGS();
   pval **arguments = (pval **) emalloc(sizeof(pval *)*arg_count);
-  short createInstance;
+  short createInstance = 1;
   enum constructor constructor = CONSTRUCTOR_NONE;
+  zend_class_entry *ce = Z_OBJCE_P(getThis()), *parent;
+
+  for(parent=ce; parent->parent; parent=parent->parent)
+	if ((parent==EXT_GLOBAL(class_class_entry)) || ((parent==EXT_GLOBAL(class_class_entry_jsr)))) {
+	  createInstance = 0;		/* do not create an instance for new java_class or new JavaClass */
+	  break;
+	}
 
   getParametersArray(ht, arg_count, arguments);
 
-  createInstance = strcmp(EXT_NAME()/**/"_class", name) && strcmp(EXT_NAME()/**/"class", name);
-  if(!strcmp(EXT_NAME(), name) || !createInstance) constructor = CONSTRUCTOR;
+  if(!strcmp(name, ce->name)) constructor = CONSTRUCTOR;
   EXT_GLOBAL(call_function_handler)(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
 								 name, constructor, createInstance, 
 								 object, 
@@ -1099,7 +1193,6 @@
   static const char server[] = "_SERVER";
   static const char key_hosts[]="java.hosts";
   static const char key_servlet[] = "java.servlet";
-  static const char key_on[] = "On";
   static const char override[] = "X_JAVABRIDGE_OVERRIDE_HOSTS";
   char *hosts;
   if (getenv("SERVER_SOFTWARE")
@@ -1111,7 +1204,7 @@
 						   hosts, strlen(hosts)+1, 
 						   ZEND_INI_SYSTEM, PHP_INI_STAGE_RUNTIME);
 	  zend_alter_ini_entry((char*)key_servlet, sizeof key_servlet, 
-						   (char*)key_on, sizeof key_on, 
+						   (char*)on, sizeof on, 
 						   ZEND_INI_SYSTEM, PHP_INI_STAGE_RUNTIME);
 	}
   }
@@ -1131,10 +1224,12 @@
 
   INIT_CLASS_ENTRY(ce, EXT_NAME()/**/"_class", NULL);
   parent = (zend_class_entry *) EXT_GLOBAL(class_entry);
-  zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC);
+  EXT_GLOBAL(class_class_entry) = 
+	zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC);
   INIT_CLASS_ENTRY(ce, EXT_NAME()/**/"class", NULL);
   parent = (zend_class_entry *) EXT_GLOBAL(class_entry);
-  zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC);
+  EXT_GLOBAL(class_class_entry_jsr) = 
+	zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC);
 
 #else
   zend_class_entry ce;
@@ -1181,7 +1276,8 @@
   /* compatibility with the jsr implementation */
   INIT_CLASS_ENTRY(ce, EXT_NAME()/**/"class", EXT_GLOBAL(class_functions));
   parent = (zend_class_entry *) EXT_GLOBAL(class_entry);
-  zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC);
+  EXT_GLOBAL(class_class_entry_jsr) = 
+	zend_register_internal_class_ex(&ce, parent, NULL TSRMLS_CC);
 
   INIT_CLASS_ENTRY(ce, EXT_NAME()/**/"exception", EXT_GLOBAL(class_functions));
   parent = (zend_class_entry *) EXT_GLOBAL(exception_class_entry);
@@ -1231,13 +1327,12 @@
   php_info_print_table_start();
   php_info_print_table_row(2, EXT_NAME()/**/" support", "Enabled");
   php_info_print_table_row(2, EXT_NAME()/**/" bridge", EXT_GLOBAL(bridge_version));
-#if !defined(__MINGW32__) && EXTENSION == JAVA
+#if EXTENSION == JAVA
   if(is_local) {
 	php_info_print_table_row(2, EXT_NAME()/**/".libpath", EXT_GLOBAL(cfg)->ld_library_path);
 	php_info_print_table_row(2, EXT_NAME()/**/".classpath", EXT_GLOBAL(cfg)->classpath);
   }
 #endif
-#ifndef __MINGW32__
   if(is_local) {
 	php_info_print_table_row(2, EXT_NAME()/**/"."/**/EXT_NAME()/**/"_home", EXT_GLOBAL(cfg)->vm_home);
 	php_info_print_table_row(2, EXT_NAME()/**/"."/**/EXT_NAME(), EXT_GLOBAL(cfg)->vm);
@@ -1247,16 +1342,13 @@
 	  php_info_print_table_row(2, EXT_NAME()/**/".log_file", EXT_GLOBAL(cfg)->logFile);
   }
   php_info_print_table_row(2, EXT_NAME()/**/".log_level", is_level ? EXT_GLOBAL(cfg)->logLevel : "no value (use backend's default level)");
-#endif
   php_info_print_table_row(2, EXT_NAME()/**/".hosts", EXT_GLOBAL(cfg)->hosts);
 #if EXTENSION == JAVA
-  php_info_print_table_row(2, EXT_NAME()/**/".servlet", EXT_GLOBAL(get_servlet_context) ()?"On":"Off");
+  php_info_print_table_row(2, EXT_NAME()/**/".servlet", EXT_GLOBAL(get_servlet_context) ()?on:off);
 #endif
-#ifndef __MINGW32__
   if(!server || is_local) {
 	php_info_print_table_row(2, EXT_NAME()/**/" command", s);
   }
-#endif
   php_info_print_table_row(2, EXT_NAME()/**/" status", server?"running":"not running");
   php_info_print_table_row(2, EXT_NAME()/**/" server", server?server:"localhost");
   php_info_print_table_end();
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.