rrichards Fri Dec 12 08:54:07 2003 EDT
Modified files:
/php-src/ext/libxml php_libxml.h libxml.c
Log:
consolidate error handling
Index: php-src/ext/libxml/php_libxml.h
diff -u php-src/ext/libxml/php_libxml.h:1.4 php-src/ext/libxml/php_libxml.h:1.5
--- php-src/ext/libxml/php_libxml.h:1.4 Tue Dec 9 16:55:02 2003
+++ php-src/ext/libxml/php_libxml.h Fri Dec 12 08:54:06 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_libxml.h,v 1.4 2003/12/09 21:55:02 rrichards Exp $ */
+/* $Id: php_libxml.h,v 1.5 2003/12/12 13:54:06 rrichards Exp $ */
#ifndef PHP_LIBXML_H
#define PHP_LIBXML_H
@@ -73,6 +73,9 @@
void php_libxml_node_free_resource(xmlNodePtr node TSRMLS_DC);
/* When object dtor is called as node may still be referenced */
void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC);
+void php_libxml_error_handler(void *ctx, const char *msg, ...);
+void php_libxml_ctx_warning(void *ctx, const char *msg, ...);
+void php_libxml_ctx_error(void *ctx, const char *msg, ...);
#endif /* HAVE_LIBXML */
Index: php-src/ext/libxml/libxml.c
diff -u php-src/ext/libxml/libxml.c:1.10 php-src/ext/libxml/libxml.c:1.11
--- php-src/ext/libxml/libxml.c:1.10 Tue Dec 9 16:55:02 2003
+++ php-src/ext/libxml/libxml.c Fri Dec 12 08:54:06 2003
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: libxml.c,v 1.10 2003/12/09 21:55:02 rrichards Exp $ */
+/* $Id: libxml.c,v 1.11 2003/12/12 13:54:06 rrichards Exp $ */
#define IS_EXT_MODULE
@@ -43,6 +43,10 @@
#include "php_libxml.h"
+#define PHP_LIBXML_ERROR 0
+#define PHP_LIBXML_CTX_ERROR 1
+#define PHP_LIBXML_CTX_WARNING 2
+
/* a true global for initialization */
int _php_libxml_initialized = 0;
@@ -294,22 +298,33 @@
return php_stream_close((php_stream*)context);
}
-static void php_libxml_error_handler(void *ctx, const char *msg, ...)
+static void php_libxml_ctx_error_level(int level, void *ctx, const char *msg
TSRMLS_DC)
+{
+ xmlParserCtxtPtr parser;
+
+ parser = (xmlParserCtxtPtr) ctx;
+
+ if (parser != NULL && parser->input != NULL) {
+ if (parser->input->filename) {
+ php_error_docref(NULL TSRMLS_CC, level, "%s in %s, line: %d",
msg, parser->input->filename, parser->input->line);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, level, "%s in Entity, line:
%d", msg, parser->input->line);
+ }
+ }
+}
+
+static void php_libxml_internal_error_handler(int error_type, void *ctx, const char
**msg, va_list ap)
{
- va_list ap;
char *buf;
int len, len_iter, output = 0;
TSRMLS_FETCH();
- va_start(ap, msg);
- len = vspprintf(&buf, 0, msg, ap);
- va_end(ap);
-
+ len = vspprintf(&buf, 0, *msg, ap);
len_iter = len;
/* remove any trailing \n */
- while (len && buf[--len_iter] == '\n') {
+ while (len_iter && buf[--len_iter] == '\n') {
buf[len_iter] = '\0';
output = 1;
}
@@ -319,12 +334,46 @@
efree(buf);
if (output == 1) {
- php_error(E_WARNING, "%s", (char *) LIBXML(error_buffer));
+ switch (error_type) {
+ case PHP_LIBXML_CTX_ERROR:
+ php_libxml_ctx_error_level(E_WARNING, ctx, (char *)
LIBXML(error_buffer) TSRMLS_CC);
+ break;
+ case PHP_LIBXML_CTX_WARNING:
+ php_libxml_ctx_error_level(E_NOTICE, ctx, (char *)
LIBXML(error_buffer) TSRMLS_CC);
+ break;
+ default:
+ php_error(E_WARNING, "%s", (char *)
LIBXML(error_buffer));
+ }
smart_str_free(&LIBXML(error_buffer));
LIBXML(error_buffer) = NULL;
}
}
+void php_libxml_ctx_error(void *ctx, const char *msg, ...)
+{
+ va_list args;
+ va_start(args, msg);
+ php_libxml_internal_error_handler(PHP_LIBXML_CTX_ERROR, ctx, &msg, args);
+ va_end(args);
+}
+
+void php_libxml_ctx_warning(void *ctx, const char *msg, ...)
+{
+ va_list args;
+ va_start(args, msg);
+ php_libxml_internal_error_handler(PHP_LIBXML_CTX_WARNING, ctx, &msg, args);
+ va_end(args);
+}
+
+void php_libxml_error_handler(void *ctx, const char *msg, ...)
+{
+ va_list args;
+ va_start(args, msg);
+ php_libxml_internal_error_handler(PHP_LIBXML_ERROR, ctx, &msg, args);
+ va_end(args);
+}
+
+
PHP_LIBXML_API void php_libxml_initialize() {
if (!_php_libxml_initialized) {
/* we should be the only one's to ever init!! */
--
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php