1
0
mirror of https://github.com/php/php-src.git synced 2026-03-24 00:02:20 +01:00

Avoid code duplication for error instance creation in ext/libxml (#14277)

This commit is contained in:
Niels Dossche
2024-05-20 16:18:32 +02:00
committed by GitHub
parent ca3444b1d8
commit 230ab078d1

View File

@@ -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 {