⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 java.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
  pval *object = property_reference->object;  zend_overloaded_element *function_name = (zend_overloaded_element *)    property_reference->elements_list->tail->data;  int arg_count = ZEND_NUM_ARGS();  jlong result = 0;  pval **arguments = (pval **) emalloc(sizeof(pval *)*arg_count);  getParametersArray(ht, arg_count, arguments);  if (!JG(jenv)) jvm_create(TSRMLS_C);  if (!JG(jenv)) return;  jenv = JG(jenv);  if (!strcmp("java", Z_STRVAL(function_name->element))) {    /* construct a Java object:       First argument is the class name.  Any additional arguments will       be treated as constructor parameters. */    jmethodID co = (*jenv)->GetMethodID(jenv, JG(reflect_class), "CreateObject",      "(Ljava/lang/String;[Ljava/lang/Object;J)V");    jstring className;    result = (jlong)(long)object;    if (ZEND_NUM_ARGS() < 1) {      php_error(E_ERROR, "Missing classname in new Java() call");      return;    }    className=(*jenv)->NewStringUTF(jenv, Z_STRVAL_P(arguments[0]));    (*jenv)->CallVoidMethod(jenv, JG(php_reflect), co,      className, _java_makeArray(arg_count-1, arguments+1 TSRMLS_CC), result);    (*jenv)->DeleteLocalRef(jenv, className);  } else {    pval **handle;    int type;    jobject obj;    jstring method;    /* invoke a method on the given object */    jmethodID invoke = (*jenv)->GetMethodID(jenv, JG(reflect_class), "Invoke",      "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;J)V");    zend_hash_index_find(Z_OBJPROP_P(object), 0, (void**) &handle);    obj = zend_list_find(Z_LVAL_PP(handle), &type);    method = (*jenv)->NewStringUTF(jenv, Z_STRVAL(function_name->element));    result = (jlong)(long)return_value;    (*jenv)->CallVoidMethod(jenv, JG(php_reflect), invoke,      obj, method, _java_makeArray(arg_count, arguments TSRMLS_CC), result);    (*jenv)->DeleteLocalRef(jenv, method);  }  efree(arguments);  pval_destructor(&function_name->element);  checkError((pval*)(long)result);}/* }}} *//***************************************************************************//* {{{ proto object java_last_exception_get(void)	 Get last Java exception */PHP_FUNCTION(java_last_exception_get){  jlong result = 0;  jmethodID lastEx;  if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;  result = (jlong)(long)return_value;    lastEx = (*JG(jenv))->GetMethodID(JG(jenv), JG(reflect_class),           "lastException", "(J)V");  (*JG(jenv))->CallVoidMethod(JG(jenv), JG(php_reflect), lastEx, result);}/* }}} *//***************************************************************************//* {{{ proto void java_last_exception_clear(void)	 Clear last java extension */PHP_FUNCTION(java_last_exception_clear){  jlong result = 0;  jmethodID clearEx;  if (ZEND_NUM_ARGS()!=0) WRONG_PARAM_COUNT;  result = (jlong)(long)return_value;    clearEx = (*JG(jenv))->GetMethodID(JG(jenv), JG(reflect_class),           "clearException", "()V");  (*JG(jenv))->CallVoidMethod(JG(jenv), JG(php_reflect), clearEx);}/* }}} *//***************************************************************************//* {{{ _java_getset_property */static pval _java_getset_property  (zend_property_reference *property_reference, jobjectArray value TSRMLS_DC){  pval presult;  jlong result = 0;  pval **pobject;  jobject obj;  int type;  /* get the property name */  zend_llist_element *element = property_reference->elements_list->head;  zend_overloaded_element *property=(zend_overloaded_element *)element->data;  jstring propName;  JNIEnv *jenv;  jenv = JG(jenv);  propName = (*jenv)->NewStringUTF(jenv, Z_STRVAL(property->element));  /* get the object */  zend_hash_index_find(Z_OBJPROP_P(property_reference->object),    0, (void **) &pobject);  obj = zend_list_find(Z_LVAL_PP(pobject), &type);  result = (jlong)(long) &presult;  Z_TYPE(presult) = IS_NULL;  if (!obj || (type!=le_jobject)) {    php_error(E_ERROR,      "Attempt to access a Java property on a non-Java object");  } else {    /* invoke the method */    jmethodID gsp = (*jenv)->GetMethodID(jenv, JG(reflect_class), "GetSetProp",      "(Ljava/lang/Object;Ljava/lang/String;[Ljava/lang/Object;J)V");    (*jenv)->CallVoidMethod       (jenv, JG(php_reflect), gsp, obj, propName, value, result);  }  (*jenv)->DeleteLocalRef(jenv, propName);  pval_destructor(&property->element);  return presult;}/* }}} *//* {{{ java_get_property_handler */pval java_get_property_handler(zend_property_reference *property_reference){  pval presult;  TSRMLS_FETCH();  presult = _java_getset_property(property_reference, 0 TSRMLS_CC);  checkError(&presult);  return presult;}/* }}} *//* {{{ java_set_property_handler */int java_set_property_handler(zend_property_reference *property_reference, pval *value){  pval presult;  TSRMLS_FETCH();  presult = _java_getset_property(property_reference, _java_makeArray(1, &value TSRMLS_CC) TSRMLS_CC);  return checkError(&presult) ? FAILURE : SUCCESS;}/* }}} *//***************************************************************************//* {{{ _php_java_destructor */static void _php_java_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC){	void *jobject = (void *)rsrc->ptr;	if (JG(jenv)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), jobject);}/* }}} *//* {{{ alloc_java_globals_ctor */static void alloc_java_globals_ctor(zend_java_globals *java_globals TSRMLS_DC){	memset(java_globals, 0, sizeof(zend_java_globals));}/* }}} *//* {{{ PHP_MINIT_FUNCTION */PHP_MINIT_FUNCTION(java){  INIT_OVERLOADED_CLASS_ENTRY(java_class_entry, "java", NULL,    java_call_function_handler,    java_get_property_handler,    java_set_property_handler);  zend_register_internal_class(&java_class_entry TSRMLS_CC);  le_jobject = zend_register_list_destructors_ex(_php_java_destructor, NULL, "java", module_number);  REGISTER_INI_ENTRIES();  if (!classpath) classpath = getenv("CLASSPATH");  if (!libpath) {    libpath=PG(extension_dir);  }  ZEND_INIT_MODULE_GLOBALS(java, alloc_java_globals_ctor, NULL);  return SUCCESS;}/* }}} *//* {{{ PHP_MSHUTDOWN_FUNCTION */PHP_MSHUTDOWN_FUNCTION(java) {  UNREGISTER_INI_ENTRIES();  if (JG(jvm)) jvm_destroy(TSRMLS_C);  return SUCCESS;}/* }}} */function_entry java_functions[] = {  PHP_FE(java_last_exception_get, NULL)  PHP_FE(java_last_exception_clear, NULL)  {NULL, NULL, NULL}};static PHP_MINFO_FUNCTION(java) {  DISPLAY_INI_ENTRIES();}zend_module_entry java_module_entry = {    STANDARD_MODULE_HEADER,	"java",	java_functions,	PHP_MINIT(java),	PHP_MSHUTDOWN(java),	NULL,	NULL,	PHP_MINFO(java),	NO_VERSION_YET,	STANDARD_MODULE_PROPERTIES};ZEND_GET_MODULE(java)/***************************************************************************//* {{{ Java_net_php_reflect_setResultFromString  */JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromString  (JNIEnv *jenv, jclass self, jlong result, jbyteArray jvalue){  jboolean isCopy;  jbyte *value = (*jenv)->GetByteArrayElements(jenv, jvalue, &isCopy);  pval *presult = (pval*)(long)result;  Z_TYPE_P(presult)=IS_STRING;  Z_STRLEN_P(presult)=(*jenv)->GetArrayLength(jenv, jvalue);  Z_STRVAL_P(presult)=emalloc(Z_STRLEN_P(presult)+1);  memcpy(Z_STRVAL_P(presult), value, Z_STRLEN_P(presult));  Z_STRVAL_P(presult)[Z_STRLEN_P(presult)]=0;  if (isCopy) (*jenv)->ReleaseByteArrayElements(jenv, jvalue, value, 0);}/* }}} *//* {{{ Java_net_php_reflect_setResultFromLong */JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromLong  (JNIEnv *jenv, jclass self, jlong result, jlong value){  pval *presult = (pval*)(long)result;  Z_TYPE_P(presult)=IS_LONG;  Z_LVAL_P(presult)=(long)value;}/* }}} *//* {{{ Java_net_php_reflect_setResultFromDouble  */JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromDouble  (JNIEnv *jenv, jclass self, jlong result, jdouble value){  pval *presult = (pval*)(long)result;  Z_TYPE_P(presult)=IS_DOUBLE;  Z_DVAL_P(presult)=value;}/* }}} *//* {{{ Java_net_php_reflect_setResultFromBoolean */JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromBoolean  (JNIEnv *jenv, jclass self, jlong result, jboolean value){  pval *presult = (pval*)(long)result;  Z_TYPE_P(presult)=IS_BOOL;  Z_LVAL_P(presult)=value;}/* }}} *//* {{{ Java_net_php_reflect_setResultFromObject  */JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromObject  (JNIEnv *jenv, jclass self, jlong result, jobject value){  /* wrapper the java object in a pval object */  pval *presult = (pval*)(long)result;  pval *handle;  TSRMLS_FETCH();    if (Z_TYPE_P(presult) != IS_OBJECT) {	object_init_ex(presult, &java_class_entry);	presult->is_ref=1;    presult->refcount=1;  }  ALLOC_ZVAL(handle);  Z_TYPE_P(handle) = IS_LONG;  Z_LVAL_P(handle) =    zend_list_insert((*jenv)->NewGlobalRef(jenv, value), le_jobject);  pval_copy_constructor(handle);  INIT_PZVAL(handle);  zend_hash_index_update(Z_OBJPROP_P(presult), 0, &handle, sizeof(pval *), NULL);}/* }}} *//* {{{ Java_net_php_reflect_setResultFromArray */JNIEXPORT void JNICALL Java_net_php_reflect_setResultFromArray  (JNIEnv *jenv, jclass self, jlong result){  array_init( (pval*)(long)result );}/* }}} *//* {{{ Java_net_php_reflect_nextElement */JNIEXPORT jlong JNICALL Java_net_php_reflect_nextElement  (JNIEnv *jenv, jclass self, jlong array){  pval *result;  pval *handle = (pval*)(long)array;  ALLOC_ZVAL(result);  zend_hash_next_index_insert(Z_ARRVAL_P(handle), &result, sizeof(zval *), NULL);  return (jlong)(long)result;}/* }}} *//* {{{ Java_net_php_reflect_hashIndexUpdate */JNIEXPORT jlong JNICALL Java_net_php_reflect_hashIndexUpdate  (JNIEnv *jenv, jclass self, jlong array, jlong key){  pval *result;  pval *handle = (pval*)(long)array;  ALLOC_ZVAL(result);  zend_hash_index_update(Z_ARRVAL_P(handle), (unsigned long)key,     &result, sizeof(zval *), NULL);  return (jlong)(long)result;}/* }}} *//* {{{ Java_net_php_reflect_hashUpdate */JNIEXPORT jlong JNICALL Java_net_php_reflect_hashUpdate  (JNIEnv *jenv, jclass self, jlong array, jbyteArray key){  pval *result;  pval pkey;  pval *handle = (pval*)(long)array;  ALLOC_ZVAL(result);  Java_net_php_reflect_setResultFromString(jenv, self, (jlong)(long)&pkey, key);  zend_hash_update(Z_ARRVAL_P(handle), Z_STRVAL(pkey), Z_STRLEN(pkey)+1,    &result, sizeof(zval *), NULL);  return (jlong)(long)result;}/* }}} *//* {{{ Java_net_php_reflect_setException  */JNIEXPORT void JNICALL Java_net_php_reflect_setException  (JNIEnv *jenv, jclass self, jlong result, jbyteArray value){  pval *presult = (pval*)(long)result;  Java_net_php_reflect_setResultFromString(jenv, self, result, value);  Z_TYPE_P(presult)=IS_EXCEPTION;}/* }}} *//* {{{ Java_net_php_reflect_setEnv */JNIEXPORT void JNICALL Java_net_php_reflect_setEnv  (JNIEnv *newJenv, jclass self TSRMLS_DC){  jobject local_php_reflect;  JG(jenv)=newJenv;  if (!self) self = (*JG(jenv))->FindClass(JG(jenv), "net/php/reflect");  JG(reflect_class) = self;  if (JG(php_reflect)) (*JG(jenv))->DeleteGlobalRef(JG(jenv), JG(php_reflect));  local_php_reflect = (*JG(jenv))->AllocObject(JG(jenv), JG(reflect_class));  JG(php_reflect) = (*JG(jenv))->NewGlobalRef(JG(jenv), local_php_reflect);}/* }}} *//* * Local variables: * tab-width: 4 * c-basic-offset: 4 * End: * vim600: sw=4 ts=4 fdm=marker * vim<600: sw=4 ts=4 */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -