]> granicus.if.org Git - php/commitdiff
accept strings and arrays as callback name
authorAntony Dovgal <tony2001@php.net>
Tue, 6 Dec 2005 15:16:33 +0000 (15:16 +0000)
committerAntony Dovgal <tony2001@php.net>
Tue, 6 Dec 2005 15:16:33 +0000 (15:16 +0000)
ext/filter/filter.c

index 2249fd769b4bdf52bf5d54f7fb3d321e04f01a6c..f618cd12e90216f7b36e2ccbdf5718da030defd0 100644 (file)
@@ -635,22 +635,38 @@ PHP_FUNCTION(filter_data)
                return;
        }
 
-       if (flags) {
-               switch (Z_TYPE_P(flags)) {
-                       case IS_ARRAY:
-                               options = flags;
-                               break;
-
-                       case IS_STRING:
-                       case IS_BOOL:
-                       case IS_LONG:
-                               convert_to_long(flags);
-                               filter_flags = Z_LVAL_P(flags);
-                               options = NULL;
-                               break;
+       if (filter != FC_CALLBACK) {
+               if (flags) {
+                       switch (Z_TYPE_P(flags)) {
+                               case IS_ARRAY:
+                                       options = flags;
+                                       break;
+
+                               case IS_STRING:
+                               case IS_BOOL:
+                               case IS_LONG:
+                                       convert_to_long(flags);
+                                       filter_flags = Z_LVAL_P(flags);
+                                       options = NULL;
+                                       break;
+                       }
+               }
+       }
+       else {
+               if (flags) {
+                       switch (Z_TYPE_P(flags)) {
+                               case IS_ARRAY:
+                               case IS_STRING:
+                                       options = flags;
+                                       break;
+
+                               default:
+                                       convert_to_string(flags);
+                                       options = flags;
+                                       break;
+                       }
                }
        }
-
        php_zval_filter_recursive(var, filter, filter_flags, options, charset TSRMLS_CC);
        RETURN_ZVAL(var, 1, 0);
 }