]> granicus.if.org Git - php/commitdiff
Add strncasecmp function
authorStanislav Malyshev <stas@php.net>
Wed, 26 Jul 2000 11:32:15 +0000 (11:32 +0000)
committerStanislav Malyshev <stas@php.net>
Wed, 26 Jul 2000 11:32:15 +0000 (11:32 +0000)
@ Added strncasecmp function (Andi)

Zend/zend_builtin_functions.c
Zend/zend_operators.c
Zend/zend_operators.h

index 079943afef5c5c162dbb14b1dd52630e694b0147..2bfe2764e13dbb0c963c6b7527173bd26774403b 100644 (file)
@@ -33,6 +33,7 @@ static ZEND_FUNCTION(strlen);
 static ZEND_FUNCTION(strcmp);
 static ZEND_FUNCTION(strncmp);
 static ZEND_FUNCTION(strcasecmp);
+static ZEND_FUNCTION(strncasecmp);
 static ZEND_FUNCTION(each);
 static ZEND_FUNCTION(error_reporting);
 static ZEND_FUNCTION(define);
@@ -76,6 +77,7 @@ static zend_function_entry builtin_functions[] = {
        ZEND_FE(strcmp,                         NULL)
        ZEND_FE(strncmp,                        NULL)
        ZEND_FE(strcasecmp,                     NULL)
+       ZEND_FE(strncasecmp,            NULL)
        ZEND_FE(each,                           first_arg_force_ref)
        ZEND_FE(error_reporting,        NULL)
        ZEND_FE(define,                         NULL)
@@ -274,6 +276,22 @@ ZEND_FUNCTION(strcasecmp)
 }
 /* }}} */
 
+/* {{{ proto int strncasecmp(string str1, string str2, int len)
+   Binary safe string comparison */
+ZEND_FUNCTION(strncasecmp)
+{
+       zval **s1, **s2, **s3;
+       
+       if (ZEND_NUM_ARGS() != 3 || zend_get_parameters_ex(3, &s1, &s2, &s3) == FAILURE) {
+               ZEND_WRONG_PARAM_COUNT();
+       }
+       convert_to_string_ex(s1);
+       convert_to_string_ex(s2);
+       convert_to_long_ex(s3);
+       RETURN_LONG(zend_binary_zval_strncasecmp(*s1,*s2,*s3));
+}
+/* }}} */
+
 ZEND_FUNCTION(each)
 {
        zval **array,*entry,**entry_ptr, *tmp;
index 6b51218827a7a7163be5622af6a1c354e709650c..e1e7cd2d36c18f3b9898a1db8e6c3a12bc64d55e 100644 (file)
@@ -1473,6 +1473,25 @@ ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2)
 }
 
 
+ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length)
+{
+       int len;
+       int c1,c2;
+
+       len = MIN(length, MIN(len1, len2));
+
+       while (len--) {
+               c1 = tolower(*s1++);
+               c2 = tolower(*s2++);
+               if (c1 != c2) {
+                       return c1 - c2;
+               }
+       }
+
+       return len1 - len2;
+}
+
+
 ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2)
 {
        return zend_binary_strcmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len);
@@ -1490,6 +1509,12 @@ ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2)
 }
 
 
+ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3)
+{
+       return zend_binary_strncasecmp(s1->value.str.val, s1->value.str.len, s2->value.str.val, s2->value.str.len, s3->value.lval);
+}
+
+
 ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2)
 {
        int ret1,ret2;
index ef9c8da3ab7309b82675295817b7ed5c50ebc7ba..3cdbda42cedee7469abf962ecd54e5a058bd19ee 100644 (file)
@@ -148,9 +148,11 @@ ZEND_API void zend_str_tolower(char *str, unsigned int length);
 ZEND_API int zend_binary_zval_strcmp(zval *s1, zval *s2);
 ZEND_API int zend_binary_zval_strncmp(zval *s1, zval *s2, zval *s3);
 ZEND_API int zend_binary_zval_strcasecmp(zval *s1, zval *s2);
+ZEND_API int zend_binary_zval_strncasecmp(zval *s1, zval *s2, zval *s3);
 ZEND_API int zend_binary_strcmp(char *s1, uint len1, char *s2, uint len2);
 ZEND_API int zend_binary_strncmp(char *s1, uint len1, char *s2, uint len2, uint length);
 ZEND_API int zend_binary_strcasecmp(char *s1, uint len1, char *s2, uint len2);
+ZEND_API int zend_binary_strncasecmp(char *s1, uint len1, char *s2, uint len2, uint length);
 
 ZEND_API void zendi_smart_strcmp(zval *result, zval *s1, zval *s2);
 ZEND_API void zend_compare_symbol_tables(zval *result, HashTable *ht1, HashTable *ht2);