]> granicus.if.org Git - php/commitdiff
- Added new parameter parsing API (part II)
authorFelipe Pena <felipe@php.net>
Mon, 4 Aug 2008 18:22:02 +0000 (18:22 +0000)
committerFelipe Pena <felipe@php.net>
Mon, 4 Aug 2008 18:22:02 +0000 (18:22 +0000)
ext/gd/gd.c
ext/gd/gd_ctx.c

index 67b760f5997f1d2c3f6421fcaa867fb85cdc22b2..99df0dd6264ea01d297fc5ff5e614030f2195a3b 100644 (file)
@@ -4528,12 +4528,12 @@ convert_done:
 #ifdef HAVE_GD_BUNDLED
 
 #define PHP_GD_SINGLE_RES      \
-       zval **SIM;     \
+       zval *SIM;      \
        gdImagePtr im_src;      \
-       if (zend_get_parameters_ex(1, &SIM) == FAILURE) {       \
+       if (zend_parse_parameters(1 TSRMLS_CC, "r", &SIM) == FAILURE) { \
                RETURN_FALSE;   \
        }       \
-       ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);       \
+       ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);      \
        if (im_src == NULL) {   \
                RETURN_FALSE;   \
        }
index 5cc49e64d33c47af7ae525cc927b9e6ef021df76..d703c9647cd198e03aa1bd1e4cd8b943bbb7203e 100644 (file)
@@ -49,9 +49,11 @@ static void _php_image_output_ctxfree(struct gdIOCtx *ctx)
 /* {{{ _php_image_output_ctx */
 static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())
 {
-       zval **imgind, **file, **quality, **basefilter;
+       zval *imgind;
+       char *file = NULL;
+       int file_len = 0;
+       long quality, basefilter;
        gdImagePtr im;
-       char *fn = NULL;
        FILE *fp = NULL;
        int argc = ZEND_NUM_ARGS();
        int q = -1, i;
@@ -63,37 +65,37 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
         * from imagey<type>().
         */
 
-       if (argc < 2 && image_type == PHP_GDIMG_TYPE_XBM) {
-               WRONG_PARAM_COUNT;
-       }
-       if (argc < 1 || argc > 4 || zend_get_parameters_ex(argc, &imgind, &file, &quality, &basefilter) == FAILURE)
-       {
-               WRONG_PARAM_COUNT;
+       if (image_type == PHP_GDIMG_TYPE_XBM) {
+               if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs!|ll", &imgind, &file, &file_len, &quality, &basefilter) == FAILURE) {
+                       return;
+               }
+       } else {
+               /* PHP_GDIMG_TYPE_GIF
+                * PHP_GDIMG_TYPE_PNG 
+                * PHP_GDIMG_TYPE_JPG 
+                * PHP_GDIMG_TYPE_WBM */
+               if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r|s!ll", &imgind, &file, &file_len, &quality, &basefilter) == FAILURE) {
+                       return;
+               }               
        }
 
-       ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", phpi_get_le_gd());
+       ZEND_FETCH_RESOURCE(im, gdImagePtr, &imgind, -1, "Image", phpi_get_le_gd());
 
        if (argc > 1) {
-        if (argc >= 2 && Z_TYPE_PP(file) != IS_NULL) {
-                       convert_to_string_ex(file);
-               }
-               fn = Z_STRVAL_PP(file);
                if (argc >= 3) {
-                       convert_to_long_ex(quality);
-                       q = Z_LVAL_PP(quality);/* or colorindex for foreground of BW images (defaults to black) */
+                       q = quality; /* or colorindex for foreground of BW images (defaults to black) */
                        if (argc == 4) {
-                               convert_to_long_ex(basefilter);
-                               f = Z_LVAL_PP(basefilter);
+                               f = basefilter;
                        }
                }
        }
 
-    if (argc > 1 && (Z_TYPE_PP(file) != IS_NULL && ((argc == 2) || (argc > 2 && Z_STRLEN_PP(file))))) {
-               PHP_GD_CHECK_OPEN_BASEDIR(fn, "Invalid filename");
+    if (argc > 1 && file_len) {
+               PHP_GD_CHECK_OPEN_BASEDIR(file, "Invalid filename");
 
-               fp = VCWD_FOPEN(fn, "wb");
+               fp = VCWD_FOPEN(file, "wb");
                if (!fp) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' for writing: %s", fn, strerror(errno));
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to open '%s' for writing: %s", file, strerror(errno));
                        RETURN_FALSE;
                }
 
@@ -125,7 +127,7 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
                                q = i;
                        }
                        if (image_type == PHP_GDIMG_TYPE_XBM) {
-                               (*func_p)(im, fn, q, ctx);
+                               (*func_p)(im, file, q, ctx);
                        } else {
                                (*func_p)(im, q, ctx);
                        }