Annotation of embedaddon/php/ext/dom/processinginstruction.c, revision 1.1
1.1 ! misho 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 321634 2012-01-01 13:15:04Z felipe $ */
! 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>