]> granicus.if.org Git - php/commitdiff
Fix scheme_getall() function so that data returned by user is always
authorLenar Lõhmus <flex@php.net>
Fri, 1 Nov 2002 14:44:06 +0000 (14:44 +0000)
committerLenar Lõhmus <flex@php.net>
Fri, 1 Nov 2002 14:44:06 +0000 (14:44 +0000)
converted to string except when script returns FALSE or NULL. In this case
signal sablotron that we are not able to handle requested scheme.

ext/xslt/sablot.c

index 8c2961ba13da5d45ae4f739281ae36e7819f576a..08d83e0086ee5985e800b623133ccf35a941b09e 100644 (file)
@@ -853,6 +853,7 @@ static int scheme_getall(void *user_data, SablotHandle proc, const char *scheme,
 {
        zval       *argv[3];                           /* Arguments to the scheme getall function */
        zval       *retval;                            /* Return value from the scheme getall function */
+       int        result;
        php_xslt   *handle = (php_xslt *) user_data;   /* A PHP-XSLT processor */
     TSRMLS_FETCH();
     
@@ -883,16 +884,24 @@ static int scheme_getall(void *user_data, SablotHandle proc, const char *scheme,
                /* return failure */
                return 1;
        }
-       
-       /* Save the return value in the buffer (copying it) */
-       *buffer     = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
-       *byte_count = Z_STRLEN_P(retval);
+
+       if ((Z_TYPE_P(retval) == IS_BOOL && Z_LVAL_P(retval) == 0) || (Z_TYPE_P(retval) == IS_NULL)) {
+               result = 1;
+       } else {
+               /* Convert the return value to string if needed */
+               if (Z_TYPE_P(retval) != IS_STRING)
+                       convert_to_string_ex(&retval);
+
+               /* Save the return value in the buffer (copying it) */
+               *buffer     = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval));
+               *byte_count = Z_STRLEN_P(retval);
+               result = 0;
+       }
 
        /* Free return value */
        zval_ptr_dtor(&retval);
                
-       /* return success */
-       return 0;
+       return result;
 }
 /* }}} */