Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- --- php5.3-200809221430a\ext\xmlreader\php_xmlreader.c 2008-08-23 20:35:12.000000000 +0200
- +++ php5.3-200809221430\ext\xmlreader\php_xmlreader.c 2008-09-22 23:52:08.000000000 +0200
- @@ -55,6 +55,18 @@
- #define XMLREADER_LOAD_STRING 0
- #define XMLREADER_LOAD_FILE 1
- +static int php_libxml_streams_IO_read(void *context, char *buffer, int len)
- +{
- + TSRMLS_FETCH();
- + return php_stream_read((php_stream*)context, buffer, len);
- +}
- +
- +static int php_libxml_streams_IO_close(void *context)
- +{
- + TSRMLS_FETCH();
- + return php_stream_close((php_stream*)context);
- +}
- +
- /* {{{ xmlreader_register_prop_handler */
- static void xmlreader_register_prop_handler(HashTable *prop_handler, char *name, xmlreader_read_int_t read_int_func, xmlreader_read_const_char_t read_char_func, int rettype TSRMLS_DC)
- {
- @@ -916,6 +928,72 @@
- }
- /* }}} */
- +/* {{{ proto boolean XMLReader::open_stream(resource stream [, string URI [, string encoding [, int options]]])
- +Set XMLReader to work on an open stream */
- +PHP_METHOD(xmlreader, open_stream)
- +{
- + zval *id;
- + int uri_len = 0, encoding_len = 0;
- + long options = 0;
- + xmlreader_object *intern = NULL;
- + char *uri;
- + char *encoding = NULL;
- + xmlParserInputBufferPtr parser_input_buffer;
- + xmlTextReaderPtr reader = NULL;
- + zval *arg1;
- + php_stream *stream;
- +
- + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|ss!l", &arg1, &uri, &uri_len, &encoding, &encoding_len, &options) == FAILURE) {
- + return;
- + }
- +
- + php_stream_from_zval_no_verify(stream, &arg1);
- + if (stream == NULL) {
- + php_error_docref(NULL TSRMLS_CC, E_WARNING, "First parameter is not a valid stream");
- + RETURN_FALSE;
- + }
- +
- + id = getThis();
- + if (id != NULL) {
- + if (! instanceof_function(Z_OBJCE_P(id), xmlreader_class_entry TSRMLS_CC)) {
- + id = NULL;
- + } else {
- + intern = (xmlreader_object *)zend_object_store_get_object(id TSRMLS_CC);
- + xmlreader_free_resources(intern);
- + }
- + }
- +
- + /* Allocate the Input buffer front-end. */
- + parser_input_buffer = xmlAllocParserInputBuffer(XML_CHAR_ENCODING_NONE);
- + if (parser_input_buffer != NULL) {
- + parser_input_buffer->context = stream;
- + parser_input_buffer->readcallback = php_libxml_streams_IO_read;
- + parser_input_buffer->closecallback = php_libxml_streams_IO_close;
- +
- + if (encoding != NULL)
- + parser_input_buffer->encoder = xmlFindCharEncodingHandler(encoding);
- + }
- +
- + reader = xmlNewTextReader(parser_input_buffer, uri);
- + if (reader == NULL) {
- + php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open");
- + RETURN_FALSE;
- + }
- +
- + if (id == NULL) {
- + object_init_ex(return_value, xmlreader_class_entry);
- + intern = (xmlreader_object *)zend_objects_get_address(return_value TSRMLS_CC);
- + intern->ptr = reader;
- + return;
- + }
- +
- + intern->ptr = reader;
- +
- + RETURN_TRUE;
- +
- +}
- +/* }}} */
- +
- /* Not Yet Implemented in libxml - functions exist just not coded
- PHP_METHOD(xmlreader, resetState)
- {
- @@ -1249,6 +1327,14 @@
- ZEND_END_ARG_INFO()
- static
- +ZEND_BEGIN_ARG_INFO_EX(arginfo_xmlreader_open_stream, 0, 0, 1)
- + ZEND_ARG_INFO(0, stream)
- + ZEND_ARG_INFO(0, URI)
- + ZEND_ARG_INFO(0, encoding)
- + ZEND_ARG_INFO(0, options)
- +ZEND_END_ARG_INFO()
- +
- +static
- ZEND_BEGIN_ARG_INFO(arginfo_xmlreader_readInnerXml, 0)
- ZEND_END_ARG_INFO()
- @@ -1308,6 +1394,7 @@
- PHP_ME(xmlreader, moveToFirstAttribute, arginfo_xmlreader_moveToFirstAttribute, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, moveToNextAttribute, arginfo_xmlreader_moveToNextAttribute, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, open, arginfo_xmlreader_open, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- + PHP_ME(xmlreader, open_stream, arginfo_xmlreader_open_stream, ZEND_ACC_PUBLIC|ZEND_ACC_ALLOW_STATIC)
- PHP_ME(xmlreader, read, arginfo_xmlreader_read, ZEND_ACC_PUBLIC)
- PHP_ME(xmlreader, next, arginfo_xmlreader_next, ZEND_ACC_PUBLIC)
- #if LIBXML_VERSION >= 20620
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement