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

📄 php_domxml.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	if (ctx) {		if (ctx->user) {			zval *wrapper = ctx->user;			zval_ptr_dtor(&wrapper);		}		xmlXPathFreeContext(ctx);	}}#endifstatic void php_free_xml_parser(zend_rsrc_list_entry *rsrc TSRMLS_DC){	xmlParserCtxtPtr parser = (xmlParserCtxtPtr) rsrc->ptr;	if (parser) {		zval *wrapper = dom_object_get_data(parser);		zval_ptr_dtor(&wrapper);		xmlFreeParserCtxt(parser);	}}#if HAVE_DOMXSLTstatic void xsltstylesheet_set_data(void *obj, zval *wrapper){	((xsltStylesheetPtr) obj)->_private = wrapper;}static zval *xsltstylesheet_get_data(void *obj){	return ((zval *) (((xsltStylesheetPtr) obj)->_private));}static void php_free_xslt_stylesheet(zend_rsrc_list_entry *rsrc TSRMLS_DC){	xsltStylesheetPtr sheet = (xsltStylesheetPtr) rsrc->ptr;	zval *wrapper;	int refcount = 0;	if (sheet) {		wrapper = xsltstylesheet_get_data(sheet);		if (wrapper != NULL ) {			refcount = wrapper->refcount;			zval_ptr_dtor(&wrapper);			/* only set it to null, if refcount was 1 before, otherwise it has still needed references */			if (refcount == 1) {				xsltstylesheet_set_data(sheet, NULL);			}		}		xsltFreeStylesheet(sheet);	}}static void *php_xsltstylesheet_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC){	void *obj;	zval **handle;	int type;	if (NULL == wrapper) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "xsltstylesheet_get_object() invalid wrapper object passed");		return NULL;	}	if (Z_TYPE_P(wrapper) != IS_OBJECT) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "wrapper is not an object");		return NULL;	}	if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) ==	FAILURE) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing");		return NULL;	}	obj = zend_list_find(Z_LVAL_PP(handle), &type);	if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing or of invalid type");		return NULL;	}	return obj;}static void php_xsltstylesheet_set_object(zval *wrapper, void *obj, int rsrc_type TSRMLS_DC){	zval *handle, *addr;	MAKE_STD_ZVAL(handle);	Z_TYPE_P(handle) = IS_LONG;	Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);	MAKE_STD_ZVAL(addr);	Z_TYPE_P(addr) = IS_LONG;	Z_LVAL_P(addr) = (long) obj;	zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);	zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);	zval_add_ref(&wrapper);	xsltstylesheet_set_data(obj, wrapper);}#endif  /* HAVE_DOMXSLT *//* Not used? *//*static void *php_xpath_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC){	void *obj;	zval **handle;	int type;	if (NULL == wrapper) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_xpath_get_object() invalid wrapper object passed");		return NULL;	}	if (Z_TYPE_P(wrapper) != IS_OBJECT) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "wrapper is not an object");		return NULL;	}	if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) ==	FAILURE) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing");		return NULL;	}	obj = zend_list_find(Z_LVAL_PP(handle), &type);	if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing or of invalid type");		return NULL;	}	return obj;}*/static zval *php_xpathobject_new(xmlXPathObjectPtr obj, int *found TSRMLS_DC){	zval *wrapper;	MAKE_STD_ZVAL(wrapper);	object_init_ex(wrapper, xpathobject_class_entry);	return (wrapper);}static void *php_xpath_get_context(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC){	void *obj;	zval **handle;	int type;	if (NULL == wrapper) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_xpath_get_context() invalid wrapper object passed");		return NULL;	}	if (Z_TYPE_P(wrapper) != IS_OBJECT) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "wrapper is not an object");		return NULL;	}	if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) ==		FAILURE) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing");		return NULL;	}	obj = zend_list_find(Z_LVAL_PP(handle), &type);	if (!obj || ((type != rsrc_type1) && (type != rsrc_type2))) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing or of invalid type");		return NULL;	}	return obj;}static void xpath_context_set_data(void *obj, zval *wrapper){/*	char tmp[20];	sprintf(tmp, "%08X", obj);	fprintf(stderr, "Adding %s to hash\n", tmp);*/	((xmlXPathContextPtr) obj)->user = (void *) wrapper;}static zval *xpath_context_get_data(void *obj){/*	char tmp[20];	sprintf(tmp, "%08X", obj);	fprintf(stderr, "Trying getting %s from hash ...", tmp);	if(((xmlXPathContextPtr) obj)->user)		fprintf(stderr, " found\n");	else		fprintf(stderr, " not found\n");*/	return ((zval *) (((xmlXPathContextPtr) obj)->user));}static void php_xpath_set_context(zval *wrapper, void *obj, int rsrc_type TSRMLS_DC){	zval *handle, *addr;	MAKE_STD_ZVAL(handle);	Z_TYPE_P(handle) = IS_LONG;	Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);	MAKE_STD_ZVAL(addr);	Z_TYPE_P(addr) = IS_LONG;	Z_LVAL_P(addr) = (long) obj;	zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);	zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);	zval_add_ref(&wrapper);	xpath_context_set_data(obj, wrapper);}static zval *php_xpathcontext_new(xmlXPathContextPtr obj, int *found TSRMLS_DC){	zval *wrapper;	int rsrc_type;		*found = 0;	if (!obj) {		MAKE_STD_ZVAL(wrapper);		ZVAL_NULL(wrapper);		return wrapper;	}	if ((wrapper = (zval *) xpath_context_get_data((void *) obj))) {		zval_add_ref(&wrapper);		*found = 1;		return wrapper;	}	MAKE_STD_ZVAL(wrapper);/*	fprintf(stderr, "Adding new XPath Context\n");*/	object_init_ex(wrapper, xpathctx_class_entry);	rsrc_type = le_xpathctxp;	php_xpath_set_context(wrapper, (void *) obj, rsrc_type TSRMLS_CC);	return (wrapper);}/* helper functions for xmlparser stuff */static void xmlparser_set_data(void *obj, zval *wrapper){	((xmlParserCtxtPtr) obj)->_private = wrapper;}static void php_xmlparser_set_object(zval *wrapper, void *obj, int rsrc_type TSRMLS_DC){	zval *handle, *addr;	MAKE_STD_ZVAL(handle);	Z_TYPE_P(handle) = IS_LONG;	Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);	MAKE_STD_ZVAL(addr);	Z_TYPE_P(addr) = IS_LONG;	Z_LVAL_P(addr) = (long) obj;	zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);	zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);	zval_add_ref(&wrapper);	xmlparser_set_data(obj, wrapper);}static zval *php_xmlparser_new(xmlParserCtxtPtr obj, int *found TSRMLS_DC){	zval *wrapper;	int rsrc_type;		*found = 0;	if (!obj) {		MAKE_STD_ZVAL(wrapper);		ZVAL_NULL(wrapper);		return wrapper;	}	MAKE_STD_ZVAL(wrapper);	object_init_ex(wrapper, domxmlparser_class_entry);	rsrc_type = le_domxmlparserp;	php_xmlparser_set_object(wrapper, (void *) obj, rsrc_type TSRMLS_CC);	return (wrapper);}/* {{{ php_xmlparser_make_params()   Translates a PHP array to a xmlparser parameters array */static char **php_xmlparser_make_params(zval *idvars TSRMLS_DC){	HashTable *parht;	int parsize;	zval **value;	char *expr, *string_key = NULL;	ulong num_key;	char **params = NULL;	int i = 0;	parht = HASH_OF(idvars);	parsize = (2 * zend_hash_num_elements(parht) + 1) * sizeof(char *);	params = (char **)emalloc(parsize);	memset((char *)params, 0, parsize);	for (zend_hash_internal_pointer_reset(parht);		zend_hash_get_current_data(parht, (void **)&value) == SUCCESS;		zend_hash_move_forward(parht)) {		if (zend_hash_get_current_key(parht, &string_key, &num_key, 1) != HASH_KEY_IS_STRING) {			php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid argument or parameter array");			return NULL;		}		else {			SEPARATE_ZVAL(value);			convert_to_string_ex(value);			expr = Z_STRVAL_PP(value);				if (expr) {				params[i++] = string_key;				params[i++] = expr;			}		}	}	params[i++] = NULL;	return params;}/* }}} *//* end parser stuff */static void *php_dom_get_object(zval *wrapper, int rsrc_type1, int rsrc_type2 TSRMLS_DC){	void *obj;	zval **handle;	int type;	if (NULL == wrapper) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "php_dom_get_object() invalid wrapper object passed");		return NULL;	}	if (Z_TYPE_P(wrapper) != IS_OBJECT) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "wrapper is not an object");		return NULL;	}	if (zend_hash_index_find(Z_OBJPROP_P(wrapper), 0, (void **) &handle) ==	FAILURE) {		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing");		return NULL;	}	obj = zend_list_find(Z_LVAL_PP(handle), &type);/* The following test should be replaced with search in all parents */	if (!obj) {		/* || ((type != rsrc_type1) && (type != rsrc_type2))) { */		php_error_docref(NULL TSRMLS_CC, E_WARNING, "Underlying object missing or of invalid type");		return NULL;	}	return obj;}static void php_dom_set_object(zval *wrapper, void *obj, int rsrc_type TSRMLS_DC){	zval *handle, *addr;	MAKE_STD_ZVAL(handle);	Z_TYPE_P(handle) = IS_LONG;	Z_LVAL_P(handle) = zend_list_insert(obj, rsrc_type);	MAKE_STD_ZVAL(addr);	Z_TYPE_P(addr) = IS_LONG;	Z_LVAL_P(addr) = (long) obj;	zend_hash_index_update(Z_OBJPROP_P(wrapper), 0, &handle, sizeof(zval *), NULL);	zend_hash_index_update(Z_OBJPROP_P(wrapper), 1, &addr, sizeof(zval *), NULL);	zval_add_ref(&wrapper);	dom_object_set_data(obj, wrapper);}

⌨️ 快捷键说明

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