cvs: php4 /ext/gd gd.c php_gd.h

From: Date: Tue, 26 Sep 2000 09:08:02 +0000
Subject: cvs: php4 /ext/gd gd.c php_gd.h
Groups: php.cvs 
Request: Send a blank email to php-cvs+get-1828@lists.php.net to get a copy of this message
stas Tue Sep 26 02:08:02 2000 EDT Modified files: /php4/ext/gd gd.c php_gd.h Log: Add URL support for GD Index: php4/ext/gd/gd.c diff -u php4/ext/gd/gd.c:1.85 php4/ext/gd/gd.c:1.86 --- php4/ext/gd/gd.c:1.85 Mon Aug 21 21:11:57 2000 +++ php4/ext/gd/gd.c Tue Sep 26 02:08:02 2000 @@ -18,7 +18,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: gd.c,v 1.85 2000/08/22 04:11:57 andi Exp $ */ +/* $Id: gd.c,v 1.86 2000/09/26 09:08:02 stas Exp $ */ /* gd 1.2 is copyright 1994, 1995, Quest Protein Database Center, Cold Spring Harbor Labs. */ @@ -30,6 +30,7 @@ #include <math.h> #include "SAPI.h" #include "php_gd.h" +#include "ext/standard/fsock.h" #if HAVE_SYS_WAIT_H # include <sys/wait.h> @@ -64,6 +65,19 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int); #endif +#ifdef GD2_VERS +/* it's >= 1.5, i.e. has IOCtx */ +#define USE_GD_IOCTX 1 +#else +#undef USE_GD_IOCTX +#endif + +#ifndef USE_GD_IOCTX +#define gdImageCreateFromJpegCtx NULL +#define gdImageCreateFromPngCtx NULL +#define gdImageCreateFromWBMPCtx NULL +#endif + #ifdef THREAD_SAFE DWORD GDlibTls; static int numthreads=0; @@ -455,7 +469,7 @@ RETURN_LONG(ret); } -static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)()) { +static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)()) { zval **file; gdImagePtr im; char *fn=NULL; @@ -473,16 +487,54 @@ #else fp = php_fopen_wrapper(Z_STRVAL_PP(file), "r", IGNORE_PATH|IGNORE_URL_WIN, &issock, &socketd, NULL); #endif - if (!fp) { + if (!fp && !socketd) { php_strip_url_passwd(fn); php_error(E_WARNING, "%s: Unable to open '%s' for reading", get_active_function_name(), fn); RETURN_FALSE; } - im = (*func_p)(fp); +#ifndef USE_GD_IOCTX + ioctx_func_p = NULL; /* don't allow sockets without IOCtx */ +#endif - fflush(fp); - fclose(fp); + if(issock && !ioctx_func_p) { + php_error(E_WARNING, "%s: Sockets are not supported for image type '%s'",get_active_function_name(),tn); + RETURN_FALSE; + } + + if(issock && socketd) { +#ifdef USE_GD_IOCTX + gdIOCtx* io_ctx; +#define CHUNK_SIZE 8192 + int read_len=0,buff_len=0,buff_size=5*CHUNK_SIZE; + char *buff,*buff_cur; + + buff = malloc(buff_size); /* Should be malloc! GD uses free */ + buff_cur = buff; + + do { + if(buff_len > buff_size - CHUNK_SIZE) { + buff_size += CHUNK_SIZE; + buff = realloc(buff, buff_size); + } + read_len = SOCK_FREAD(buff_cur, CHUNK_SIZE, socketd); + buff_len += read_len; + buff_cur += read_len; + } while(read_len>0); + + io_ctx = gdNewDynamicCtx(buff_len,buff); + if(!io_ctx) { + php_error(E_WARNING,"%s: Cannot allocate GD IO context",get_active_function_name()); + } + im = (*ioctx_func_p)(io_ctx); + io_ctx->free(io_ctx); +#endif + } else { + im = (*func_p)(fp); + + fflush(fp); + fclose(fp); + } if (!im) { php_error(E_WARNING,"%s: '%s' is not a valid %s file", get_active_function_name(), fn, tn); @@ -497,7 +549,7 @@ PHP_FUNCTION(imagecreatefromgif) { #ifdef HAVE_GD_GIF - _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageCreateFromGif); + _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_GIF, "GIF", gdImageCreateFromGif,NULL); #else /* HAVE_GD_GIF */ php_error(E_WARNING, "ImageCreateFromGif: No GIF support in this PHP build"); RETURN_FALSE; @@ -510,7 +562,7 @@ PHP_FUNCTION(imagecreatefromjpeg) { #ifdef HAVE_GD_JPG - _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageCreateFromJpeg); + _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_JPG, "JPEG", gdImageCreateFromJpeg,gdImageCreateFromJpegCtx); #else /* HAVE_GD_JPG */ php_error(E_WARNING, "ImageCreateFromJpeg: No JPEG support in this PHP build"); RETURN_FALSE; @@ -523,7 +575,7 @@ PHP_FUNCTION(imagecreatefrompng) { #ifdef HAVE_GD_PNG - _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImageCreateFromPng); + _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_PNG, "PNG", gdImageCreateFromPng,gdImageCreateFromPngCtx); #else /* HAVE_GD_PNG */ php_error(E_WARNING, "ImageCreateFromPng: No PNG support in this PHP build"); RETURN_FALSE; @@ -536,7 +588,7 @@ PHP_FUNCTION(imagecreatefromxbm) { #ifdef HAVE_GD_XBM - _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageCreateFromXbm); + _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XBM, "XBM", gdImageCreateFromXbm,NULL); #else /* HAVE_GD_XBM */ php_error(E_WARNING, "ImageCreateFromXbm: No XBM support in this PHP build"); RETURN_FALSE; @@ -550,7 +602,7 @@ { /* #ifdef HAVE_GD_XPM - _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XPM, "XPM", gdImageCreateFromXpm); + _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_XPM, "XPM", gdImageCreateFromXpm,NULL); #else */ php_error(E_WARNING, "ImageCreateFromXpm: No XPM support in this PHP build"); @@ -566,7 +618,7 @@ PHP_FUNCTION(imagecreatefromwbmp) { #ifdef HAVE_GD_WBMP - _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageCreateFromWBMP); + _php_image_create_from(INTERNAL_FUNCTION_PARAM_PASSTHRU, PHP_GDIMG_TYPE_WBM, "WBMP", gdImageCreateFromWBMP,gdImageCreateFromWBMPCtx); #else /* HAVE_GD_WBMP */ php_error(E_WARNING, "ImageCreateFromWBMP: No WBMP support in this PHP build"); RETURN_FALSE; Index: php4/ext/gd/php_gd.h diff -u php4/ext/gd/php_gd.h:1.16 php4/ext/gd/php_gd.h:1.17 --- php4/ext/gd/php_gd.h:1.16 Sun Jul 23 18:39:46 2000 +++ php4/ext/gd/php_gd.h Tue Sep 26 02:08:02 2000 @@ -17,7 +17,7 @@ +----------------------------------------------------------------------+ */ -/* $Id: php_gd.h,v 1.16 2000/07/24 01:39:46 david Exp $ */ +/* $Id: php_gd.h,v 1.17 2000/09/26 09:08:02 stas Exp $ */ #ifndef PHP_GD_H #define PHP_GD_H @@ -128,7 +128,7 @@ PHP_FUNCTION(imagepsbbox); PHPAPI int phpi_get_le_gd(void); -static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)()); +static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, gdImagePtr (*func_p)(), gdImagePtr (*ioctx_func_p)()); static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)()); static void _php_image_output_wbmp(gdImagePtr im, FILE *fp);

« previous php.cvs (#1828) next »