34#define XMLWRITER_FROM_OBJECT(ptr, object) \
36 ze_xmlwriter_object *obj = Z_XMLWRITER_P(object); \
39 zend_throw_error(NULL, "Invalid or uninitialized XMLWriter object"); \
50 xmlFreeTextWriter(intern->
ptr);
54 xmlBufferFree(intern->
output);
60static void xmlwriter_object_dtor(
zend_object *
object)
65 xmlwriter_destroy_libxml_objects(intern);
71static void xmlwriter_object_free_storage(
zend_object *
object)
93#define XMLW_NAME_CHK(__arg_no, __subject) \
94 if (xmlValidateName((xmlChar *) name, 0) != 0) { \
95 zend_argument_value_error(__arg_no, "must be a valid %s, \"%s\" given", __subject, name); \
108static char *_xmlwriter_get_valid_file_path(
char *source,
char *resolved_path,
int resolved_path_len ) {
114 uri = xmlCreateURI();
118 escsource = xmlURIEscapeStr((xmlChar *)source, (xmlChar *)
":");
119 xmlParseURIReference(uri, (
char *)escsource);
122 if (uri->scheme !=
NULL) {
125 if (source[
sizeof(
"file:///") - 1] ==
'\0') {
135 }
else if (
strncasecmp(source,
"file://localhost/",17) == 0) {
136 if (source[
sizeof(
"file://localhost/") - 1] ==
'\0') {
150 if ((uri->scheme ==
NULL || isFileUri)) {
170 file_dest = resolved_path;
185 intern->
ptr = writer;
188 xmlBufferFree(output);
189 xmlFreeTextWriter(writer);
214#ifdef COMPILE_DL_XMLWRITER
227 xmlTextWriterPtr
ptr;
238 if (subject_name !=
NULL) {
249 xmlTextWriterPtr
ptr;
266 xmlTextWriterPtr
ptr;
276 retval = xmlTextWriterSetIndent(
ptr, indent);
306 xmlTextWriterPtr
ptr;
308 size_t name_len, prefix_len, uri_len;
320 retval = xmlTextWriterStartAttributeNS(
ptr, (xmlChar *)
prefix, (xmlChar *)
name, (xmlChar *)uri);
329 xmlTextWriterPtr
ptr;
330 char *
name, *content;
331 size_t name_len, content_len;
336 &
name, &name_len, &content, &content_len) ==
FAILURE) {
343 retval = xmlTextWriterWriteAttribute(
ptr, (xmlChar *)
name, (xmlChar *)content);
352 xmlTextWriterPtr
ptr;
354 size_t name_len, prefix_len, uri_len, content_len;
359 &
prefix, &prefix_len, &
name, &name_len, &uri, &uri_len, &content, &content_len) ==
FAILURE) {
366 retval = xmlTextWriterWriteAttributeNS(
ptr, (xmlChar *)
prefix, (xmlChar *)
name, (xmlChar *)uri, (xmlChar *)content);
382 xmlTextWriterPtr
ptr;
384 size_t name_len, prefix_len, uri_len;
396 retval = xmlTextWriterStartElementNS(
ptr, (xmlChar *)
prefix, (xmlChar *)
name, (xmlChar *)uri);
419 xmlTextWriterPtr
ptr;
421 size_t name_len, content_len;
426 &
name, &name_len, &content, &content_len) ==
FAILURE) {
440 retval = xmlTextWriterWriteElement(
ptr, (xmlChar *)
name, (xmlChar *)content);
450 xmlTextWriterPtr
ptr;
452 size_t name_len, prefix_len, uri_len, content_len;
457 &
prefix, &prefix_len, &
name, &name_len, &uri, &uri_len, &content, &content_len) ==
FAILURE) {
465 retval = xmlTextWriterStartElementNS(
ptr,(xmlChar *)
prefix, (xmlChar *)
name, (xmlChar *)uri);
471 retval = xmlTextWriterWriteElementNS(
ptr, (xmlChar *)
prefix, (xmlChar *)
name, (xmlChar *)uri, (xmlChar *)content);
495 xmlTextWriterPtr
ptr;
496 char *
name, *content;
497 size_t name_len, content_len;
502 &
name, &name_len, &content, &content_len) ==
FAILURE) {
509 retval = xmlTextWriterWritePI(
ptr, (xmlChar *)
name, (xmlChar *)content);
518 xmlTextWriterPtr
ptr;
564 xmlTextWriterPtr
ptr;
596 xmlTextWriterPtr
ptr;
598 size_t version_len, enc_len, alone_len;
602 if (
zend_parse_method_parameters(
ZEND_NUM_ARGS(),
getThis(),
"O|s!p!s!", &self, xmlwriter_class_entry_ce, &version, &version_len, &enc, &enc_len, &alone, &alone_len) ==
FAILURE) {
607 retval = xmlTextWriterStartDocument(
ptr, version, enc, alone);
623 xmlTextWriterPtr
ptr;
625 size_t name_len, pubid_len, sysid_len;
629 if (
zend_parse_method_parameters(
ZEND_NUM_ARGS(),
getThis(),
"Os|s!s!", &self, xmlwriter_class_entry_ce, &
name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len) ==
FAILURE) {
634 retval = xmlTextWriterStartDTD(
ptr, (xmlChar *)
name, (xmlChar *)pubid, (xmlChar *)sysid);
650 xmlTextWriterPtr
ptr;
652 size_t name_len, pubid_len, sysid_len, subset_len;
656 if (
zend_parse_method_parameters(
ZEND_NUM_ARGS(),
getThis(),
"Os|s!s!s!", &self, xmlwriter_class_entry_ce, &
name, &name_len, &pubid, &pubid_len, &sysid, &sysid_len, &subset, &subset_len) ==
FAILURE) {
661 retval = xmlTextWriterWriteDTD(
ptr, (xmlChar *)
name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)subset);
684 xmlTextWriterPtr
ptr;
685 char *
name, *content;
686 size_t name_len, content_len;
691 &
name, &name_len, &content, &content_len) ==
FAILURE) {
698 retval = xmlTextWriterWriteDTDElement(
ptr, (xmlChar *)
name, (xmlChar *)content);
721 xmlTextWriterPtr
ptr;
722 char *
name, *content;
723 size_t name_len, content_len;
728 &
name, &name_len, &content, &content_len) ==
FAILURE) {
735 retval = xmlTextWriterWriteDTDAttlist(
ptr, (xmlChar *)
name, (xmlChar *)content);
744 xmlTextWriterPtr
ptr;
758 retval = xmlTextWriterStartDTDEntity(
ptr, isparm, (xmlChar *)
name);
774 xmlTextWriterPtr
ptr;
775 char *
name, *content;
776 size_t name_len, content_len;
781 size_t pubid_len, sysid_len, ndataid_len;
785 &
name, &name_len, &content, &content_len, &pe, &pubid, &pubid_len,
786 &sysid, &sysid_len, &ndataid, &ndataid_len) ==
FAILURE) {
793 retval = xmlTextWriterWriteDTDEntity(
ptr, pe, (xmlChar *)
name, (xmlChar *)pubid, (xmlChar *)sysid, (xmlChar *)ndataid, (xmlChar *)content);
802 char *valid_file =
NULL;
803 xmlTextWriterPtr
ptr;
819 if (source_len == 0) {
824 valid_file = _xmlwriter_get_valid_file_path(source, resolved_path,
MAXPATHLEN);
830 ptr = xmlNewTextWriterFilename(valid_file, 0);
837 xmlwriter_destroy_libxml_objects(ze_obj);
842 ze_obj = php_xmlwriter_fetch_object(xmlwriter_object_new(xmlwriter_class_entry_ce));
860 if (source_len == 0) {
865 const char *valid_file = _xmlwriter_get_valid_file_path(source, resolved_path,
MAXPATHLEN);
871 xmlTextWriterPtr writer = xmlNewTextWriterFilename(valid_file, 0);
883 xmlTextWriterPtr
ptr;
897 buffer = xmlBufferCreate();
911 xmlwriter_destroy_libxml_objects(ze_obj);
916 ze_obj = php_xmlwriter_fetch_object(xmlwriter_object_new(xmlwriter_class_entry_ce));
929 xmlBufferPtr
buffer = xmlBufferCreate();
930 xmlTextWriterPtr writer = xmlNewTextWriterMemory(
buffer, 0);
942static int xml_writer_stream_write(
void *
context,
const char *
buffer,
int len)
952static int xml_writer_stream_close(
void *
context)
972 xmlOutputBufferPtr output_buffer = xmlOutputBufferCreateIO(xml_writer_stream_write, xml_writer_stream_close, stream->
res,
NULL);
981 xmlTextWriterPtr writer = xmlNewTextWriter(output_buffer);
983 xmlOutputBufferClose(output_buffer);
994 xmlTextWriterPtr
ptr;
1009 output_bytes = xmlTextWriterFlush(
ptr);
1011 const xmlChar *content = xmlBufferContent(
buffer);
1041 xmlwriter_object_handlers.dtor_obj = xmlwriter_object_dtor;
1042 xmlwriter_object_handlers.free_obj = xmlwriter_object_free_storage;
1043 xmlwriter_object_handlers.clone_obj =
NULL;
1044 xmlwriter_class_entry_ce = register_class_XMLWriter();
1045 xmlwriter_class_entry_ce->create_object = xmlwriter_object_new;
1046 xmlwriter_class_entry_ce->default_object_handlers = &xmlwriter_object_handlers;
zend_ffi_ctype_name_buf buf
PHPAPI char * expand_filepath(const char *filepath, char *real_path)
PHPAPI ZEND_COLD void php_error_docref(const char *docref, int type, const char *format,...)
php_info_print_table_start()
php_info_print_table_row(2, "PDO Driver for Firebird", "enabled")
php_info_print_table_end()
#define PHP_MSHUTDOWN_FUNCTION
#define PHP_MINIT_FUNCTION
#define PHP_MINFO_FUNCTION
struct _php_stream php_stream
#define php_stream_from_res(xstr, res)
#define php_stream_write(stream, buf, count)
zend_module_entry xmlwriter_module_entry
#define XMLW_NAME_CHK(__arg_no, __subject)
int(* xmlwriter_read_int_t)(xmlTextWriterPtr writer)
#define XMLWRITER_FROM_OBJECT(ptr, object)
int(* xmlwriter_read_one_char_t)(xmlTextWriterPtr writer, const xmlChar *content)
#define PHP_XMLWRITER_VERSION
#define Z_XMLWRITER_P(zv)
struct _ze_xmlwriter_object ze_xmlwriter_object
xmlwriter_write_pi(XMLWriter $writer, string $target, string $content)
xmlwriter_output_memory(XMLWriter $writer, bool $flush=true)
xmlwriter_end_dtd_entity(XMLWriter $writer)
xmlwriter_end_document(XMLWriter $writer)
xmlwriter_write_dtd_element(XMLWriter $writer, string $name, string $content)
xmlwriter_start_cdata(XMLWriter $writer)
xmlwriter_text(XMLWriter $writer, string $content)
xmlwriter_start_pi(XMLWriter $writer, string $target)
xmlwriter_start_dtd(XMLWriter $writer, string $qualifiedName, ?string $publicId=null, ?string $systemId=null)
xmlwriter_end_pi(XMLWriter $writer)
xmlwriter_end_comment(XMLWriter $writer)
xmlwriter_start_dtd_attlist(XMLWriter $writer, string $name)
xmlwriter_start_attribute(XMLWriter $writer, string $name)
xmlwriter_write_raw(XMLWriter $writer, string $content)
xmlwriter_start_dtd_element(XMLWriter $writer, string $qualifiedName)
xmlwriter_start_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace)
xmlwriter_end_dtd_attlist(XMLWriter $writer)
xmlwriter_write_cdata(XMLWriter $writer, string $content)
xmlwriter_flush(XMLWriter $writer, bool $empty=true)
xmlwriter_write_element_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace, ?string $content=null)
xmlwriter_write_dtd_entity(XMLWriter $writer, string $name, string $content, bool $isParam=false, ?string $publicId=null, ?string $systemId=null, ?string $notationData=null)
xmlwriter_write_comment(XMLWriter $writer, string $content)
xmlwriter_start_attribute_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace)
xmlwriter_end_attribute(XMLWriter $writer)
xmlwriter_set_indent(XMLWriter $writer, bool $enable)
xmlwriter_full_end_element(XMLWriter $writer)
xmlwriter_end_dtd_element(XMLWriter $writer)
xmlwriter_write_attribute(XMLWriter $writer, string $name, string $value)
xmlwriter_write_attribute_ns(XMLWriter $writer, ?string $prefix, string $name, ?string $namespace, string $value)
xmlwriter_end_cdata(XMLWriter $writer)
xmlwriter_start_dtd_entity(XMLWriter $writer, string $name, bool $isParam)
xmlwriter_open_uri(string $uri)
xmlwriter_start_document(XMLWriter $writer, ?string $version="1.0", ?string $encoding=null, ?string $standalone=null)
xmlwriter_write_dtd_attlist(XMLWriter $writer, string $name, string $content)
xmlwriter_end_dtd(XMLWriter $writer)
xmlwriter_set_indent_string(XMLWriter $writer, string $indentation)
xmlwriter_end_element(XMLWriter $writer)
xmlwriter_start_element(XMLWriter $writer, string $name)
xmlwriter_write_element(XMLWriter $writer, string $name, ?string $content=null)
xmlwriter_write_dtd(XMLWriter $writer, string $name, ?string $publicId=null, ?string $systemId=null, ?string $content=null)
xmlwriter_start_comment(XMLWriter $writer)
ZEND_API ZEND_COLD void zend_throw_error(zend_class_entry *exception_ce, const char *format,...)
#define INTERNAL_FUNCTION_PARAMETERS
#define INTERNAL_FUNCTION_PARAM_PASSTHRU
ZEND_API zend_result object_init_with_constructor(zval *arg, zend_class_entry *class_type, uint32_t param_count, zval *params, HashTable *named_params)
ZEND_API zend_result zend_parse_parameters(uint32_t num_args, const char *type_spec,...)
ZEND_API void object_properties_init(zend_object *object, zend_class_entry *class_type)
ZEND_API ZEND_COLD void zend_argument_must_not_be_empty_error(uint32_t arg_num)
ZEND_API zend_result zend_parse_method_parameters(uint32_t num_args, zval *this_ptr, const char *type_spec,...)
ZEND_API ZEND_COLD void zend_argument_value_error(uint32_t arg_num, const char *format,...)
#define ZEND_PARSE_PARAMETERS_END()
#define Z_PARAM_RESOURCE(dest)
#define ZEND_PARSE_PARAMETERS_NONE()
#define ZEND_GET_MODULE(name)
#define zend_parse_parameters_none()
#define ZEND_PARSE_PARAMETERS_START(min_num_args, max_num_args)
#define RETURN_EMPTY_STRING()
#define Z_PARAM_PATH(dest, dest_len)
ZEND_API size_t zend_dirname(char *path, size_t len)
#define strncasecmp(s1, s2, n)
ZEND_API zend_result ZEND_FASTCALL zend_list_delete(zend_resource *res)
struct _zend_module_dep zend_module_dep
struct _zend_module_entry zend_module_entry
#define STANDARD_MODULE_PROPERTIES
#define ZEND_MOD_REQUIRED(name)
#define STANDARD_MODULE_HEADER_EX
ZEND_API const zend_object_handlers std_object_handlers
ZEND_API void zend_objects_destroy_object(zend_object *object)
ZEND_API void ZEND_FASTCALL zend_object_std_init(zend_object *object, zend_class_entry *ce)
ZEND_API void zend_object_std_dtor(zend_object *object)
#define EXPECTED(condition)
#define zend_always_inline
#define XtOffsetOf(s_type, field)
#define UNEXPECTED(condition)
struct _zend_class_entry zend_class_entry
struct _zend_object zend_object
struct _zend_resource zend_resource
struct _zend_object_handlers zend_object_handlers
#define VCWD_REALPATH(path, real_path)