Annotation of embedaddon/php/ext/dom/processinginstruction.c, revision 1.1.1.4
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
1.1.1.4 ! misho 5: | Copyright (c) 1997-2014 The PHP Group |
1.1 misho 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:
1.1.1.2 misho 20: /* $Id$ */
1.1 misho 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>