]> granicus.if.org Git - php/commitdiff
implement php_libxml_xmlCheckUTF8
authorRob Richards <rrichards@php.net>
Wed, 8 Sep 2004 10:15:41 +0000 (10:15 +0000)
committerRob Richards <rrichards@php.net>
Wed, 8 Sep 2004 10:15:41 +0000 (10:15 +0000)
 - workaround for pre libxml2-2.6.13 function

ext/libxml/libxml.c
ext/libxml/php_libxml.h

index 7a8b4d2d2c07fa4533ad445f0ffb9bd8e5b2147b..8eac2eb8e5685eb839884dee46f50643fca9c2f6 100644 (file)
@@ -505,6 +505,32 @@ PHP_FUNCTION(libxml_set_streams_context)
 
 
 /* {{{ Common functions shared by extensions */
+int php_libxml_xmlCheckUTF8(const unsigned char *s)
+{
+       int i;
+       unsigned char c;
+
+       for (i = 0; (c = s[i++]);) {
+               if ((c & 0x80) == 0) {
+               } else if ((c & 0xe0) == 0xc0) {
+                       if ((s[i++] & 0xc0) != 0x80) {
+                               return 0;
+                       }
+               } else if ((c & 0xf0) == 0xe0) {
+                       if ((s[i++] & 0xc0) != 0x80 || (s[i++] & 0xc0) != 0x80) {
+                               return 0;
+                       }
+               } else if ((c & 0xf8) == 0xf0) {
+                       if ((s[i++] & 0xc0) != 0x80 || (s[i++] & 0xc0) != 0x80 || (s[i++] & 0xc0) != 0x80) {
+                               return 0;
+                       }
+               } else {
+                       return 0;
+               }
+       }
+       return 1;
+}
+
 int php_libxml_register_export(zend_class_entry *ce, php_libxml_export_node export_function)
 {
        php_libxml_func_handler export_hnd;
index 5642abc627e858862a9a5af115bb29b6ef5d8a3a..9f7c96f2edc1751ce3573561304139e5438804b0 100644 (file)
@@ -80,6 +80,7 @@ void php_libxml_node_decrement_resource(php_libxml_node_object *object TSRMLS_DC
 PHP_LIBXML_API 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, ...);
+PHP_LIBXML_API int php_libxml_xmlCheckUTF8(const unsigned char *s);
 
 #endif /* HAVE_LIBXML */