Browse Source

- Added new parameter parsing API (part II)

experimental/first_unicode_implementation
Felipe Pena 18 years ago
parent
commit
0e645a745c
  1. 6
      ext/gd/gd.c
  2. 46
      ext/gd/gd_ctx.c

6
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; \
}

46
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<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);
}

Loading…
Cancel
Save