From bce3deddb83dd61821ba72bd3f6bab3181ac9e70 Mon Sep 17 00:00:00 2001 From: Niels Dossche <7771979+nielsdos@users.noreply.github.com> Date: Mon, 20 May 2024 15:55:20 +0200 Subject: [PATCH] Avoid code duplication for error instance creation in ext/libxml --- ext/libxml/libxml.c | 54 ++++++++++++++++++--------------------------- 1 file changed, 21 insertions(+), 33 deletions(-) diff --git a/ext/libxml/libxml.c b/ext/libxml/libxml.c index 3822deed914db..c35369beaef86 100644 --- a/ext/libxml/libxml.c +++ b/ext/libxml/libxml.c @@ -1095,6 +1095,25 @@ PHP_FUNCTION(libxml_use_internal_errors) } /* }}} */ +static void php_libxml_create_error_object(zval *return_value, const xmlError *error) +{ + object_init_ex(return_value, libxmlerror_class_entry); + add_property_long(return_value, "level", error->level); + add_property_long(return_value, "code", error->code); + add_property_long(return_value, "column", error->int2); + if (error->message) { + add_property_string(return_value, "message", error->message); + } else { + add_property_str(return_value, "message", zend_empty_string); + } + if (error->file) { + add_property_string(return_value, "file", error->file); + } else { + add_property_str(return_value, "file", zend_empty_string); + } + add_property_long(return_value, "line", error->line); +} + /* {{{ Retrieve last error from libxml */ PHP_FUNCTION(libxml_get_last_error) { @@ -1103,21 +1122,7 @@ PHP_FUNCTION(libxml_get_last_error) const xmlError *error = xmlGetLastError(); if (error) { - object_init_ex(return_value, libxmlerror_class_entry); - add_property_long(return_value, "level", error->level); - add_property_long(return_value, "code", error->code); - add_property_long(return_value, "column", error->int2); - if (error->message) { - add_property_string(return_value, "message", error->message); - } else { - add_property_stringl(return_value, "message", "", 0); - } - if (error->file) { - add_property_string(return_value, "file", error->file); - } else { - add_property_stringl(return_value, "file", "", 0); - } - add_property_long(return_value, "line", error->line); + php_libxml_create_error_object(return_value, error); } else { RETURN_FALSE; } @@ -1132,30 +1137,13 @@ PHP_FUNCTION(libxml_get_errors) ZEND_PARSE_PARAMETERS_NONE(); if (LIBXML(error_list)) { - array_init(return_value); error = zend_llist_get_first(LIBXML(error_list)); while (error != NULL) { zval z_error; - - object_init_ex(&z_error, libxmlerror_class_entry); - add_property_long_ex(&z_error, "level", sizeof("level") - 1, error->level); - add_property_long_ex(&z_error, "code", sizeof("code") - 1, error->code); - add_property_long_ex(&z_error, "column", sizeof("column") - 1, error->int2 ); - if (error->message) { - add_property_string_ex(&z_error, "message", sizeof("message") - 1, error->message); - } else { - add_property_stringl_ex(&z_error, "message", sizeof("message") - 1, "", 0); - } - if (error->file) { - add_property_string_ex(&z_error, "file", sizeof("file") - 1, error->file); - } else { - add_property_stringl_ex(&z_error, "file", sizeof("file") - 1, "", 0); - } - add_property_long_ex(&z_error, "line", sizeof("line") - 1, error->line); + php_libxml_create_error_object(&z_error, error); add_next_index_zval(return_value, &z_error); - error = zend_llist_get_next(LIBXML(error_list)); } } else {