From: Felipe Pena Date: Mon, 4 Aug 2008 18:22:02 +0000 (+0000) Subject: - Added new parameter parsing API (part II) X-Git-Tag: BEFORE_HEAD_NS_CHANGE~877 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=0e645a745cbf490058d42766634c3ccf52eb1038;p=php - Added new parameter parsing API (part II) --- diff --git a/ext/gd/gd.c b/ext/gd/gd.c index 67b760f599..99df0dd626 100644 --- a/ext/gd/gd.c +++ b/ext/gd/gd.c @@ -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; \ } diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c index 5cc49e64d3..d703c9647c 100644 --- a/ext/gd/gd_ctx.c +++ b/ext/gd/gd_ctx.c @@ -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(). */ - 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); }