felipe          Mon Aug  4 18:23:33 2008 UTC

  Modified files:              (Branch: PHP_5_3)
    /php-src/ext/gd     gd.c gd_ctx.c 
  Log:
  - MFH: Added new parameter parsing API (part II)
  
  
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/gd.c?r1=1.312.2.20.2.32.2.14&r2=1.312.2.20.2.32.2.15&diff_format=u
Index: php-src/ext/gd/gd.c
diff -u php-src/ext/gd/gd.c:1.312.2.20.2.32.2.14 
php-src/ext/gd/gd.c:1.312.2.20.2.32.2.15
--- php-src/ext/gd/gd.c:1.312.2.20.2.32.2.14    Fri Jul 18 07:39:53 2008
+++ php-src/ext/gd/gd.c Mon Aug  4 18:23:33 2008
@@ -18,7 +18,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd.c,v 1.312.2.20.2.32.2.14 2008/07/18 07:39:53 tony2001 Exp $ */
+/* $Id: gd.c,v 1.312.2.20.2.32.2.15 2008/08/04 18:23:33 felipe Exp $ */
 
 /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center,
    Cold Spring Harbor Labs. */
@@ -2497,35 +2497,30 @@
  */
 static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int 
image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)())
 {
-       zval **file, **srcx, **srcy, **width, **height;
+       char *file;
+       int file_len;
+       long srcx, srcy, width, height;
        gdImagePtr im = NULL;
-       char *fn=NULL;
        php_stream *stream;
        FILE * fp = NULL;
-       int argc=ZEND_NUM_ARGS();
 #ifdef HAVE_GD_JPG
        long ignore_warning;
 #endif
-
-       if ((image_type == PHP_GDIMG_TYPE_GD2PART && argc != 5) ||
-               (image_type != PHP_GDIMG_TYPE_GD2PART && argc != 1) ||
-               zend_get_parameters_ex(argc, &file, &srcx, &srcy, &width, 
&height) == FAILURE) {
-               ZEND_WRONG_PARAM_COUNT();
-       }
-
-       convert_to_string_ex(file);
-
-       if (argc == 5 && image_type == PHP_GDIMG_TYPE_GD2PART) {
-               multi_convert_to_long_ex(4, srcx, srcy, width, height);
-               if (Z_LVAL_PP(width) < 1 || Z_LVAL_PP(height) < 1) {
-                       php_error_docref(NULL TSRMLS_CC, E_WARNING,"Zero width 
or height not allowed");
+       if (image_type == PHP_GDIMG_TYPE_GD2PART) {
+               if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sllll", 
&file, &file_len, &srcx, &srcy, &width, &height) == FAILURE) {
+                       return;
+               }
+               if (width < 1 || height < 1) {
+                       php_error_docref(NULL TSRMLS_CC, E_WARNING, "Zero width 
or height not allowed");
                        RETURN_FALSE;
                }
+       } else {
+               if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", 
&file, &file_len) == FAILURE) {
+                       return;
+               }
        }
 
-       fn = Z_STRVAL_PP(file);
-
-       stream = php_stream_open_wrapper(fn, "rb", 
ENFORCE_SAFE_MODE|REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL);
+       stream = php_stream_open_wrapper(file, "rb", 
ENFORCE_SAFE_MODE|REPORT_ERRORS|IGNORE_PATH|IGNORE_URL_WIN, NULL);
        if (stream == NULL)     {
                RETURN_FALSE;
        }
@@ -2562,7 +2557,7 @@
                }
 
                if (image_type == PHP_GDIMG_TYPE_GD2PART) {
-                       im = (*ioctx_func_p)(io_ctx, Z_LVAL_PP(srcx), 
Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height));
+                       im = (*ioctx_func_p)(io_ctx, srcx, srcy, width, height);
                } else {
                        im = (*ioctx_func_p)(io_ctx);
                }
@@ -2584,7 +2579,7 @@
        if (!im && fp) {
                switch (image_type) {
                        case PHP_GDIMG_TYPE_GD2PART:
-                               im = (*func_p)(fp, Z_LVAL_PP(srcx), 
Z_LVAL_PP(srcy), Z_LVAL_PP(width), Z_LVAL_PP(height));
+                               im = (*func_p)(fp, srcx, srcy, width, height);
                                break;
 #if defined(HAVE_GD_XPM) && defined(HAVE_GD_BUNDLED)
                        case PHP_GDIMG_TYPE_XPM:
@@ -2617,7 +2612,7 @@
                return;
        }
 
-       php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%s' is not a valid %s 
file", fn, tn);
+       php_error_docref(NULL TSRMLS_CC, E_WARNING, "'%s' is not a valid %s 
file", file, tn);
 out_err:
        php_stream_close(stream);
        RETURN_FALSE;
@@ -4832,12 +4827,12 @@
 #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;   \
        }
http://cvs.php.net/viewvc.cgi/php-src/ext/gd/gd_ctx.c?r1=1.22.2.5.2.3.2.1&r2=1.22.2.5.2.3.2.2&diff_format=u
Index: php-src/ext/gd/gd_ctx.c
diff -u php-src/ext/gd/gd_ctx.c:1.22.2.5.2.3.2.1 
php-src/ext/gd/gd_ctx.c:1.22.2.5.2.3.2.2
--- php-src/ext/gd/gd_ctx.c:1.22.2.5.2.3.2.1    Mon Dec 31 07:17:08 2007
+++ php-src/ext/gd/gd_ctx.c     Mon Aug  4 18:23:33 2008
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: gd_ctx.c,v 1.22.2.5.2.3.2.1 2007/12/31 07:17:08 sebastian Exp $ */
+/* $Id: gd_ctx.c,v 1.22.2.5.2.3.2.2 2008/08/04 18:23:33 felipe Exp $ */
 
 #include "php_gd.h"
 
@@ -49,9 +49,11 @@
 /* {{{ _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,39 +65,37 @@
         * 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;
                }
 
@@ -137,7 +137,7 @@
                                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);
                        }



-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to