From: Andrei Zmievski Date: Wed, 25 Oct 2006 17:28:20 +0000 (+0000) Subject: Unicode support for fnmatch(). X-Git-Tag: RELEASE_1_0_0RC1~1206 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=bee52acb7db69acb1fe27a8d0c4f4e4b28926783;p=php Unicode support for fnmatch(). --- diff --git a/ext/standard/file.c b/ext/standard/file.c index 6f9ca62b73..bc36855b84 100644 --- a/ext/standard/file.c +++ b/ext/standard/file.c @@ -2562,22 +2562,36 @@ php_meta_tags_token php_next_meta_token(php_meta_tags_data *md TSRMLS_DC) /* }}} */ #ifdef HAVE_FNMATCH -/* {{{ proto bool fnmatch(string pattern, string filename [, int flags]) +/* {{{ proto bool fnmatch(string pattern, string filename [, int flags]) U Match filename against pattern */ PHP_FUNCTION(fnmatch) { - char *pattern, *filename; + zstr pattern, filename; int pattern_len, filename_len; + char *pattern_utf8, *filename_utf8; + int pattern_utf8_len, filename_utf8_len; + zend_uchar type; long flags = 0; + UErrorCode status = U_ZERO_ERROR; - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss|l", - &pattern, &pattern_len, - &filename, &filename_len, - &flags) - == FAILURE) + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "TT|l", &pattern, + &pattern_len, &type, &filename, &filename_len, &type, &flags) == FAILURE) { return; + } + + if (type == IS_UNICODE) { + zend_unicode_to_string_ex(UG(utf8_conv), &pattern_utf8, &pattern_utf8_len, pattern.u, pattern_len, &status); + zend_unicode_to_string_ex(UG(utf8_conv), &filename_utf8, &filename_utf8_len, filename.u, filename_len, &status); + pattern.s = pattern_utf8; + filename.s = filename_utf8; + } + + RETVAL_BOOL( ! fnmatch( pattern.s, filename.s, flags )); - RETURN_BOOL( ! fnmatch( pattern, filename, flags )); + if (type == IS_UNICODE) { + efree(pattern_utf8); + efree(filename_utf8); + } } /* }}} */ #endif