]> granicus.if.org Git - php/commitdiff
- MFH
authorDerick Rethans <derick@php.net>
Mon, 24 Jun 2002 08:24:21 +0000 (08:24 +0000)
committerDerick Rethans <derick@php.net>
Mon, 24 Jun 2002 08:24:21 +0000 (08:24 +0000)
ext/standard/string.c
ext/standard/versioning.c

index d33e77bf33406f8eb947dc6527d2a9592369604e..c6d9844ca32f6394024db97fec3ceeb02ff34729 100644 (file)
@@ -1811,7 +1811,7 @@ PHP_FUNCTION(ucfirst)
        convert_to_string_ex(str);
 
        if (!Z_STRLEN_PP(str)) {
-               RETURN_FALSE;
+               RETURN_EMPTY_STRING();
        }
 
        ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
@@ -1832,7 +1832,7 @@ PHP_FUNCTION(ucwords)
        convert_to_string_ex(str);
 
        if (!Z_STRLEN_PP(str)) {
-               RETURN_FALSE;
+               RETURN_EMPTY_STRING();
        }
 
        ZVAL_STRINGL(return_value, Z_STRVAL_PP(str), Z_STRLEN_PP(str), 1);
@@ -2118,7 +2118,6 @@ PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC)
 {
        char *s, *t;
        int l;
-       char escape_char='\\';
 
        if (len != NULL) {
                l = *len;
@@ -2137,8 +2136,16 @@ PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC)
                                                (*len)--;
                                        l--;
                                }
-                       } 
-                       *s++ = *t++;
+                               *s++ = *t++;
+                       } else if (*t=='\\' && l>0 && t[1]=='0') {
+                               *s++='\0';
+                               t += 2;
+                               if (len != NULL)
+                                       (*len)--;
+                               l--;
+                       } else {
+                               *s++ = *t++;
+                       }
                        l--;
                }
                *s = '\0';
@@ -2148,7 +2155,7 @@ PHPAPI void php_stripslashes(char *str, int *len TSRMLS_DC)
  
 
        while (l > 0) {
-               if (*t == escape_char) {
+               if (*t == '\\') {
                        t++;                            /* skip the slash */
                        if (len != NULL)
                                (*len)--;
index 06233bfc93a7533ac6eef729714275d25831e23a..bb601a4f319940c1543f402ba2d41bae7db5b722 100644 (file)
@@ -105,12 +105,21 @@ compare_special_version_forms(const char *form1, const char *form2)
 PHPAPI int
 php_version_compare(const char *orig_ver1, const char *orig_ver2)
 {
-       char *ver1 = php_canonicalize_version(orig_ver1);
-       char *ver2 = php_canonicalize_version(orig_ver2);
+       char *ver1;
+       char *ver2;
        char *p1, *p2, *n1, *n2;
        long l1, l2;
        int compare = 0;
 
+       if (!*orig_ver1 || !*orig_ver2) {
+               if (!*orig_ver1 && !*orig_ver2) {
+                       return 0;
+               } else {
+                       return *orig_ver1 ? 1 : -1;
+               }
+       }
+       ver1 = php_canonicalize_version(orig_ver1);
+       ver2 = php_canonicalize_version(orig_ver2);
        p1 = n1 = ver1;
        p2 = n2 = ver2;
        while (*p1 && *p2 && n1 && n2) {
@@ -187,22 +196,22 @@ PHP_FUNCTION(version_compare)
        if (argc == 2) {
                RETURN_LONG(compare);
        }
-       if (!strcmp(op, "<") || !strcmp(op, "lt")) {
+       if (!strncmp(op, "<", op_len) || !strncmp(op, "lt", op_len)) {
                RETURN_BOOL(compare == -1);
        }
-       if (!strcmp(op, "<=") || !strcmp(op, "le")) {
+       if (!strncmp(op, "<=", op_len) || !strncmp(op, "le", op_len)) {
                RETURN_BOOL(compare != 1);
        }
-       if (!strcmp(op, ">") || !strcmp(op, "gt")) {
+       if (!strncmp(op, ">", op_len) || !strncmp(op, "gt", op_len)) {
                RETURN_BOOL(compare == 1);
        }
-       if (!strcmp(op, ">=") || !strcmp(op, "ge")) {
+       if (!strncmp(op, ">=", op_len) || !strncmp(op, "ge", op_len)) {
                RETURN_BOOL(compare != -1);
        }
-       if (!strcmp(op, "==") || !strcmp(op, "=") || !strcmp(op, "eq")) {
+       if (!strncmp(op, "==", op_len) || !strncmp(op, "=", op_len) || !strncmp(op, "eq", op_len)) {
                RETURN_BOOL(compare == 0);
        }
-       if (!strcmp(op, "!=") || !strcmp(op, "<>") || !strcmp(op, "ne")) {
+       if (!strncmp(op, "!=", op_len) || !strncmp(op, "<>", op_len) || !strncmp(op, "ne", op_len)) {
                RETURN_BOOL(compare != 0);
        }
        RETURN_NULL();