File:  [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / dom / processinginstruction.c
Revision 1.1.1.2 (vendor branch): download - view: text, annotated - select for diffs - revision graph
Tue May 29 12:34:37 2012 UTC (12 years, 2 months ago) by misho
Branches: php, MAIN
CVS tags: v5_4_3elwix, v5_4_17p0, HEAD
php 5.4.3+patches

    1: /*
    2:    +----------------------------------------------------------------------+
    3:    | PHP Version 5                                                        |
    4:    +----------------------------------------------------------------------+
    5:    | Copyright (c) 1997-2012 The PHP Group                                |
    6:    +----------------------------------------------------------------------+
    7:    | This source file is subject to version 3.01 of the PHP license,      |
    8:    | that is bundled with this package in the file LICENSE, and is        |
    9:    | available through the world-wide-web at the following url:           |
   10:    | http://www.php.net/license/3_01.txt                                  |
   11:    | If you did not receive a copy of the PHP license and are unable to   |
   12:    | obtain it through the world-wide-web, please send a note to          |
   13:    | license@php.net so we can mail you a copy immediately.               |
   14:    +----------------------------------------------------------------------+
   15:    | Authors: Christian Stocker <chregu@php.net>                          |
   16:    |          Rob Richards <rrichards@php.net>                            |
   17:    +----------------------------------------------------------------------+
   18: */
   19: 
   20: /* $Id: processinginstruction.c,v 1.1.1.2 2012/05/29 12:34:37 misho Exp $ */
   21: 
   22: #ifdef HAVE_CONFIG_H
   23: #include "config.h"
   24: #endif
   25: 
   26: #include "php.h"
   27: #if HAVE_LIBXML && HAVE_DOM
   28: #include "php_dom.h"
   29: 
   30: 
   31: /* {{{ arginfo */
   32: ZEND_BEGIN_ARG_INFO_EX(arginfo_dom_processinginstruction_construct, 0, 0, 1)
   33: 	ZEND_ARG_INFO(0, name)
   34: 	ZEND_ARG_INFO(0, value)
   35: ZEND_END_ARG_INFO();
   36: /* }}} */
   37: 
   38: /*
   39: * class DOMProcessingInstruction extends DOMNode 
   40: *
   41: * URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1004215813
   42: * Since: 
   43: */
   44: 
   45: const zend_function_entry php_dom_processinginstruction_class_functions[] = {
   46: 	PHP_ME(domprocessinginstruction, __construct, arginfo_dom_processinginstruction_construct, ZEND_ACC_PUBLIC)
   47: 	PHP_FE_END
   48: };
   49: 
   50: /* {{{ proto void DOMProcessingInstruction::__construct(string name, [string value]); */
   51: PHP_METHOD(domprocessinginstruction, __construct)
   52: {
   53: 
   54: 	zval *id;
   55: 	xmlNodePtr nodep = NULL, oldnode = NULL;
   56: 	dom_object *intern;
   57: 	char *name, *value = NULL;
   58: 	int name_len, value_len, name_valid;
   59: 	zend_error_handling error_handling;
   60: 
   61: 	zend_replace_error_handling(EH_THROW, dom_domexception_class_entry, &error_handling TSRMLS_CC);
   62: 	if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "Os|s", &id, dom_processinginstruction_class_entry, &name, &name_len, &value, &value_len) == FAILURE) {
   63: 		zend_restore_error_handling(&error_handling TSRMLS_CC);
   64: 		return;
   65: 	}
   66: 
   67: 	zend_restore_error_handling(&error_handling TSRMLS_CC);
   68: 
   69: 	name_valid = xmlValidateName((xmlChar *) name, 0);
   70: 	if (name_valid != 0) {
   71: 		php_dom_throw_error(INVALID_CHARACTER_ERR, 1 TSRMLS_CC);
   72: 		RETURN_FALSE;
   73: 	}
   74: 
   75: 	nodep = xmlNewPI((xmlChar *) name, (xmlChar *) value);
   76: 
   77: 	if (!nodep) {
   78: 		php_dom_throw_error(INVALID_STATE_ERR, 1 TSRMLS_CC);
   79: 		RETURN_FALSE;
   80: 	}
   81: 
   82: 	intern = (dom_object *)zend_object_store_get_object(id TSRMLS_CC);
   83: 	if (intern != NULL) {
   84: 		oldnode = dom_object_get_node(intern);
   85: 		if (oldnode != NULL) {
   86: 			php_libxml_node_free_resource(oldnode  TSRMLS_CC);
   87: 		}
   88: 		php_libxml_increment_node_ptr((php_libxml_node_object *)intern, nodep, (void *)intern TSRMLS_CC);
   89: 	}
   90: }
   91: /* }}} end DOMProcessingInstruction::__construct */
   92: 
   93: /* {{{ target	string	
   94: readonly=yes 
   95: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-1478689192
   96: Since: 
   97: */
   98: int dom_processinginstruction_target_read(dom_object *obj, zval **retval TSRMLS_DC)
   99: {
  100: 	xmlNodePtr nodep;
  101: 
  102: 	nodep = dom_object_get_node(obj);
  103: 
  104: 	if (nodep == NULL) {
  105: 		php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
  106: 		return FAILURE;
  107: 	}
  108: 
  109: 	ALLOC_ZVAL(*retval);
  110: 	ZVAL_STRING(*retval, (char *) (nodep->name), 1);
  111: 
  112: 	return SUCCESS;
  113: }
  114: 
  115: /* }}} */
  116: 
  117: /* {{{ data	string	
  118: readonly=no 
  119: URL: http://www.w3.org/TR/2003/WD-DOM-Level-3-Core-20030226/DOM3-Core.html#ID-837822393
  120: Since: 
  121: */
  122: int dom_processinginstruction_data_read(dom_object *obj, zval **retval TSRMLS_DC)
  123: {
  124: 	xmlNodePtr nodep;
  125: 	xmlChar *content;
  126: 
  127: 	nodep = dom_object_get_node(obj);
  128: 
  129: 	if (nodep == NULL) {
  130: 		php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
  131: 		return FAILURE;
  132: 	}
  133: 
  134: 	ALLOC_ZVAL(*retval);
  135: 
  136: 	
  137: 	if ((content = xmlNodeGetContent(nodep)) != NULL) {
  138: 		ZVAL_STRING(*retval, content, 1);
  139: 		xmlFree(content);
  140: 	} else {
  141: 		ZVAL_EMPTY_STRING(*retval);
  142: 	}
  143: 
  144: 	return SUCCESS;
  145: }
  146: 
  147: int dom_processinginstruction_data_write(dom_object *obj, zval *newval TSRMLS_DC)
  148: {
  149: 	zval value_copy;
  150: 	xmlNode *nodep;
  151: 
  152: 	nodep = dom_object_get_node(obj);
  153: 
  154: 	if (nodep == NULL) {
  155: 		php_dom_throw_error(INVALID_STATE_ERR, 0 TSRMLS_CC);
  156: 		return FAILURE;
  157: 	}
  158: 
  159: 	if (newval->type != IS_STRING) {
  160: 		if(Z_REFCOUNT_P(newval) > 1) {
  161: 			value_copy = *newval;
  162: 			zval_copy_ctor(&value_copy);
  163: 			newval = &value_copy;
  164: 		}
  165: 		convert_to_string(newval);
  166: 	}
  167: 
  168: 	xmlNodeSetContentLen(nodep, Z_STRVAL_P(newval), Z_STRLEN_P(newval) + 1);
  169: 
  170: 	if (newval == &value_copy) {
  171: 		zval_dtor(newval);
  172: 	}
  173: 
  174: 	return SUCCESS;
  175: }
  176: 
  177: /* }}} */
  178: 
  179: #endif
  180: 
  181: /*
  182:  * Local variables:
  183:  * tab-width: 4
  184:  * c-basic-offset: 4
  185:  * End:
  186:  * vim600: noet sw=4 ts=4 fdm=marker
  187:  * vim<600: noet sw=4 ts=4
  188:  */

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>