cvs: php-src /ext/standard array.c ZendEngine2 zend_operators.c zend_operators.h
| From: | Derick Rethans | Date: | Sat, 11 Sep 2004 14:22:36 +0000 |
| Subject: | cvs: php-src /ext/standard array.c ZendEngine2 zend_operators.c zend_operators.h | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-28644@lists.php.net to get a copy of this message | ||
derick Sat Sep 11 10:22:36 2004 EDT
Modified files:
/ZendEngine2 zend_operators.c zend_operators.h
/php-src/ext/standard array.c
Log:
- MFB: Added the sorting flag SORT_LOCALE_STRING to the sort() functions which
makes them sort based on the current locale. (Derick)
http://cvs.php.net/diff.php/ZendEngine2/zend_operators.c?r1=1.195&r2=1.196&ty=u
Index: ZendEngine2/zend_operators.c
diff -u ZendEngine2/zend_operators.c:1.195 ZendEngine2/zend_operators.c:1.196
--- ZendEngine2/zend_operators.c:1.195 Fri Sep 10 20:23:20 2004
+++ ZendEngine2/zend_operators.c Sat Sep 11 10:22:35 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_operators.c,v 1.195 2004/09/11 00:23:20 andi Exp $ */
+/* $Id: zend_operators.c,v 1.196 2004/09/11 14:22:35 derick Exp $ */
#include <ctype.h>
@@ -1221,6 +1221,35 @@
}
return SUCCESS;
}
+
+#if HAVE_STRCOLL
+ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
+{
+ zval op1_copy, op2_copy;
+ int use_copy1, use_copy2;
+
+ zend_make_printable_zval(op1, &op1_copy, &use_copy1);
+ zend_make_printable_zval(op2, &op2_copy, &use_copy2);
+
+ if (use_copy1) {
+ op1 = &op1_copy;
+ }
+ if (use_copy2) {
+ op2 = &op2_copy;
+ }
+
+ result->value.lval = strcoll(op1->value.str.val, op2->value.str.val);
+ result->type = IS_LONG;
+
+ if (use_copy1) {
+ zval_dtor(op1);
+ }
+ if (use_copy2) {
+ zval_dtor(op2);
+ }
+ return SUCCESS;
+}
+#endif
ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC)
{
http://cvs.php.net/diff.php/ZendEngine2/zend_operators.h?r1=1.89&r2=1.90&ty=u
Index: ZendEngine2/zend_operators.h
diff -u ZendEngine2/zend_operators.h:1.89 ZendEngine2/zend_operators.h:1.90
--- ZendEngine2/zend_operators.h:1.89 Thu Jul 15 22:03:25 2004
+++ ZendEngine2/zend_operators.h Sat Sep 11 10:22:35 2004
@@ -17,7 +17,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: zend_operators.h,v 1.89 2004/07/16 02:03:25 iliaa Exp $ */
+/* $Id: zend_operators.h,v 1.90 2004/09/11 14:22:35 derick Exp $ */
#ifndef ZEND_OPERATORS_H
#define ZEND_OPERATORS_H
@@ -179,6 +179,9 @@
ZEND_API int compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
ZEND_API int numeric_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
ZEND_API int string_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
+#if HAVE_STRCOLL
+ZEND_API int string_locale_compare_function(zval *result, zval *op1, zval *op2 TSRMLS_DC);
+#endif
ZEND_API void zend_str_tolower(char *str, unsigned int length);
ZEND_API char *zend_str_tolower_copy(char *dest, const char *source, unsigned int length);
http://cvs.php.net/diff.php/php-src/ext/standard/array.c?r1=1.273&r2=1.274&ty=u
Index: php-src/ext/standard/array.c
diff -u php-src/ext/standard/array.c:1.273 php-src/ext/standard/array.c:1.274
--- php-src/ext/standard/array.c:1.273 Wed Aug 25 20:26:19 2004
+++ php-src/ext/standard/array.c Sat Sep 11 10:22:35 2004
@@ -21,7 +21,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: array.c,v 1.273 2004/08/26 00:26:19 iliaa Exp $ */
+/* $Id: array.c,v 1.274 2004/09/11 14:22:35 derick Exp $ */
#include "php.h"
#include "php_ini.h"
@@ -65,6 +65,7 @@
#define SORT_REGULAR 0
#define SORT_NUMERIC 1
#define SORT_STRING 2
+#define SORT_LOCALE_STRING 5
#define SORT_DESC 3
#define SORT_ASC 4
@@ -114,6 +115,8 @@
REGISTER_LONG_CONSTANT("SORT_REGULAR", SORT_REGULAR, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SORT_NUMERIC", SORT_NUMERIC, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("SORT_STRING", SORT_STRING, CONST_CS | CONST_PERSISTENT);
+ REGISTER_LONG_CONSTANT("SORT_LOCALE_STRING", SORT_LOCALE_STRING, CONST_CS |
CONST_PERSISTENT);
+
REGISTER_LONG_CONSTANT("CASE_LOWER", CASE_LOWER, CONST_CS | CONST_PERSISTENT);
REGISTER_LONG_CONSTANT("CASE_UPPER", CASE_UPPER, CONST_CS | CONST_PERSISTENT);
@@ -142,6 +145,12 @@
case SORT_STRING:
ARRAYG(compare_func) = string_compare_function;
break;
+
+#if HAVE_STRCOLL
+ case SORT_LOCALE_STRING:
+ ARRAYG(compare_func) = string_locale_compare_function;
+ break;
+#endif
case SORT_REGULAR:
default: