summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Zend/zend_API.c4
-rw-r--r--Zend/zend_hash.c4
-rw-r--r--ext/gd/gd.c500
-rw-r--r--ext/gd/gd_ctx.c28
-rw-r--r--ext/iconv/iconv.c2
-rw-r--r--ext/pdo_mysql/tests/config.inc2
-rw-r--r--ext/pdo_sqlite/sqlite_driver.c4
-rw-r--r--ext/phar/phar.c18
-rw-r--r--ext/phar/phar_object.c28
-rw-r--r--ext/phar/tar.c2
-rw-r--r--ext/phar/util.c31
-rw-r--r--ext/session/mod_files.c2
-rw-r--r--ext/spl/spl_directory.c5
-rw-r--r--ext/xmlrpc/libxmlrpc/xmlrpc.c2
-rw-r--r--ext/xmlrpc/xmlrpc-epi-php.c767
15 files changed, 650 insertions, 749 deletions
diff --git a/Zend/zend_API.c b/Zend/zend_API.c
index f944de9df3..6ef4c0b467 100644
--- a/Zend/zend_API.c
+++ b/Zend/zend_API.c
@@ -2883,11 +2883,11 @@ static int zend_is_callable_check_func(int check_flags, zval *callable, zend_fca
/* Skip leading \ */
if (Z_STRVAL_P(callable)[0] == '\\') {
- lmname = do_alloca(Z_STRLEN_P(callable) - 1, use_heap);
+ lmname = do_alloca(Z_STRLEN_P(callable), use_heap);
lmname_len = Z_STRLEN_P(callable) - 1;
zend_str_tolower_copy(lmname, Z_STRVAL_P(callable) + 1, lmname_len);
} else {
- lmname = do_alloca(Z_STRLEN_P(callable), use_heap);
+ lmname = do_alloca(Z_STRLEN_P(callable) + 1, use_heap);
lmname_len = Z_STRLEN_P(callable);
zend_str_tolower_copy(lmname, Z_STRVAL_P(callable), lmname_len);
}
diff --git a/Zend/zend_hash.c b/Zend/zend_hash.c
index 3ffdf6ef76..41805a2f92 100644
--- a/Zend/zend_hash.c
+++ b/Zend/zend_hash.c
@@ -675,6 +675,10 @@ ZEND_API int zend_hash_str_del(HashTable *ht, const char *str, int len)
IS_CONSISTENT(ht);
+ if (ht->u.flags & HASH_FLAG_PACKED) {
+ return FAILURE;
+ }
+
h = zend_inline_hash_func(str, len);
nIndex = h & ht->nTableMask;
diff --git a/ext/gd/gd.c b/ext/gd/gd.c
index 33416a23d9..f4245b93fd 100644
--- a/ext/gd/gd.c
+++ b/ext/gd/gd.c
@@ -64,8 +64,8 @@ static int le_gd, le_gd_font;
#if HAVE_LIBT1
#include <t1lib.h>
static int le_ps_font, le_ps_enc;
-static void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC);
-static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC);
+static void php_free_ps_font(zend_resource *rsrc TSRMLS_DC);
+static void php_free_ps_enc(zend_resource *rsrc TSRMLS_DC);
#endif
#include <gd.h>
@@ -135,7 +135,7 @@ static void php_image_filter_smooth(INTERNAL_FUNCTION_PARAMETERS);
static void php_image_filter_pixelate(INTERNAL_FUNCTION_PARAMETERS);
/* End Section filters declarations */
-static gdImagePtr _php_image_create_from_string (zval **Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC);
+static gdImagePtr _php_image_create_from_string (zval *Data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC);
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 int _php_image_type(char data[8]);
@@ -1072,7 +1072,7 @@ PHP_INI_END()
/* {{{ php_free_gd_image
*/
-static void php_free_gd_image(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void php_free_gd_image(zend_resource *rsrc TSRMLS_DC)
{
gdImageDestroy((gdImagePtr) rsrc->ptr);
}
@@ -1080,7 +1080,7 @@ static void php_free_gd_image(zend_rsrc_list_entry *rsrc TSRMLS_DC)
/* {{{ php_free_gd_font
*/
-static void php_free_gd_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void php_free_gd_font(zend_resource *rsrc TSRMLS_DC)
{
gdFontPtr fp = (gdFontPtr) rsrc->ptr;
@@ -1419,9 +1419,10 @@ PHP_GD_API int phpi_get_le_gd(void)
Load a new font */
PHP_FUNCTION(imageloadfont)
{
+ zval *ind;
char *file;
int file_name, hdr_size = sizeof(gdFont) - sizeof(char *);
- int ind, body_size, n = 0, b, i, body_size_check;
+ int body_size, n = 0, b, i, body_size_check;
gdFontPtr font;
php_stream *stream;
@@ -1508,13 +1509,13 @@ PHP_FUNCTION(imageloadfont)
}
php_stream_close(stream);
+ ind = zend_list_insert(font, le_gd_font TSRMLS_CC);
+
/* Adding 5 to the font index so we will never have font indices
* that overlap with the old fonts (with indices 1-5). The first
* list index given out is always 1.
*/
- ind = 5 + zend_list_insert(font, le_gd_font TSRMLS_CC);
-
- RETURN_LONG(ind);
+ RETURN_LONG(Z_RES_HANDLE_P(ind) + 5);
}
/* }}} */
@@ -1522,40 +1523,30 @@ PHP_FUNCTION(imageloadfont)
Set the line drawing styles for use with imageline and IMG_COLOR_STYLED. */
PHP_FUNCTION(imagesetstyle)
{
- zval *IM, *styles;
+ zval *IM, *styles, *item;
gdImagePtr im;
- int * stylearr;
- int index;
- HashPosition pos;
+ int *stylearr;
+ int index = 0;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &IM, &styles) == FAILURE) {
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
/* copy the style values in the stylearr */
stylearr = safe_emalloc(sizeof(int), zend_hash_num_elements(HASH_OF(styles)), 0);
- zend_hash_internal_pointer_reset_ex(HASH_OF(styles), &pos);
-
- for (index = 0;; zend_hash_move_forward_ex(HASH_OF(styles), &pos)) {
- zval ** item;
-
- if (zend_hash_get_current_data_ex(HASH_OF(styles), (void **) &item, &pos) == FAILURE) {
- break;
- }
-
- if (Z_TYPE_PP(item) != IS_LONG) {
+ ZEND_HASH_FOREACH_VAL(HASH_OF(styles), item) {
+ if (Z_TYPE_P(item) != IS_LONG) {
zval lval;
- lval = **item;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, item);
convert_to_long(&lval);
stylearr[index++] = Z_LVAL(lval);
} else {
- stylearr[index++] = Z_LVAL_PP(item);
+ stylearr[index++] = Z_LVAL_P(item);
}
- }
+ } ZEND_HASH_FOREACH_END();
gdImageSetStyle(im, stylearr, index);
@@ -1602,7 +1593,7 @@ PHP_FUNCTION(imageistruecolor)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_BOOL(im->trueColor);
}
@@ -1621,7 +1612,7 @@ PHP_FUNCTION(imagetruecolortopalette)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (ncolors <= 0) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Number of colors has to be greater than zero");
@@ -1633,8 +1624,6 @@ PHP_FUNCTION(imagetruecolortopalette)
}
/* }}} */
-
-
/* {{{ proto void imagetruecolortopalette(resource im, bool ditherFlag, int colorsWanted)
Convert a true colour image to a palette based image with a number of colours, optionally using dithering. */
PHP_FUNCTION(imagepalettetotruecolor)
@@ -1646,7 +1635,7 @@ PHP_FUNCTION(imagepalettetotruecolor)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (gdImagePaletteToTrueColor(im) == 0) {
RETURN_FALSE;
@@ -1668,8 +1657,8 @@ PHP_FUNCTION(imagecolormatch)
return;
}
- ZEND_FETCH_RESOURCE(im1, gdImagePtr, &IM1, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im2, gdImagePtr, &IM2, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im1, gdImagePtr, IM1, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im2, gdImagePtr, IM2, -1, "Image", le_gd);
result = gdImageColorMatch(im1, im2);
switch (result) {
@@ -1707,7 +1696,7 @@ PHP_FUNCTION(imagesetthickness)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageSetThickness(im, thick);
@@ -1727,7 +1716,7 @@ PHP_FUNCTION(imagefilledellipse)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageFilledEllipse(im, cx, cy, w, h, color);
@@ -1748,7 +1737,7 @@ PHP_FUNCTION(imagefilledarc)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
e = E;
if (e < 0) {
@@ -1778,7 +1767,7 @@ PHP_FUNCTION(imagealphablending)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageAlphaBlending(im, blend);
RETURN_TRUE;
@@ -1797,7 +1786,7 @@ PHP_FUNCTION(imagesavealpha)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageSaveAlpha(im, save);
RETURN_TRUE;
@@ -1816,7 +1805,7 @@ PHP_FUNCTION(imagelayereffect)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageAlphaBlending(im, effect);
RETURN_TRUE;
@@ -1836,7 +1825,7 @@ PHP_FUNCTION(imagecolorallocatealpha)
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
ct = gdImageColorAllocateAlpha(im, red, green, blue, alpha);
if (ct < 0) {
RETURN_FALSE;
@@ -1857,7 +1846,7 @@ PHP_FUNCTION(imagecolorresolvealpha)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorResolveAlpha(im, red, green, blue, alpha));
}
@@ -1875,7 +1864,7 @@ PHP_FUNCTION(imagecolorclosestalpha)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorClosestAlpha(im, red, green, blue, alpha));
}
@@ -1893,7 +1882,7 @@ PHP_FUNCTION(imagecolorexactalpha)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorExactAlpha(im, red, green, blue, alpha));
}
@@ -1912,8 +1901,8 @@ PHP_FUNCTION(imagecopyresampled)
return;
}
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, &DIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
srcX = SX;
srcY = SY;
@@ -2094,7 +2083,7 @@ PHP_FUNCTION(imagerotate)
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
im_dst = gdImageRotateInterpolated(im_src, (const float)degrees, color);
@@ -2117,8 +2106,8 @@ PHP_FUNCTION(imagesettile)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(tile, gdImagePtr, &TILE, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
gdImageSetTile(im, tile);
@@ -2137,8 +2126,8 @@ PHP_FUNCTION(imagesetbrush)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(tile, gdImagePtr, &TILE, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(tile, gdImagePtr, TILE, -1, "Image", le_gd);
gdImageSetBrush(im, tile);
@@ -2257,12 +2246,12 @@ static int _php_image_type (char data[8])
/* {{{ _php_image_create_from_string
*/
-gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC)
+gdImagePtr _php_image_create_from_string(zval *data, char *tn, gdImagePtr (*ioctx_func_p)() TSRMLS_DC)
{
gdImagePtr im;
gdIOCtx *io_ctx;
- io_ctx = gdNewDynamicCtxEx(Z_STRLEN_PP(data), Z_STRVAL_PP(data), 0);
+ io_ctx = gdNewDynamicCtxEx(Z_STRLEN_P(data), Z_STRVAL_P(data), 0);
if (!io_ctx) {
return NULL;
@@ -2285,22 +2274,22 @@ gdImagePtr _php_image_create_from_string(zval **data, char *tn, gdImagePtr (*ioc
Create a new image from the image stream in the string */
PHP_FUNCTION(imagecreatefromstring)
{
- zval **data;
+ zval *data;
gdImagePtr im;
int imtype;
char sig[8];
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &data) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &data) == FAILURE) {
return;
}
convert_to_string_ex(data);
- if (Z_STRLEN_PP(data) < 8) {
+ if (Z_STRLEN_P(data) < 8) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Empty string or invalid image");
RETURN_FALSE;
}
- memcpy(sig, Z_STRVAL_PP(data), 8);
+ memcpy(sig, Z_STRVAL_P(data), 8);
imtype = _php_image_type(sig);
@@ -2359,7 +2348,9 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,
gdImagePtr im = NULL;
php_stream *stream;
FILE * fp = NULL;
+#ifdef HAVE_GD_JPG
long ignore_warning;
+#endif
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) {
@@ -2389,20 +2380,22 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,
} else if (ioctx_func_p) {
/* we can create an io context */
gdIOCtx* io_ctx;
- size_t buff_size;
- char *buff;
+ zend_string *buff;
+ char *pstr;
- /* needs to be malloc (persistent) - GD will free() it later */
- buff_size = php_stream_copy_to_mem(stream, &buff, PHP_STREAM_COPY_ALL, 1);
+ buff = php_stream_copy_to_mem(stream, PHP_STREAM_COPY_ALL, 0);
- if (!buff_size) {
+ if (!buff) {
php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot read image data");
goto out_err;
}
- io_ctx = gdNewDynamicCtxEx(buff_size, buff, 0);
+ /* needs to be malloc (persistent) - GD will free() it later */
+ pstr = pestrndup(buff->val, buff->len, 1);
+ io_ctx = gdNewDynamicCtxEx(buff->len, pstr, 0);
if (!io_ctx) {
- pefree(buff, 1);
+ pefree(pstr, 1);
+ STR_RELEASE(buff);
php_error_docref(NULL TSRMLS_CC, E_WARNING,"Cannot allocate GD IO context");
goto out_err;
}
@@ -2413,7 +2406,8 @@ static void _php_image_create_from(INTERNAL_FUNCTION_PARAMETERS, int image_type,
im = (*ioctx_func_p)(io_ctx);
}
io_ctx->gd_free(io_ctx);
- pefree(buff, 1);
+ pefree(pstr, 1);
+ STR_RELEASE(buff);
}
else if (php_stream_can_cast(stream, PHP_STREAM_AS_STDIO)) {
/* try and force the stream to be FILE* */
@@ -2572,7 +2566,7 @@ static void _php_image_output(INTERNAL_FUNCTION_PARAMETERS, int image_type, char
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &imgind, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, imgind, -1, "Image", le_gd);
if (argc > 1) {
fn = file;
@@ -2786,9 +2780,9 @@ PHP_FUNCTION(imagedestroy)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- zend_list_delete(Z_LVAL_P(IM));
+ zend_list_close(Z_RES_P(IM));
RETURN_TRUE;
}
@@ -2808,7 +2802,7 @@ PHP_FUNCTION(imagecolorallocate)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
ct = gdImageColorAllocate(im, red, green, blue);
if (ct < 0) {
@@ -2829,8 +2823,8 @@ PHP_FUNCTION(imagepalettecopy)
return;
}
- ZEND_FETCH_RESOURCE(dst, gdImagePtr, &dstim, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(src, gdImagePtr, &srcim, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(dst, gdImagePtr, dstim, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(src, gdImagePtr, srcim, -1, "Image", le_gd);
gdImagePaletteCopy(dst, src);
}
@@ -2848,7 +2842,7 @@ PHP_FUNCTION(imagecolorat)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (gdImageTrueColor(im)) {
if (im->tpixels && gdImageBoundsSafe(im, x, y)) {
@@ -2880,7 +2874,7 @@ PHP_FUNCTION(imagecolorclosest)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorClosest(im, red, green, blue));
}
@@ -2898,7 +2892,7 @@ PHP_FUNCTION(imagecolorclosesthwb)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorClosestHWB(im, red, green, blue));
}
@@ -2917,7 +2911,7 @@ PHP_FUNCTION(imagecolordeallocate)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
/* We can return right away for a truecolor image as deallocating colours is meaningless here */
if (gdImageTrueColor(im)) {
@@ -2948,7 +2942,7 @@ PHP_FUNCTION(imagecolorresolve)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorResolve(im, red, green, blue));
}
@@ -2966,7 +2960,7 @@ PHP_FUNCTION(imagecolorexact)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorExact(im, red, green, blue));
}
@@ -2985,7 +2979,7 @@ PHP_FUNCTION(imagecolorset)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
col = color;
@@ -3013,7 +3007,7 @@ PHP_FUNCTION(imagecolorsforindex)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
col = index;
@@ -3044,7 +3038,7 @@ PHP_FUNCTION(imagegammacorrect)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (gdImageTrueColor(im)) {
int x, y, c;
@@ -3086,7 +3080,7 @@ PHP_FUNCTION(imagesetpixel)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageSetPixel(im, x, y, col);
RETURN_TRUE;
}
@@ -3104,7 +3098,7 @@ PHP_FUNCTION(imageline)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
#ifdef HAVE_GD_BUNDLED
if (im->antialias) {
@@ -3130,7 +3124,7 @@ PHP_FUNCTION(imagedashedline)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageDashedLine(im, x1, y1, x2, y2, col);
RETURN_TRUE;
}
@@ -3148,7 +3142,7 @@ PHP_FUNCTION(imagerectangle)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageRectangle(im, x1, y1, x2, y2, col);
RETURN_TRUE;
}
@@ -3166,7 +3160,7 @@ PHP_FUNCTION(imagefilledrectangle)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageFilledRectangle(im, x1, y1, x2, y2, col);
RETURN_TRUE;
}
@@ -3185,7 +3179,7 @@ PHP_FUNCTION(imagearc)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
e = E;
if (e < 0) {
@@ -3214,7 +3208,7 @@ PHP_FUNCTION(imageellipse)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageEllipse(im, cx, cy, w, h, color);
RETURN_TRUE;
@@ -3233,7 +3227,7 @@ PHP_FUNCTION(imagefilltoborder)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageFillToBorder(im, x, y, border, col);
RETURN_TRUE;
}
@@ -3251,7 +3245,7 @@ PHP_FUNCTION(imagefill)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageFill(im, x, y, col);
RETURN_TRUE;
}
@@ -3268,7 +3262,7 @@ PHP_FUNCTION(imagecolorstotal)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageColorsTotal(im));
}
@@ -3287,7 +3281,7 @@ PHP_FUNCTION(imagecolortransparent)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (argc > 1) {
gdImageColorTransparent(im, COL);
@@ -3310,7 +3304,7 @@ PHP_FUNCTION(imageinterlace)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (argc > 1) {
gdImageInterlace(im, INT);
@@ -3328,7 +3322,7 @@ static void php_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled)
{
zval *IM, *POINTS;
long NPOINTS, COL;
- zval **var = NULL;
+ zval *var = NULL;
gdImagePtr im;
gdPointPtr points;
int npoints, col, nelem, i;
@@ -3337,7 +3331,7 @@ static void php_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
npoints = NPOINTS;
col = COL;
@@ -3359,26 +3353,24 @@ static void php_imagepolygon(INTERNAL_FUNCTION_PARAMETERS, int filled)
points = (gdPointPtr) safe_emalloc(npoints, sizeof(gdPoint), 0);
for (i = 0; i < npoints; i++) {
- if (zend_hash_index_find(Z_ARRVAL_P(POINTS), (i * 2), (void **) &var) == SUCCESS) {
- if (Z_TYPE_PP(var) != IS_LONG) {
+ if ((var = zend_hash_index_find(Z_ARRVAL_P(POINTS), (i * 2))) != NULL) {
+ if (Z_TYPE_P(var) != IS_LONG) {
zval lval;
- lval = **var;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, var);
convert_to_long(&lval);
points[i].x = Z_LVAL(lval);
} else {
- points[i].x = Z_LVAL_PP(var);
+ points[i].x = Z_LVAL_P(var);
}
}
- if (zend_hash_index_find(Z_ARRVAL_P(POINTS), (i * 2) + 1, (void **) &var) == SUCCESS) {
- if (Z_TYPE_PP(var) != IS_LONG) {
+ if ((var = zend_hash_index_find(Z_ARRVAL_P(POINTS), (i * 2) + 1)) != NULL) {
+ if (Z_TYPE_P(var) != IS_LONG) {
zval lval;
- lval = **var;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, var);
convert_to_long(&lval);
points[i].y = Z_LVAL(lval);
} else {
- points[i].y = Z_LVAL_PP(var);
+ points[i].y = Z_LVAL_P(var);
}
}
}
@@ -3415,34 +3407,36 @@ PHP_FUNCTION(imagefilledpolygon)
static gdFontPtr php_find_gd_font(int size TSRMLS_DC)
{
gdFontPtr font;
- int ind_type;
switch (size) {
case 1:
- font = gdFontTiny;
- break;
+ font = gdFontTiny;
+ break;
case 2:
- font = gdFontSmall;
- break;
+ font = gdFontSmall;
+ break;
case 3:
- font = gdFontMediumBold;
- break;
+ font = gdFontMediumBold;
+ break;
case 4:
- font = gdFontLarge;
- break;
+ font = gdFontLarge;
+ break;
case 5:
- font = gdFontGiant;
- break;
- default:
- font = zend_list_find(size - 5, &ind_type);
- if (!font || ind_type != le_gd_font) {
- if (size < 1) {
- font = gdFontTiny;
- } else {
- font = gdFontGiant;
- }
+ font = gdFontGiant;
+ break;
+ default: {
+ zval *zv = zend_hash_index_find(&EG(regular_list), size - 5);
+ if (!zv || (Z_RES_P(zv))->type != le_gd_font) {
+ if (size < 1) {
+ font = gdFontTiny;
+ } else {
+ font = gdFontGiant;
+ }
+ } else {
+ font = (gdFontPtr)Z_RES_P(zv)->ptr;
}
- break;
+ }
+ break;
}
return font;
@@ -3530,7 +3524,7 @@ static void php_imagechar(INTERNAL_FUNCTION_PARAMETERS, int mode)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
col = COL;
@@ -3621,8 +3615,8 @@ PHP_FUNCTION(imagecopy)
return;
}
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, &DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
srcX = SX;
srcY = SY;
@@ -3649,8 +3643,8 @@ PHP_FUNCTION(imagecopymerge)
return;
}
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, &DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
srcX = SX;
srcY = SY;
@@ -3678,8 +3672,8 @@ PHP_FUNCTION(imagecopymergegray)
return;
}
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, &DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
srcX = SX;
srcY = SY;
@@ -3707,8 +3701,8 @@ PHP_FUNCTION(imagecopyresized)
return;
}
- ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, &DIM, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_dst, gdImagePtr, DIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
srcX = SX;
srcY = SY;
@@ -3740,7 +3734,7 @@ PHP_FUNCTION(imagesx)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageSX(im));
}
@@ -3757,7 +3751,7 @@ PHP_FUNCTION(imagesy)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
RETURN_LONG(gdImageSY(im));
}
@@ -3830,37 +3824,28 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int
} else if (zend_parse_parameters(argc TSRMLS_CC, "rddlllss|a", &IM, &ptsize, &angle, &x, &y, &col, &fontname, &fontname_len, &str, &str_len, &EXT) == FAILURE) {
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
}
/* convert angle to radians */
angle = angle * (M_PI/180);
if (extended && EXT) { /* parse extended info */
- HashPosition pos;
+ zval *item;
+ zend_string *key;
+ ulong num_key;
/* walk the assoc array */
- zend_hash_internal_pointer_reset_ex(HASH_OF(EXT), &pos);
- do {
- zval ** item;
- char * key;
- ulong num_key;
-
- if (zend_hash_get_current_key_ex(HASH_OF(EXT), &key, NULL, &num_key, 0, &pos) != HASH_KEY_IS_STRING) {
+ ZEND_HASH_FOREACH_KEY_VAL(HASH_OF(EXT), num_key, key, item) {
+ if (key == NULL) {
continue;
}
-
- if (zend_hash_get_current_data_ex(HASH_OF(EXT), (void **) &item, &pos) == FAILURE) {
- continue;
- }
-
- if (strcmp("linespacing", key) == 0) {
+ if (strcmp("linespacing", key->val) == 0) {
convert_to_double_ex(item);
strex.flags |= gdFTEX_LINESPACE;
- strex.linespacing = Z_DVAL_PP(item);
+ strex.linespacing = Z_DVAL_P(item);
}
-
- } while (zend_hash_move_forward_ex(HASH_OF(EXT), &pos) == SUCCESS);
+ } ZEND_HASH_FOREACH_END();
}
#ifdef VIRTUAL_DIR
@@ -3903,9 +3888,9 @@ static void php_imagettftext_common(INTERNAL_FUNCTION_PARAMETERS, int mode, int
/* {{{ php_free_ps_font
*/
-static void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void php_free_ps_font(zend_resource *rsrc TSRMLS_DC)
{
- int *font = (int *) rsrc->ptr;
+ int *font = (int *)rsrc->ptr;
T1_DeleteFont(*font);
efree(font);
@@ -3914,9 +3899,9 @@ static void php_free_ps_font(zend_rsrc_list_entry *rsrc TSRMLS_DC)
/* {{{ php_free_ps_enc
*/
-static void php_free_ps_enc(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void php_free_ps_enc(zend_resource *rsrc TSRMLS_DC)
{
- char **enc = (char **) rsrc->ptr;
+ char **enc = (char **)rsrc->ptr;
T1_DeleteEncoding(enc);
}
@@ -4025,7 +4010,7 @@ PHP_FUNCTION(imagepsfreefont)
return;
}
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
+ ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
zend_list_delete(Z_LVAL_P(fnt));
RETURN_TRUE;
}
@@ -4043,7 +4028,7 @@ PHP_FUNCTION(imagepsencodefont)
return;
}
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
+ ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
if ((enc_vector = T1_LoadEncoding(enc)) == NULL) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Couldn't load encoding vector from %s", enc);
@@ -4075,7 +4060,7 @@ PHP_FUNCTION(imagepsextendfont)
return;
}
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
+ ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
T1_DeleteAllSizes(*f_ind);
@@ -4104,7 +4089,7 @@ PHP_FUNCTION(imagepsslantfont)
return;
}
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
+ ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
if (T1_SlantFont(*f_ind, slt) != 0) {
RETURN_FALSE;
@@ -4145,8 +4130,8 @@ PHP_FUNCTION(imagepstext)
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(bg_img, gdImagePtr, &img, -1, "Image", le_gd);
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
+ ZEND_FETCH_RESOURCE(bg_img, gdImagePtr, img, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
/* Ensure that the provided colors are valid */
if (_fg < 0 || (!gdImageTrueColor(bg_img) && _fg > gdImageColorsTotal(bg_img))) {
@@ -4286,7 +4271,7 @@ PHP_FUNCTION(imagepsbbox)
per_char = add_width || angle ? 1 : 0;
}
- ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, "Type 1 font", le_ps_font);
+ ZEND_FETCH_RESOURCE(f_ind, int *, fnt, -1, "Type 1 font", le_ps_font);
#define max(a, b) (a > b ? a : b)
#define min(a, b) (a < b ? a : b)
@@ -4451,7 +4436,9 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type )
int int_threshold;
int x, y;
float x_ratio, y_ratio;
+#ifdef HAVE_GD_JPG
long ignore_warning;
+#endif
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "pplll", &f_org, &f_org_len, &f_dest, &f_dest_len, &height, &width, &threshold) == FAILURE) {
return;
@@ -4617,7 +4604,7 @@ static void _php_image_convert(INTERNAL_FUNCTION_PARAMETERS, int image_type )
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; \
}
@@ -4654,7 +4641,7 @@ static void php_image_filter_brightness(INTERNAL_FUNCTION_PARAMETERS)
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;
@@ -4677,7 +4664,7 @@ static void php_image_filter_contrast(INTERNAL_FUNCTION_PARAMETERS)
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;
@@ -4701,7 +4688,7 @@ static void php_image_filter_colorize(INTERNAL_FUNCTION_PARAMETERS)
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;
@@ -4780,7 +4767,7 @@ static void php_image_filter_smooth(INTERNAL_FUNCTION_PARAMETERS)
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;
@@ -4804,7 +4791,7 @@ static void php_image_filter_pixelate(INTERNAL_FUNCTION_PARAMETERS)
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (im == NULL) {
RETURN_FALSE;
@@ -4858,7 +4845,7 @@ PHP_FUNCTION(imagefilter)
PHP_FUNCTION(imageconvolution)
{
zval *SIM, *hash_matrix;
- zval **var = NULL, **var2 = NULL;
+ zval *var = NULL, *var2 = NULL;
gdImagePtr im_src = NULL;
double div, offset;
int nelem, i, j, res;
@@ -4868,7 +4855,7 @@ PHP_FUNCTION(imageconvolution)
RETURN_FALSE;
}
- ZEND_FETCH_RESOURCE(im_src, gdImagePtr, &SIM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im_src, gdImagePtr, SIM, -1, "Image", le_gd);
nelem = zend_hash_num_elements(Z_ARRVAL_P(hash_matrix));
if (nelem != 3) {
@@ -4877,22 +4864,21 @@ PHP_FUNCTION(imageconvolution)
}
for (i=0; i<3; i++) {
- if (zend_hash_index_find(Z_ARRVAL_P(hash_matrix), (i), (void **) &var) == SUCCESS && Z_TYPE_PP(var) == IS_ARRAY) {
- if (Z_TYPE_PP(var) != IS_ARRAY || zend_hash_num_elements(Z_ARRVAL_PP(var)) != 3 ) {
+ if ((var = zend_hash_index_find(Z_ARRVAL_P(hash_matrix), (i))) != NULL && Z_TYPE_P(var) == IS_ARRAY) {
+ if (zend_hash_num_elements(Z_ARRVAL_P(var)) != 3 ) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must have 3x3 array");
RETURN_FALSE;
}
for (j=0; j<3; j++) {
- if (zend_hash_index_find(Z_ARRVAL_PP(var), (j), (void **) &var2) == SUCCESS) {
- if (Z_TYPE_PP(var2) != IS_DOUBLE) {
+ if ((var2 = zend_hash_index_find(Z_ARRVAL_P(var), (j))) != NULL) {
+ if (Z_TYPE_P(var2) != IS_DOUBLE) {
zval dval;
- dval = **var2;
- zval_copy_ctor(&dval);
+ ZVAL_COPY(&dval, var2);
convert_to_double(&dval);
matrix[i][j] = (float)Z_DVAL(dval);
} else {
- matrix[i][j] = (float)Z_DVAL_PP(var2);
+ matrix[i][j] = (float)Z_DVAL_P(var2);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "You must have a 3x3 matrix");
@@ -4924,7 +4910,7 @@ PHP_FUNCTION(imageflip)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
switch (mode) {
case GD_FLIP_VERTICAL:
@@ -4961,7 +4947,7 @@ PHP_FUNCTION(imageantialias)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
gdImageAntialias(im, alias);
RETURN_TRUE;
}
@@ -4977,68 +4963,64 @@ PHP_FUNCTION(imagecrop)
gdImagePtr im_crop;
gdRect rect;
zval *z_rect;
- zval **tmp;
+ zval *tmp;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &IM, &z_rect) == FAILURE) {
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
- if (zend_hash_find(HASH_OF(z_rect), "x", sizeof("x"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "x", sizeof("x") -1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.x = Z_LVAL(lval);
} else {
- rect.x = Z_LVAL_PP(tmp);
+ rect.x = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing x position");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(z_rect), "y", sizeof("x"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "y", sizeof("y") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.y = Z_LVAL(lval);
} else {
- rect.y = Z_LVAL_PP(tmp);
+ rect.y = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing y position");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(z_rect), "width", sizeof("width"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "width", sizeof("width") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.width = Z_LVAL(lval);
} else {
- rect.width = Z_LVAL_PP(tmp);
+ rect.width = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing width");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(z_rect), "height", sizeof("height"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "height", sizeof("height") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.height = Z_LVAL(lval);
} else {
- rect.height = Z_LVAL_PP(tmp);
+ rect.height = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing height");
@@ -5070,7 +5052,7 @@ PHP_FUNCTION(imagecropauto)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
switch (mode) {
case -1:
@@ -5121,7 +5103,7 @@ PHP_FUNCTION(imagescale)
new_width = tmp_w;
new_height = tmp_h;
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (gdImageSetInterpolationMethod(im, method)) {
im_scaled = gdImageScale(im, new_width, new_height);
@@ -5146,16 +5128,16 @@ PHP_FUNCTION(imageaffine)
gdRectPtr pRect = NULL;
zval *z_rect = NULL;
zval *z_affine;
- zval **tmp;
+ zval *tmp;
double affine[6];
int i, nelems;
- zval **zval_affine_elem = NULL;
+ zval *zval_affine_elem = NULL;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra|a", &IM, &z_affine, &z_rect) == FAILURE) {
return;
}
- ZEND_FETCH_RESOURCE(src, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(src, gdImagePtr, IM, -1, "Image", le_gd);
if ((nelems = zend_hash_num_elements(Z_ARRVAL_P(z_affine))) != 6) {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Affine array must have six elements");
@@ -5163,19 +5145,18 @@ PHP_FUNCTION(imageaffine)
}
for (i = 0; i < nelems; i++) {
- if (zend_hash_index_find(Z_ARRVAL_P(z_affine), i, (void **) &zval_affine_elem) == SUCCESS) {
- switch (Z_TYPE_PP(zval_affine_elem)) {
+ if ((zval_affine_elem = zend_hash_index_find(Z_ARRVAL_P(z_affine), i)) != NULL) {
+ switch (Z_TYPE_P(zval_affine_elem)) {
case IS_LONG:
- affine[i] = Z_LVAL_PP(zval_affine_elem);
+ affine[i] = Z_LVAL_P(zval_affine_elem);
break;
case IS_DOUBLE:
- affine[i] = Z_DVAL_PP(zval_affine_elem);
+ affine[i] = Z_DVAL_P(zval_affine_elem);
break;
case IS_STRING:
{
zval dval;
- dval = **zval_affine_elem;
- zval_copy_ctor(&dval);
+ ZVAL_COPY(&dval, zval_affine_elem);
convert_to_double(&dval);
affine[i] = Z_DVAL(dval);
}
@@ -5188,60 +5169,56 @@ PHP_FUNCTION(imageaffine)
}
if (z_rect != NULL) {
- if (zend_hash_find(HASH_OF(z_rect), "x", sizeof("x"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "x", sizeof("x") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.x = Z_LVAL(lval);
} else {
- rect.x = Z_LVAL_PP(tmp);
+ rect.x = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing x position");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(z_rect), "y", sizeof("x"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "y", sizeof("y") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.y = Z_LVAL(lval);
} else {
- rect.y = Z_LVAL_PP(tmp);
+ rect.y = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing y position");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(z_rect), "width", sizeof("width"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "width", sizeof("width") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.width = Z_LVAL(lval);
} else {
- rect.width = Z_LVAL_PP(tmp);
+ rect.width = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing width");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(z_rect), "height", sizeof("height"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_LONG) {
+ if ((tmp = zend_hash_str_find(HASH_OF(z_rect), "height", sizeof("height") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_LONG) {
zval lval;
- lval = **tmp;
- zval_copy_ctor(&lval);
+ ZVAL_COPY(&lval, tmp);
convert_to_long(&lval);
rect.height = Z_LVAL(lval);
} else {
- rect.height = Z_LVAL_PP(tmp);
+ rect.height = Z_LVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing height");
@@ -5275,7 +5252,7 @@ PHP_FUNCTION(imageaffinematrixget)
double affine[6];
long type;
zval *options;
- zval **tmp;
+ zval *tmp;
int res = GD_FALSE, i;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l|z", &type, &options) == FAILURE) {
@@ -5290,30 +5267,28 @@ PHP_FUNCTION(imageaffinematrixget)
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Array expected as options");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(options), "x", sizeof("x"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_DOUBLE) {
+ if ((tmp = zend_hash_str_find(HASH_OF(options), "x", sizeof("x") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_DOUBLE) {
zval dval;
- dval = **tmp;
- zval_copy_ctor(&dval);
+ ZVAL_COPY(&dval, tmp);
convert_to_double(&dval);
x = Z_DVAL(dval);
} else {
- x = Z_DVAL_PP(tmp);
+ x = Z_DVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing x position");
RETURN_FALSE;
}
- if (zend_hash_find(HASH_OF(options), "y", sizeof("y"), (void **)&tmp) != FAILURE) {
- if (Z_TYPE_PP(tmp) != IS_DOUBLE) {
+ if ((tmp = zend_hash_str_find(HASH_OF(options), "y", sizeof("y") - 1)) != NULL) {
+ if (Z_TYPE_P(tmp) != IS_DOUBLE) {
zval dval;
- dval = **tmp;
- zval_copy_ctor(&dval);
+ ZVAL_COPY(&dval, tmp);
convert_to_double(&dval);
y = Z_DVAL(dval);
} else {
- y = Z_DVAL_PP(tmp);
+ y = Z_DVAL_P(tmp);
}
} else {
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Missing y position");
@@ -5333,7 +5308,7 @@ PHP_FUNCTION(imageaffinematrixget)
case GD_AFFINE_SHEAR_VERTICAL: {
double angle;
- convert_to_double_ex(&options);
+ convert_to_double_ex(options);
angle = Z_DVAL_P(options);
if (type == GD_AFFINE_SHEAR_HORIZONTAL) {
@@ -5359,8 +5334,7 @@ PHP_FUNCTION(imageaffinematrixget)
add_index_double(return_value, i, affine[i]);
}
}
-}
-
+} /* }}} */
/* {{{ proto array imageaffineconcat(array m1, array m2)
Concat two matrices (as in doing many ops in one go) */
@@ -5370,7 +5344,7 @@ PHP_FUNCTION(imageaffinematrixconcat)
double m2[6];
double mr[6];
- zval **tmp;
+ zval *tmp;
zval *z_m1;
zval *z_m2;
int i, nelems;
@@ -5385,19 +5359,18 @@ PHP_FUNCTION(imageaffinematrixconcat)
}
for (i = 0; i < 6; i++) {
- if (zend_hash_index_find(Z_ARRVAL_P(z_m1), i, (void **) &tmp) == SUCCESS) {
- switch (Z_TYPE_PP(tmp)) {
+ if ((tmp = zend_hash_index_find(Z_ARRVAL_P(z_m1), i)) != NULL) {
+ switch (Z_TYPE_P(tmp)) {
case IS_LONG:
- m1[i] = Z_LVAL_PP(tmp);
+ m1[i] = Z_LVAL_P(tmp);
break;
case IS_DOUBLE:
- m1[i] = Z_DVAL_PP(tmp);
+ m1[i] = Z_DVAL_P(tmp);
break;
case IS_STRING:
{
zval dval;
- dval = **tmp;
- zval_copy_ctor(&dval);
+ ZVAL_COPY(&dval, tmp);
convert_to_double(&dval);
m1[i] = Z_DVAL(dval);
}
@@ -5407,19 +5380,18 @@ PHP_FUNCTION(imageaffinematrixconcat)
RETURN_FALSE;
}
}
- if (zend_hash_index_find(Z_ARRVAL_P(z_m2), i, (void **) &tmp) == SUCCESS) {
- switch (Z_TYPE_PP(tmp)) {
+ if ((tmp = zend_hash_index_find(Z_ARRVAL_P(z_m2), i)) != NULL) {
+ switch (Z_TYPE_P(tmp)) {
case IS_LONG:
- m2[i] = Z_LVAL_PP(tmp);
+ m2[i] = Z_LVAL_P(tmp);
break;
case IS_DOUBLE:
- m2[i] = Z_DVAL_PP(tmp);
+ m2[i] = Z_DVAL_P(tmp);
break;
case IS_STRING:
{
zval dval;
- dval = **tmp;
- zval_copy_ctor(&dval);
+ ZVAL_COPY(&dval, tmp);
convert_to_double(&dval);
m2[i] = Z_DVAL(dval);
}
@@ -5439,7 +5411,7 @@ PHP_FUNCTION(imageaffinematrixconcat)
for (i = 0; i < 6; i++) {
add_index_double(return_value, i, mr[i]);
}
-}
+} /* }}} */
/* {{{ proto resource imagesetinterpolation(resource im, [, method]])
Set the default interpolation method, passing -1 or 0 sets it to the libgd default (bilinear). */
@@ -5453,7 +5425,7 @@ PHP_FUNCTION(imagesetinterpolation)
return;
}
- ZEND_FETCH_RESOURCE(im, gdImagePtr, &IM, -1, "Image", le_gd);
+ ZEND_FETCH_RESOURCE(im, gdImagePtr, IM, -1, "Image", le_gd);
if (method == -1) {
method = GD_BILINEAR_FIXED;
diff --git a/ext/gd/gd_ctx.c b/ext/gd/gd_ctx.c
index 59eff80443..4f97af846a 100644
--- a/ext/gd/gd_ctx.c
+++ b/ext/gd/gd_ctx.c
@@ -22,7 +22,7 @@
#define CTX_PUTC(c,ctx) ctx->putC(ctx, c)
-static void _php_image_output_putc(struct gdIOCtx *ctx, int c)
+static void _php_image_output_putc(struct gdIOCtx *ctx, int c) /* {{{ */
{
/* without the following downcast, the write will fail
* (i.e., will write a zero byte) for all
@@ -31,36 +31,36 @@ static void _php_image_output_putc(struct gdIOCtx *ctx, int c)
unsigned char ch = (unsigned char) c;
TSRMLS_FETCH();
php_write(&ch, 1 TSRMLS_CC);
-}
+} /* }}} */
-static int _php_image_output_putbuf(struct gdIOCtx *ctx, const void* buf, int l)
+static int _php_image_output_putbuf(struct gdIOCtx *ctx, const void* buf, int l) /* {{{ */
{
TSRMLS_FETCH();
return php_write((void *)buf, l TSRMLS_CC);
-}
+} /* }}} */
-static void _php_image_output_ctxfree(struct gdIOCtx *ctx)
+static void _php_image_output_ctxfree(struct gdIOCtx *ctx) /* {{{ */
{
if(ctx) {
efree(ctx);
}
-}
+} /* }}} */
-static void _php_image_stream_putc(struct gdIOCtx *ctx, int c) {
+static void _php_image_stream_putc(struct gdIOCtx *ctx, int c) /* {{{ */ {
char ch = (char) c;
php_stream * stream = (php_stream *)ctx->data;
TSRMLS_FETCH();
php_stream_write(stream, &ch, 1);
-}
+} /* }}} */
-static int _php_image_stream_putbuf(struct gdIOCtx *ctx, const void* buf, int l)
+static int _php_image_stream_putbuf(struct gdIOCtx *ctx, const void* buf, int l) /* {{{ */
{
php_stream * stream = (php_stream *)ctx->data;
TSRMLS_FETCH();
return php_stream_write(stream, (void *)buf, l);
-}
+} /* }}} */
-static void _php_image_stream_ctxfree(struct gdIOCtx *ctx)
+static void _php_image_stream_ctxfree(struct gdIOCtx *ctx) /* {{{ */
{
TSRMLS_FETCH();
@@ -71,7 +71,7 @@ static void _php_image_stream_ctxfree(struct gdIOCtx *ctx)
if(ctx) {
efree(ctx);
}
-}
+} /* }}} */
/* {{{ _php_image_output_ctx */
static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type, char *tn, void (*func_p)())
@@ -108,7 +108,7 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
}
}
- 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 >= 3) {
q = quality; /* or colorindex for foreground of BW images (defaults to black) */
@@ -119,7 +119,7 @@ static void _php_image_output_ctx(INTERNAL_FUNCTION_PARAMETERS, int image_type,
if (argc > 1 && to_zval != NULL) {
if (Z_TYPE_P(to_zval) == IS_RESOURCE) {
- php_stream_from_zval_no_verify(stream, &to_zval);
+ php_stream_from_zval_no_verify(stream, to_zval);
if (stream == NULL) {
RETURN_FALSE;
}
diff --git a/ext/iconv/iconv.c b/ext/iconv/iconv.c
index 28677421d8..39c5b314a8 100644
--- a/ext/iconv/iconv.c
+++ b/ext/iconv/iconv.c
@@ -449,7 +449,7 @@ static int php_iconv_output_handler(void **nothing, php_output_context *output_c
if (output_context->in.used) {
zend_string *out;
output_context->out.free = 1;
- _php_iconv_show_error(php_iconv_string(output_context->in.data, output_context->in.used, &out, get_output_encoding(TSRMLS_C), get_internal_encoding(TSRMLS_C)), get_output_encoding(TSRMLS_C), get_internal_encoding(TSRMLS_C));
+ _php_iconv_show_error(php_iconv_string(output_context->in.data, output_context->in.used, &out, get_output_encoding(TSRMLS_C), get_internal_encoding(TSRMLS_C)), get_output_encoding(TSRMLS_C), get_internal_encoding(TSRMLS_C) TSRMLS_CC);
if (out) {
output_context->out.data = estrndup(out->val, out->len);
output_context->out.used = out->len;
diff --git a/ext/pdo_mysql/tests/config.inc b/ext/pdo_mysql/tests/config.inc
index 21f33a2d59..f5ea020b78 100644
--- a/ext/pdo_mysql/tests/config.inc
+++ b/ext/pdo_mysql/tests/config.inc
@@ -10,7 +10,7 @@ if (false !== getenv('PDO_MYSQL_TEST_DSN')) {
$config['ENV']['PDOTEST_ATTR'] = getenv('PDO_MYSQL_TEST_ATTR');
}
} else {
- $config['ENV']['PDOTEST_DSN'] = 'mysql:host=127.0.0.1;port=3308;dbname=test';
+ $config['ENV']['PDOTEST_DSN'] = 'mysql:host=localhost;dbname=test';
$config['ENV']['PDOTEST_USER'] = 'root';
$config['ENV']['PDOTEST_PASS'] = '';
}
diff --git a/ext/pdo_sqlite/sqlite_driver.c b/ext/pdo_sqlite/sqlite_driver.c
index ebb16d9920..9b47af562c 100644
--- a/ext/pdo_sqlite/sqlite_driver.c
+++ b/ext/pdo_sqlite/sqlite_driver.c
@@ -533,7 +533,7 @@ static PHP_METHOD(SQLite, sqliteCreateFunction)
RETURN_FALSE;
}
- dbh = Z_PDO_DBH_P(getThis() TSRMLS_CC);
+ dbh = Z_PDO_DBH_P(getThis());
PDO_CONSTRUCT_CHECK;
if (!zend_is_callable(callback, 0, &cbname TSRMLS_CC)) {
@@ -603,7 +603,7 @@ static PHP_METHOD(SQLite, sqliteCreateAggregate)
RETURN_FALSE;
}
- dbh = Z_PDO_DBH_P(getThis() TSRMLS_CC);
+ dbh = Z_PDO_DBH_P(getThis());
PDO_CONSTRUCT_CHECK;
if (!zend_is_callable(step_callback, 0, &cbname TSRMLS_CC)) {
diff --git a/ext/phar/phar.c b/ext/phar/phar.c
index 72c9518ba8..62b08cc642 100644
--- a/ext/phar/phar.c
+++ b/ext/phar/phar.c
@@ -50,7 +50,7 @@ ZEND_INI_MH(phar_ini_modify_handler) /* {{{ */
{
zend_bool old, ini;
- if (entry->name_length == 14) {
+ if (entry->name_length == sizeof("phar.readonly")-1) {
old = PHAR_G(readonly_orig);
} else {
old = PHAR_G(require_hash_orig);
@@ -376,9 +376,8 @@ static void destroy_phar_data(zval *zv) /* {{{ */
/**
* destructor for the manifest hash, frees each file's entry
*/
-void destroy_phar_manifest_entry(zval *zv) /* {{{ */
+void destroy_phar_manifest_entry_int(phar_entry_info *entry) /* {{{ */
{
- phar_entry_info *entry = (phar_entry_info *)Z_PTR_P(zv);
TSRMLS_FETCH();
if (entry->cfp) {
@@ -422,7 +421,13 @@ void destroy_phar_manifest_entry(zval *zv) /* {{{ */
pefree(entry->tmp, entry->is_persistent);
entry->tmp = 0;
}
+}
+/* }}} */
+void destroy_phar_manifest_entry(zval *zv) /* {{{ */
+{
+ phar_entry_info *entry = Z_PTR_P(zv);
+ destroy_phar_manifest_entry_int(entry);
pefree(entry, entry->is_persistent);
}
/* }}} */
@@ -441,7 +446,7 @@ int phar_entry_delref(phar_entry_data *idata TSRMLS_DC) /* {{{ */
}
/* if phar_get_or_create_entry_data returns a sub-directory, we have to free it */
if (idata->internal_file->is_temp_dir) {
- destroy_phar_manifest_entry((void *)idata->internal_file);
+ destroy_phar_manifest_entry_int(idata->internal_file);
efree(idata->internal_file);
}
}
@@ -2296,7 +2301,6 @@ int phar_split_fname(const char *filename, int filename_len, char **arch, int *a
int phar_open_executed_filename(char *alias, int alias_len, char **error TSRMLS_DC) /* {{{ */
{
char *fname;
-//??? zval *halt_constant;
php_stream *fp;
int fname_len;
char *actual = NULL;
@@ -3015,8 +3019,8 @@ int phar_flush(phar_archive_data *phar, char *user_stub, long len, int convert,
phar_set_32(entry_buffer+20, entry->metadata_str.s ? entry->metadata_str.s->len : 0);
if (sizeof(entry_buffer) != php_stream_write(newfile, entry_buffer, sizeof(entry_buffer))
- || !entry->metadata_str.s
- || entry->metadata_str.s->len != php_stream_write(newfile, entry->metadata_str.s->val, entry->metadata_str.s->len)) {
+ || (entry->metadata_str.s &&
+ entry->metadata_str.s->len != php_stream_write(newfile, entry->metadata_str.s->val, entry->metadata_str.s->len))) {
if (closeoldfile) {
php_stream_close(oldfile);
}
diff --git a/ext/phar/phar_object.c b/ext/phar/phar_object.c
index 1fc62e9413..978b036c67 100644
--- a/ext/phar/phar_object.c
+++ b/ext/phar/phar_object.c
@@ -1429,7 +1429,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
if (!value) {
/* failure in get_current_data */
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned no value", ce->name);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned no value", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1440,7 +1440,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
php_stream_from_zval_no_verify(fp, value);
if (!fp) {
- zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Iterator %v returned an invalid stream handle", ce->name);
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Iterator %v returned an invalid stream handle", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1454,7 +1454,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
if (Z_TYPE(key) != IS_STRING) {
zval_dtor(&key);
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1464,7 +1464,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
save = str_key;
zval_dtor(&key);
} else {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1478,7 +1478,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
spl_filesystem_object *intern = (spl_filesystem_object*)((char*)Z_OBJ_P(value) - Z_OBJ_P(value)->handlers->offset);
if (!base_len) {
- zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Iterator %v returns an SplFileInfo object, so base directory must be specified", ce->name);
+ zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "Iterator %v returns an SplFileInfo object, so base directory must be specified", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1522,7 +1522,7 @@ static int phar_build(zend_object_iterator *iter, void *puser TSRMLS_DC) /* {{{
}
/* fall-through */
default:
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid value (must return a string)", ce->name);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid value (must return a string)", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1562,7 +1562,7 @@ phar_spl_fileinfo:
}
} else {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a path \"%s\" that is not in the base directory \"%s\"", ce->name, fname, base);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a path \"%s\" that is not in the base directory \"%s\"", ce->name->val, fname, base);
if (save) {
efree(save);
@@ -1582,7 +1582,7 @@ phar_spl_fileinfo:
if (Z_TYPE(key) != IS_STRING) {
zval_dtor(&key);
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
@@ -1592,13 +1592,13 @@ phar_spl_fileinfo:
save = str_key;
zval_dtor(&key);
} else {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned an invalid key (must return a string)", ce->name->val);
return ZEND_HASH_APPLY_STOP;
}
}
#if PHP_API_VERSION < 20100412
if (PG(safe_mode) && (!php_checkuid(fname, NULL, CHECKUID_ALLOW_ONLY_FILE))) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a path \"%s\" that safe mode prevents opening", ce->name, fname);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a path \"%s\" that safe mode prevents opening", ce->name->val, fname);
if (save) {
efree(save);
@@ -1613,7 +1613,7 @@ phar_spl_fileinfo:
#endif
if (php_check_open_basedir(fname TSRMLS_CC)) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a path \"%s\" that open_basedir prevents opening", ce->name, fname);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a path \"%s\" that open_basedir prevents opening", ce->name->val, fname);
if (save) {
efree(save);
@@ -1630,7 +1630,7 @@ phar_spl_fileinfo:
fp = php_stream_open_wrapper(fname, "rb", STREAM_MUST_SEEK|0, &opened);
if (!fp) {
- zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a file that could not be opened \"%s\"", ce->name, fname);
+ zend_throw_exception_ex(spl_ce_UnexpectedValueException, 0 TSRMLS_CC, "Iterator %v returned a file that could not be opened \"%s\"", ce->name->val, fname);
if (save) {
efree(save);
@@ -2246,7 +2246,7 @@ static zend_object *phar_convert_to_other(phar_archive_data *source, int convert
phar->alias = source->alias;
if (Z_TYPE(source->metadata) != IS_UNDEF) {
- zval_copy_ctor(&phar->metadata);
+ ZVAL_DUP(&phar->metadata, &source->metadata);
phar->metadata_len = 0;
}
@@ -2876,7 +2876,7 @@ PHP_METHOD(Phar, setStub)
zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "phar \"%s\" is persistent, unable to copy on write", phar_obj->archive->fname);
return;
}
- phar_flush(phar_obj->archive, (char *) &zstub, len, 0, &error TSRMLS_CC);
+ phar_flush(phar_obj->archive, (char *) zstub, len, 0, &error TSRMLS_CC);
if (error) {
zend_throw_exception_ex(phar_ce_PharException, 0 TSRMLS_CC, "%s", error);
efree(error);
diff --git a/ext/phar/tar.c b/ext/phar/tar.c
index 861ae23409..6d210cbf5d 100644
--- a/ext/phar/tar.c
+++ b/ext/phar/tar.c
@@ -180,7 +180,6 @@ static int phar_tar_process_metadata(phar_entry_info *entry, php_stream *fp TSRM
if (entry->filename_len == sizeof(".phar/.metadata.bin")-1 && !memcmp(entry->filename, ".phar/.metadata.bin", sizeof(".phar/.metadata.bin")-1)) {
entry->phar->metadata = entry->metadata;
ZVAL_UNDEF(&entry->metadata);
-// ??? len ???
} else if (entry->filename_len >= sizeof(".phar/.metadata/") + sizeof("/.metadata.bin") - 1 && NULL != (mentry = zend_hash_str_find_ptr(&(entry->phar->manifest), entry->filename + sizeof(".phar/.metadata/") - 1, entry->filename_len - (sizeof("/.metadata.bin") - 1 + sizeof(".phar/.metadata/") - 1)))) {
/* transfer this metadata to the entry it refers */
mentry->metadata = entry->metadata;
@@ -878,7 +877,6 @@ static int phar_tar_setupmetadata(zval *zv, void *argument TSRMLS_DC) /* {{{ */
return phar_tar_setmetadata(&entry->phar->metadata, entry, error TSRMLS_CC);
}
/* search for the file this metadata entry references */
-//??? len ???
if (entry->filename_len >= sizeof(".phar/.metadata/") + sizeof("/.metadata.bin") - 1 && !zend_hash_str_exists(&(entry->phar->manifest), entry->filename + sizeof(".phar/.metadata/") - 1, entry->filename_len - (sizeof("/.metadata.bin") - 1 + sizeof(".phar/.metadata/") - 1))) {
/* this is orphaned metadata, erase it */
return ZEND_HASH_APPLY_REMOVE;
diff --git a/ext/phar/util.c b/ext/phar/util.c
index 85f5f6566b..1368853d66 100644
--- a/ext/phar/util.c
+++ b/ext/phar/util.c
@@ -227,7 +227,7 @@ int phar_mount_entry(phar_archive_data *phar, char *filename, int filename_len,
if (ssb.sb.st_mode & S_IFDIR) {
entry.is_dir = 1;
- if (NULL != zend_hash_str_add_ptr(&phar->mounted_dirs, entry.filename, path_len, entry.filename)) {
+ if (NULL == zend_hash_str_add_ptr(&phar->mounted_dirs, entry.filename, path_len, entry.filename)) {
/* directory already mounted */
efree(entry.tmp);
efree(entry.filename);
@@ -1393,11 +1393,18 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, off_t end,
zend_fcall_info fci;
zend_fcall_info_cache fcc;
zval retval, zp[3], openssl;
+ zend_string *str;
ZVAL_STRINGL(&openssl, is_sign ? "openssl_sign" : "openssl_verify", is_sign ? sizeof("openssl_sign")-1 : sizeof("openssl_verify")-1);
ZVAL_STRINGL(&zp[1], *signature, *signature_len);
ZVAL_STRINGL(&zp[2], key, key_len);
- ZVAL_STR(&zp[0], php_stream_copy_to_mem(fp, (size_t) end, 0));
+ php_stream_rewind(fp);
+ str = php_stream_copy_to_mem(fp, (size_t) end, 0);
+ if (str) {
+ ZVAL_STR(&zp[0], str);
+ } else {
+ ZVAL_EMPTY_STRING(&zp[0]);
+ }
if (end != Z_STRLEN(zp[0])) {
zval_dtor(&zp[0]);
@@ -1446,7 +1453,7 @@ static int phar_call_openssl_signverify(int is_sign, php_stream *fp, off_t end,
Z_DELREF(zp[2]);
zval_dtor(&zp[0]);
- zval_dtor(&zp[1]);
+ zval_dtor(&zp[2]);
switch (Z_TYPE(retval)) {
default:
@@ -1964,6 +1971,14 @@ static int phar_update_cached_entry(zval *data, void *argument) /* {{{ */
}
/* }}} */
+static void phar_manifest_copy_ctor(zval *zv) /* {{{ */
+{
+ phar_entry_info *info = emalloc(sizeof(phar_entry_info));
+ memcpy(info, Z_PTR_P(zv), sizeof(phar_entry_info));
+ Z_PTR_P(zv) = info;
+}
+/* }}} */
+
static void phar_copy_cached_phar(phar_archive_data **pphar TSRMLS_DC) /* {{{ */
{
phar_archive_data *phar;
@@ -1999,8 +2014,7 @@ static void phar_copy_cached_phar(phar_archive_data **pphar TSRMLS_DC) /* {{{ */
zend_hash_init(&newmanifest, sizeof(phar_entry_info),
zend_get_hash_value, destroy_phar_manifest_entry, 0);
-//??? zend_hash_copy(&newmanifest, &(*pphar)->manifest, NULL, NULL, sizeof(phar_entry_info));
- zend_hash_copy(&newmanifest, &(*pphar)->manifest, NULL);
+ zend_hash_copy(&newmanifest, &(*pphar)->manifest, phar_manifest_copy_ctor);
zend_hash_apply_with_argument(&newmanifest, phar_update_cached_entry, (void *)phar TSRMLS_CC);
phar->manifest = newmanifest;
zend_hash_init(&phar->mounted_dirs, sizeof(char *),
@@ -2021,13 +2035,16 @@ static void phar_copy_cached_phar(phar_archive_data **pphar TSRMLS_DC) /* {{{ */
int phar_copy_on_write(phar_archive_data **pphar TSRMLS_DC) /* {{{ */
{
+ zval zv, *pzv;
phar_archive_data *newpphar;
- if (NULL == (newpphar = zend_hash_str_add_ptr(&(PHAR_GLOBALS->phar_fname_map), (*pphar)->fname, (*pphar)->fname_len, *pphar))) {
+ ZVAL_PTR(&zv, *pphar);
+ if (NULL == (pzv = zend_hash_str_add(&(PHAR_GLOBALS->phar_fname_map), (*pphar)->fname, (*pphar)->fname_len, &zv))) {
return FAILURE;
}
- phar_copy_cached_phar(&newpphar TSRMLS_CC);
+ phar_copy_cached_phar(&Z_PTR_P(pzv) TSRMLS_CC);
+ newpphar = Z_PTR_P(pzv);
/* invalidate phar cache */
PHAR_G(last_phar) = NULL;
PHAR_G(last_phar_name) = PHAR_G(last_alias) = NULL;
diff --git a/ext/session/mod_files.c b/ext/session/mod_files.c
index 3e577bc28a..dd9361b34e 100644
--- a/ext/session/mod_files.c
+++ b/ext/session/mod_files.c
@@ -475,7 +475,7 @@ PS_CREATE_SID_FUNC(files)
PS_FILES_DATA;
do {
- sid = php_session_create_id((void**)&data TSRMLS_C);
+ sid = php_session_create_id((void**)&data TSRMLS_CC);
/* Check collision */
if (data && ps_files_key_exists(data, sid? sid->val : NULL TSRMLS_CC) == SUCCESS) {
if (sid) {
diff --git a/ext/spl/spl_directory.c b/ext/spl/spl_directory.c
index 8cc7ec0b6d..ca7baf2226 100644
--- a/ext/spl/spl_directory.c
+++ b/ext/spl/spl_directory.c
@@ -386,7 +386,7 @@ void spl_filesystem_info_set_filename(spl_filesystem_object *intern, char *path,
intern->file_name = use_copy ? estrndup(path, len) : path;
intern->file_name_len = len;
- while (IS_SLASH_AT(intern->file_name, intern->file_name_len-1) && intern->file_name_len > 1) {
+ while (intern->file_name_len > 1 && IS_SLASH_AT(intern->file_name, intern->file_name_len-1)) {
intern->file_name[intern->file_name_len-1] = 0;
intern->file_name_len--;
}
@@ -1881,6 +1881,9 @@ static int spl_filesystem_object_cast(zval *readobj, zval *writeobj, int type TS
}
return SUCCESS;
}
+ } else if (type == _IS_BOOL) {
+ ZVAL_TRUE(writeobj);
+ return SUCCESS;
}
if (readobj == writeobj) {
zval_dtor(readobj);
diff --git a/ext/xmlrpc/libxmlrpc/xmlrpc.c b/ext/xmlrpc/libxmlrpc/xmlrpc.c
index ce70c2afd9..0f77ae2451 100644
--- a/ext/xmlrpc/libxmlrpc/xmlrpc.c
+++ b/ext/xmlrpc/libxmlrpc/xmlrpc.c
@@ -2394,7 +2394,7 @@ void XMLRPC_ServerDestroy(XMLRPC_SERVER server) {
my_free(sm);
sm = Q_Next(&server->methodlist);
}
- if(server->xIntrospection) {
+ if (server->xIntrospection) {
XMLRPC_CleanupValue(server->xIntrospection);
}
diff --git a/ext/xmlrpc/xmlrpc-epi-php.c b/ext/xmlrpc/xmlrpc-epi-php.c
index 3fb2ba6bb6..ea0d3c27ec 100644
--- a/ext/xmlrpc/xmlrpc-epi-php.c
+++ b/ext/xmlrpc/xmlrpc-epi-php.c
@@ -184,8 +184,8 @@ ZEND_GET_MODULE(xmlrpc)
/* per server data */
typedef struct _xmlrpc_server_data {
- zval* method_map;
- zval* introspection_map;
+ zval method_map;
+ zval introspection_map;
XMLRPC_SERVER server_ptr;
} xmlrpc_server_data;
@@ -199,10 +199,10 @@ typedef struct _php_output_options {
/* data passed to C callback */
typedef struct _xmlrpc_callback_data {
- zval* xmlrpc_method;
- zval* php_function;
- zval* caller_params;
- zval* return_data;
+ zval xmlrpc_method;
+ zval php_function;
+ zval caller_params;
+ zval return_data;
xmlrpc_server_data* server;
char php_executed;
} xmlrpc_callback_data;
@@ -251,10 +251,10 @@ typedef struct _xmlrpc_callback_data {
/***********************
* forward declarations *
***********************/
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue);
+XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval* newvalue);
static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data);
int sset_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE type);
-zval* decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zval* method_name_out);
+void decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zval* method_name_out, zval *retval);
const char* xmlrpc_type_as_str(XMLRPC_VALUE_TYPE type, XMLRPC_VECTOR_TYPE vtype);
XMLRPC_VALUE_TYPE xmlrpc_str_as_type(const char* str);
XMLRPC_VECTOR_TYPE xmlrpc_str_as_vector_type(const char* str);
@@ -269,11 +269,8 @@ static void destroy_server_data(xmlrpc_server_data *server TSRMLS_DC)
if (server) {
XMLRPC_ServerDestroy(server->server_ptr);
- zval_dtor(server->method_map);
- FREE_ZVAL(server->method_map);
-
- zval_dtor(server->introspection_map);
- FREE_ZVAL(server->introspection_map);
+ zval_ptr_dtor(&server->method_map);
+ zval_ptr_dtor(&server->introspection_map);
efree(server);
}
@@ -281,7 +278,7 @@ static void destroy_server_data(xmlrpc_server_data *server TSRMLS_DC)
/* called when server is being destructed. either when xmlrpc_server_destroy
* is called, or when request ends. */
-static void xmlrpc_server_destructor(zend_rsrc_list_entry *rsrc TSRMLS_DC)
+static void xmlrpc_server_destructor(zend_resource *rsrc TSRMLS_DC)
{
if (rsrc && rsrc->ptr) {
destroy_server_data((xmlrpc_server_data*) rsrc->ptr TSRMLS_CC);
@@ -338,28 +335,23 @@ static int add_stringl(zval* list, char* id, char* string, uint length) {
#endif
-static int add_zval(zval* list, const char* id, zval** val)
+static void add_zval(zval* list, const char* id, zval* val)
{
if (list && val) {
if (id) {
int id_len = strlen(id);
if (!(id_len > 1 && id[0] == '0') && is_numeric_string((char *)id, id_len, NULL, NULL, 0) == IS_LONG) {
long index = strtol(id, NULL, 0);
- return zend_hash_index_update(Z_ARRVAL_P(list), index, (void *) val, sizeof(zval **), NULL);
+ zend_hash_index_update(Z_ARRVAL_P(list), index, val);
} else {
- return zend_hash_update(Z_ARRVAL_P(list), (char*) id, strlen(id) + 1, (void *) val, sizeof(zval **), NULL);
+ zend_hash_str_update(Z_ARRVAL_P(list), (char*)id, strlen(id), val);
}
} else {
- return zend_hash_next_index_insert(Z_ARRVAL_P(list), (void *) val, sizeof(zval **), NULL);
+ zend_hash_next_index_insert(Z_ARRVAL_P(list), val);
}
}
- /* what is the correct return on error? */
- return 0;
}
-#define my_zend_hash_get_current_key(ht, my_key, num_index) zend_hash_get_current_key(ht, my_key, num_index, 0)
-
-
/*************************
* input / output options *
*************************/
@@ -369,7 +361,6 @@ static int add_zval(zval* list, const char* id, zval** val)
static void set_output_options(php_output_options* options, zval* output_opts)
{
if (options) {
-
/* defaults */
options->b_php_out = 0;
options->b_auto_version = 1;
@@ -379,92 +370,86 @@ static void set_output_options(php_output_options* options, zval* output_opts)
options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping | xml_elem_non_ascii_escaping | xml_elem_non_print_escaping;
if (output_opts && Z_TYPE_P(output_opts) == IS_ARRAY) {
- zval** val;
+ zval* val;
/* type of output (xml/php) */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), OUTPUT_TYPE_KEY, OUTPUT_TYPE_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_PHP)) {
+ if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), OUTPUT_TYPE_KEY, OUTPUT_TYPE_KEY_LEN)) != NULL) {
+ if (Z_TYPE_P(val) == IS_STRING) {
+ if (!strcmp(Z_STRVAL_P(val), OUTPUT_TYPE_VALUE_PHP)) {
options->b_php_out = 1;
- } else if (!strcmp(Z_STRVAL_PP(val), OUTPUT_TYPE_VALUE_XML)) {
+ } else if (!strcmp(Z_STRVAL_P(val), OUTPUT_TYPE_VALUE_XML)) {
options->b_php_out = 0;
}
}
}
/* verbosity of generated xml */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERBOSITY_KEY, VERBOSITY_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NO_WHITE_SPACE)) {
+ if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), VERBOSITY_KEY, VERBOSITY_KEY_LEN)) != NULL) {
+ if (Z_TYPE_P(val) == IS_STRING) {
+ if (!strcmp(Z_STRVAL_P(val), VERBOSITY_VALUE_NO_WHITE_SPACE)) {
options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_no_white_space;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_NEWLINES_ONLY)) {
+ } else if (!strcmp(Z_STRVAL_P(val), VERBOSITY_VALUE_NEWLINES_ONLY)) {
options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_newlines_only;
- } else if (!strcmp(Z_STRVAL_PP(val), VERBOSITY_VALUE_PRETTY)) {
+ } else if (!strcmp(Z_STRVAL_P(val), VERBOSITY_VALUE_PRETTY)) {
options->xmlrpc_out.xml_elem_opts.verbosity = xml_elem_pretty;
}
}
}
/* version of xml to output */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), VERSION_KEY, VERSION_KEY_LEN + 1, (void**) &val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
+ if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), VERSION_KEY, VERSION_KEY_LEN)) != NULL) {
+ if (Z_TYPE_P(val) == IS_STRING) {
options->b_auto_version = 0;
- if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_XMLRPC)) {
+ if (!strcmp(Z_STRVAL_P(val), VERSION_VALUE_XMLRPC)) {
options->xmlrpc_out.version = xmlrpc_version_1_0;
- } else if (!strcmp(Z_STRVAL_PP(val), VERSION_VALUE_SIMPLE)) {
+ } else if (!strcmp(Z_STRVAL_P(val), VERSION_VALUE_SIMPLE)) {
options->xmlrpc_out.version = xmlrpc_version_simple;
- } else if (!strcmp((*val)->value.str.val, VERSION_VALUE_SOAP11)) {
- options->xmlrpc_out.version = xmlrpc_version_soap_1_1;
+ } else if (!strcmp(Z_STRVAL_P(val), VERSION_VALUE_SOAP11)) {
+ options->xmlrpc_out.version = xmlrpc_version_soap_1_1;
} else { /* if(!strcmp((*val)->value.str.val, VERSION_VALUE_AUTO)) { */
- options->b_auto_version = 1;
+ options->b_auto_version = 1;
}
}
- }
- /* encoding code set */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), ENCODING_KEY, ENCODING_KEY_LEN + 1, (void**)&val) == SUCCESS) {
- if (Z_TYPE_PP(val) == IS_STRING) {
- options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_PP(val));
+ /* encoding code set */
+ if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), ENCODING_KEY, ENCODING_KEY_LEN)) != NULL) {
+ if (Z_TYPE_P(val) == IS_STRING) {
+ options->xmlrpc_out.xml_elem_opts.encoding = estrdup(Z_STRVAL_P(val));
+ }
}
- }
- /* escaping options */
- if (zend_hash_find(Z_ARRVAL_P(output_opts), ESCAPING_KEY, ESCAPING_KEY_LEN + 1, (void**)&val) == SUCCESS) {
- /* multiple values allowed. check if array */
- if (Z_TYPE_PP(val) == IS_ARRAY) {
- zval** iter_val;
+ /* escaping options */
+ if ((val = zend_hash_str_find(Z_ARRVAL_P(output_opts), ESCAPING_KEY, ESCAPING_KEY_LEN)) != NULL) {
+ /* multiple values allowed. check if array */
+ if (Z_TYPE_P(val) == IS_ARRAY) {
+ zval* iter_val;
- zend_hash_internal_pointer_reset(Z_ARRVAL_PP(val));
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping;
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_no_escaping;
- while (1) {
- if (zend_hash_get_current_data(Z_ARRVAL_PP(val), (void**)&iter_val) == SUCCESS) {
- if (Z_TYPE_PP(iter_val) == IS_STRING && Z_STRVAL_PP(iter_val)) {
- if (!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_CDATA)) {
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL_P(val), iter_val) {
+ if (Z_TYPE_P(iter_val) == IS_STRING && Z_STRVAL_P(iter_val)) {
+ if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_CDATA)) {
options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_cdata_escaping;
- } else if (!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_ASCII)) {
+ } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_NON_ASCII)) {
options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_ascii_escaping;
- } else if (!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_NON_PRINT)) {
+ } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_NON_PRINT)) {
options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_non_print_escaping;
- } else if (!strcmp(Z_STRVAL_PP(iter_val), ESCAPING_VALUE_MARKUP)) {
+ } else if (!strcmp(Z_STRVAL_P(iter_val), ESCAPING_VALUE_MARKUP)) {
options->xmlrpc_out.xml_elem_opts.escaping |= xml_elem_markup_escaping;
}
}
- } else {
- break;
+ } ZEND_HASH_FOREACH_END();
+ /* else, check for single value */
+ } else if (Z_TYPE_P(val) == IS_STRING) {
+ if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_CDATA)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping;
+ } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_NON_ASCII)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping;
+ } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_NON_PRINT)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping;
+ } else if (!strcmp(Z_STRVAL_P(val), ESCAPING_VALUE_MARKUP)) {
+ options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping;
}
- zend_hash_move_forward(Z_ARRVAL_PP(val));
- }
- /* else, check for single value */
- } else if (Z_TYPE_PP(val) == IS_STRING) {
- if (!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_CDATA)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_cdata_escaping;
- } else if (!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_ASCII)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_ascii_escaping;
- } else if (!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_NON_PRINT)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_non_print_escaping;
- } else if (!strcmp(Z_STRVAL_PP(val), ESCAPING_VALUE_MARKUP)) {
- options->xmlrpc_out.xml_elem_opts.escaping = xml_elem_markup_escaping;
}
}
}
@@ -486,13 +471,10 @@ static XMLRPC_VECTOR_TYPE determine_vector_type (HashTable *ht)
{
int bArray = 0, bStruct = 0, bMixed = 0;
unsigned long num_index, last_num = 0;
- char* my_key;
+ zend_string* my_key;
- zend_hash_internal_pointer_reset(ht);
- while (1) {
- int res = my_zend_hash_get_current_key(ht, &my_key, &num_index);
-
- if (res == HASH_KEY_IS_LONG) {
+ ZEND_HASH_FOREACH_KEY(ht, num_index, my_key) {
+ if (my_key == NULL) {
if (bStruct) {
bMixed = 1;
break;
@@ -502,17 +484,14 @@ static XMLRPC_VECTOR_TYPE determine_vector_type (HashTable *ht)
}
bArray = 1;
last_num = num_index;
- } else if (res == HASH_KEY_NON_EXISTENT) {
- break;
- } else if (res == HASH_KEY_IS_STRING) {
+ } else {
if (bArray) {
bMixed = 1;
break;
}
bStruct = 1;
}
- zend_hash_move_forward(ht);
- }
+ } ZEND_HASH_FOREACH_END();
return bMixed ? xmlrpc_vector_mixed : (bStruct ? xmlrpc_vector_struct : xmlrpc_vector_array);
}
@@ -522,94 +501,84 @@ static XMLRPC_VALUE PHP_to_XMLRPC_worker (const char* key, zval* in_val, int dep
XMLRPC_VALUE xReturn = NULL;
if (in_val) {
- zval* val = NULL;
+ zval val;
+ ZVAL_UNDEF(&val);
XMLRPC_VALUE_TYPE type = get_zval_xmlrpc_type(in_val, &val);
- if (val) {
+ if (!Z_ISUNDEF(val)) {
switch (type) {
case xmlrpc_base64:
- if (Z_TYPE_P(val) == IS_NULL) {
+ if (Z_TYPE(val) == IS_NULL) {
xReturn = XMLRPC_CreateValueEmpty();
XMLRPC_SetValueID(xReturn, key, 0);
} else {
- xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
+ xReturn = XMLRPC_CreateValueBase64(key, Z_STRVAL(val), Z_STRLEN(val));
}
break;
case xmlrpc_datetime:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueDateTime_ISO8601(key, Z_STRVAL_P(val));
+ convert_to_string(&val);
+ xReturn = XMLRPC_CreateValueDateTime_ISO8601(key, Z_STRVAL(val));
break;
case xmlrpc_boolean:
- convert_to_boolean(val);
- xReturn = XMLRPC_CreateValueBoolean(key, Z_TYPE_P(val) == IS_TRUE);
+ convert_to_boolean(&val);
+ xReturn = XMLRPC_CreateValueBoolean(key, Z_TYPE(val) == IS_TRUE);
break;
case xmlrpc_int:
- convert_to_long(val);
- xReturn = XMLRPC_CreateValueInt(key, Z_LVAL_P(val));
+ convert_to_long(&val);
+ xReturn = XMLRPC_CreateValueInt(key, Z_LVAL(val));
break;
case xmlrpc_double:
- convert_to_double(val);
- xReturn = XMLRPC_CreateValueDouble(key, Z_DVAL_P(val));
+ convert_to_double(&val);
+ xReturn = XMLRPC_CreateValueDouble(key, Z_DVAL(val));
break;
case xmlrpc_string:
- convert_to_string(val);
- xReturn = XMLRPC_CreateValueString(key, Z_STRVAL_P(val), Z_STRLEN_P(val));
+ convert_to_string(&val);
+ xReturn = XMLRPC_CreateValueString(key, Z_STRVAL(val), Z_STRLEN(val));
break;
case xmlrpc_vector:
{
unsigned long num_index;
- zval** pIter;
- char* my_key;
+ zval* pIter;
+ zend_string* my_key;
HashTable *ht = NULL;
- zval *val_arr;
+ zval val_arr;
XMLRPC_VECTOR_TYPE vtype;
- ht = HASH_OF(val);
- if (ht && ht->nApplyCount > 1) {
+ ht = HASH_OF(&val);
+ if (ht && ht->u.v.nApplyCount > 1) {
php_error_docref(NULL TSRMLS_CC, E_ERROR, "XML-RPC doesn't support circular references");
return NULL;
}
- MAKE_STD_ZVAL(val_arr);
- MAKE_COPY_ZVAL(&val, val_arr);
- convert_to_array(val_arr);
+ ZVAL_COPY(&val_arr, &val);
+ convert_to_array(&val_arr);
- vtype = determine_vector_type(Z_ARRVAL_P(val_arr));
+ vtype = determine_vector_type(Z_ARRVAL(val_arr));
xReturn = XMLRPC_CreateVector(key, vtype);
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(val_arr));
- while(zend_hash_get_current_data(Z_ARRVAL_P(val_arr), (void**)&pIter) == SUCCESS) {
- int res = my_zend_hash_get_current_key(Z_ARRVAL_P(val_arr), &my_key, &num_index);
-
- switch (res) {
- case HASH_KEY_NON_EXISTENT:
- break;
- case HASH_KEY_IS_STRING:
- case HASH_KEY_IS_LONG:
- ht = HASH_OF(*pIter);
- if (ht) {
- ht->nApplyCount++;
- }
- if (res == HASH_KEY_IS_LONG) {
- char *num_str = NULL;
-
- if (vtype != xmlrpc_vector_array) {
- spprintf(&num_str, 0, "%ld", num_index);
- }
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(num_str, *pIter, depth++ TSRMLS_CC));
- if (num_str) {
- efree(num_str);
- }
- } else {
- XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key, *pIter, depth++ TSRMLS_CC));
- }
- if (ht) {
- ht->nApplyCount--;
- }
- break;
+ ZEND_HASH_FOREACH_KEY_VAL(Z_ARRVAL(val_arr), num_index, my_key, pIter) {
+ ht = HASH_OF(pIter);
+ if (ht) {
+ ht->u.v.nApplyCount++;
}
- zend_hash_move_forward(Z_ARRVAL_P(val_arr));
- }
+ if (my_key == NULL) {
+ char *num_str = NULL;
+
+ if (vtype != xmlrpc_vector_array) {
+ spprintf(&num_str, 0, "%ld", num_index);
+ }
+
+ XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(num_str, pIter, depth++ TSRMLS_CC));
+ if (num_str) {
+ efree(num_str);
+ }
+ } else {
+ XMLRPC_AddValueToVector(xReturn, PHP_to_XMLRPC_worker(my_key->val, pIter, depth++ TSRMLS_CC));
+ }
+ if (ht) {
+ ht->u.v.nApplyCount--;
+ }
+ } ZEND_HASH_FOREACH_END();
zval_ptr_dtor(&val_arr);
}
break;
@@ -627,51 +596,39 @@ static XMLRPC_VALUE PHP_to_XMLRPC(zval* root_val TSRMLS_DC)
}
/* recursively convert xmlrpc values into php values */
-static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
+static void XMLRPC_to_PHP(XMLRPC_VALUE el, zval *elem)
{
- zval* elem = NULL;
const char* pStr;
if (el) {
XMLRPC_VALUE_TYPE type = XMLRPC_GetValueType(el);
- MAKE_STD_ZVAL(elem); /* init. very important. spent a frustrating day finding this out. */
-
- switch(type) {
+ switch (type) {
case xmlrpc_empty:
- Z_TYPE_P(elem) = IS_NULL;
+ ZVAL_NULL(elem);
break;
case xmlrpc_string:
pStr = XMLRPC_GetValueString(el);
if (pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
+ ZVAL_STRINGL(elem, pStr, XMLRPC_GetValueStringLen(el));
}
break;
case xmlrpc_int:
- Z_LVAL_P(elem) = XMLRPC_GetValueInt(el);
- Z_TYPE_P(elem) = IS_LONG;
+ ZVAL_LONG(elem, XMLRPC_GetValueInt(el));
break;
case xmlrpc_boolean:
- Z_LVAL_P(elem) = XMLRPC_GetValueBoolean(el);
- Z_TYPE_P(elem) = IS_BOOL;
+ ZVAL_BOOL(elem, XMLRPC_GetValueBoolean(el));
break;
case xmlrpc_double:
- Z_DVAL_P(elem) = XMLRPC_GetValueDouble(el);
- Z_TYPE_P(elem) = IS_DOUBLE;
+ ZVAL_DOUBLE(elem, XMLRPC_GetValueDouble(el));
break;
case xmlrpc_datetime:
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(XMLRPC_GetValueDateTime_ISO8601(el), Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
+ ZVAL_STRINGL(elem, XMLRPC_GetValueDateTime_ISO8601(el), XMLRPC_GetValueStringLen(el));
break;
case xmlrpc_base64:
pStr = XMLRPC_GetValueBase64(el);
if (pStr) {
- Z_STRLEN_P(elem) = XMLRPC_GetValueStringLen(el);
- Z_STRVAL_P(elem) = estrndup(pStr, Z_STRLEN_P(elem));
- Z_TYPE_P(elem) = IS_STRING;
+ ZVAL_STRINGL(elem, pStr, XMLRPC_GetValueStringLen(el));
}
break;
case xmlrpc_vector:
@@ -680,8 +637,10 @@ static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
XMLRPC_VALUE xIter = XMLRPC_VectorRewind(el);
while( xIter ) {
- zval *val = XMLRPC_to_PHP(xIter);
- if (val) {
+ zval val;
+ ZVAL_UNDEF(&val);
+ XMLRPC_to_PHP(xIter, &val);
+ if (!Z_ISUNDEF(val)) {
add_zval(elem, XMLRPC_GetValueID(xIter), &val);
}
xIter = XMLRPC_VectorNext(el);
@@ -693,7 +652,6 @@ static zval* XMLRPC_to_PHP(XMLRPC_VALUE el)
}
set_zval_xmlrpc_type(elem, type);
}
- return elem;
}
/* {{{ proto string xmlrpc_encode_request(string method, mixed params [, array output_options])
@@ -713,7 +671,7 @@ PHP_FUNCTION(xmlrpc_encode_request)
set_output_options(&out, out_opts ? out_opts : 0);
- if (return_value_used) {
+ if (USED_RET()) {
xRequest = XMLRPC_RequestNew();
if (xRequest) {
@@ -730,7 +688,7 @@ PHP_FUNCTION(xmlrpc_encode_request)
outBuf = XMLRPC_REQUEST_ToXML(xRequest, 0);
if (outBuf) {
- RETVAL_STRING(outBuf, 1);
+ RETVAL_STRING(outBuf);
free(outBuf);
}
XMLRPC_RequestFree(xRequest, 1);
@@ -748,23 +706,23 @@ PHP_FUNCTION(xmlrpc_encode_request)
PHP_FUNCTION(xmlrpc_encode)
{
XMLRPC_VALUE xOut = NULL;
- zval **arg1;
+ zval *arg1;
char *outBuf;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &arg1) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg1) == FAILURE) {
return;
}
- if (return_value_used) {
+ if (USED_RET()) {
/* convert native php type to xmlrpc type */
- xOut = PHP_to_XMLRPC(*arg1 TSRMLS_CC);
+ xOut = PHP_to_XMLRPC(arg1 TSRMLS_CC);
/* generate raw xml from xmlrpc data */
outBuf = XMLRPC_VALUE_ToXML(xOut, 0);
if (xOut) {
if (outBuf) {
- RETVAL_STRING(outBuf, 1);
+ RETVAL_STRING(outBuf);
free(outBuf);
}
/* cleanup */
@@ -774,9 +732,8 @@ PHP_FUNCTION(xmlrpc_encode)
}
/* }}} */
-zval* decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zval* method_name_out) /* {{{ */
+void decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zval* method_name_out, zval *retval) /* {{{ */
{
- zval* retval = NULL;
XMLRPC_REQUEST response;
STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS opts = {{0}};
const char *method_name;
@@ -785,20 +742,19 @@ zval* decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zva
/* generate XMLRPC_REQUEST from raw xml */
response = XMLRPC_REQUEST_FromXML(xml_in, xml_in_len, &opts);
if (response) {
+ ZVAL_NULL(retval);
/* convert xmlrpc data to native php types */
- retval = XMLRPC_to_PHP(XMLRPC_RequestGetData(response));
+ XMLRPC_to_PHP(XMLRPC_RequestGetData(response), retval);
if (XMLRPC_RequestGetRequestType(response) == xmlrpc_request_call) {
if (method_name_out) {
method_name = XMLRPC_RequestGetMethodName(response);
if (method_name) {
- zval_dtor(method_name_out);
- Z_TYPE_P(method_name_out) = IS_STRING;
- Z_STRVAL_P(method_name_out) = estrdup(method_name);
- Z_STRLEN_P(method_name_out) = strlen(Z_STRVAL_P(method_name_out));
- } else if (retval) {
- zval_ptr_dtor(&retval);
- retval = NULL;
+ zval_ptr_dtor(method_name_out);
+ ZVAL_STRING(method_name_out, method_name);
+ } else {
+ zval_ptr_dtor(retval);
+ ZVAL_NULL(retval);
}
}
}
@@ -806,7 +762,6 @@ zval* decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zva
/* dust, sweep, and mop */
XMLRPC_RequestFree(response, 1);
}
- return retval;
}
/* }}} */
@@ -815,20 +770,17 @@ zval* decode_request_worker(char *xml_in, int xml_in_len, char *encoding_in, zva
PHP_FUNCTION(xmlrpc_decode_request)
{
char *xml, *encoding = NULL;
- zval **method;
+ zval *method;
int xml_len, encoding_len = 0;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sZ|s", &xml, &xml_len, &method, &encoding, &encoding_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz|s", &xml, &xml_len, &method, &encoding, &encoding_len) == FAILURE) {
return;
}
+ ZVAL_DEREF(method);
- if (return_value_used) {
- zval* retval = decode_request_worker(xml, xml_len, encoding_len ? encoding : NULL, *method);
- if (retval) {
- *return_value = *retval;
- FREE_ZVAL(retval);
- }
+ if (USED_RET()) {
+ decode_request_worker(xml, xml_len, encoding_len ? encoding : NULL, method, return_value);
}
}
/* }}} */
@@ -844,12 +796,8 @@ PHP_FUNCTION(xmlrpc_decode)
return;
}
- if (return_value_used) {
- zval* retval = decode_request_worker(arg1, arg1_len, arg2_len ? arg2 : NULL, NULL);
- if (retval) {
- *return_value = *retval;
- FREE_ZVAL(retval);
- }
+ if (USED_RET()) {
+ decode_request_worker(arg1, arg1_len, arg2_len ? arg2 : NULL, NULL, return_value);
}
}
/* }}} */
@@ -866,24 +814,18 @@ PHP_FUNCTION(xmlrpc_server_create)
return;
}
- if (return_value_used) {
- zval *method_map, *introspection_map;
+ if (USED_RET()) {
xmlrpc_server_data *server = emalloc(sizeof(xmlrpc_server_data));
- MAKE_STD_ZVAL(method_map);
- MAKE_STD_ZVAL(introspection_map);
-
- array_init(method_map);
- array_init(introspection_map);
/* allocate server data. free'd in destroy_server_data() */
- server->method_map = method_map;
- server->introspection_map = introspection_map;
+ array_init(&server->method_map);
+ array_init(&server->introspection_map);
server->server_ptr = XMLRPC_ServerCreate();
XMLRPC_ServerRegisterIntrospectionCallback(server->server_ptr, php_xmlrpc_introspection_callback);
/* store for later use */
- ZEND_REGISTER_RESOURCE(return_value,server, le_xmlrpc_server);
+ ZEND_REGISTER_RESOURCE(return_value, server, le_xmlrpc_server);
}
}
/* }}} */
@@ -893,23 +835,22 @@ PHP_FUNCTION(xmlrpc_server_create)
PHP_FUNCTION(xmlrpc_server_destroy)
{
zval *arg1;
- int bSuccess = FAILURE, type;
+ int bSuccess = FAILURE;
xmlrpc_server_data *server;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "r", &arg1) == FAILURE) {
return;
}
- server = zend_list_find(Z_LVAL_P(arg1), &type);
-
- if (server && type == le_xmlrpc_server) {
- bSuccess = zend_list_delete(Z_LVAL_P(arg1));
+ ZEND_FETCH_RESOURCE(server, xmlrpc_server_data*, arg1, -1, "xmlrpc server", le_xmlrpc_server);
+ if (server) {
+ bSuccess = zend_list_close(Z_RES_P(arg1));
/* called by hashtable destructor
* destroy_server_data(server);
*/
}
- RETVAL_LONG(bSuccess == SUCCESS);
+ RETURN_BOOL(bSuccess == SUCCESS);
}
/* }}} */
@@ -919,42 +860,38 @@ PHP_FUNCTION(xmlrpc_server_destroy)
static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRequest, void* data) /* {{{ */
{
xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
- zval** php_function;
- zval* xmlrpc_params;
- zval* callback_params[3];
+ zval* php_function;
+ zval xmlrpc_params;
+ zval callback_params[3];
TSRMLS_FETCH();
- zval_dtor(pData->xmlrpc_method);
- zval_dtor(pData->return_data);
+ zval_ptr_dtor(&pData->xmlrpc_method);
+ zval_ptr_dtor(&pData->return_data);
/* convert xmlrpc to native php types */
- ZVAL_STRING(pData->xmlrpc_method, XMLRPC_RequestGetMethodName(xRequest), 1);
- xmlrpc_params = XMLRPC_to_PHP(XMLRPC_RequestGetData(xRequest));
+ ZVAL_STRING(&pData->xmlrpc_method, XMLRPC_RequestGetMethodName(xRequest));
+ XMLRPC_to_PHP(XMLRPC_RequestGetData(xRequest), &xmlrpc_params);
/* check if the called method has been previous registered */
- if(zend_hash_find(Z_ARRVAL_P(pData->server->method_map),
- Z_STRVAL_P(pData->xmlrpc_method),
- Z_STRLEN_P(pData->xmlrpc_method) + 1,
- (void**)&php_function) == SUCCESS) {
-
- pData->php_function = *php_function;
+ if ((php_function = zend_hash_find(Z_ARRVAL(pData->server->method_map), Z_STR(pData->xmlrpc_method))) != NULL) {
+ ZVAL_COPY_VALUE(&pData->php_function, php_function);
}
/* setup data hoojum */
- callback_params[0] = pData->xmlrpc_method;
- callback_params[1] = xmlrpc_params;
- callback_params[2] = pData->caller_params;
+ ZVAL_COPY_VALUE(&callback_params[0], &pData->xmlrpc_method);
+ ZVAL_COPY_VALUE(&callback_params[1], &xmlrpc_params);
+ ZVAL_COPY_VALUE(&callback_params[2], &pData->caller_params);
/* Use same C function for all methods */
/* php func prototype: function user_func($method_name, $xmlrpc_params, $user_params) */
- call_user_function(CG(function_table), NULL, pData->php_function, pData->return_data, 3, callback_params TSRMLS_CC);
+ call_user_function(CG(function_table), NULL, &pData->php_function, &pData->return_data, 3, callback_params TSRMLS_CC);
pData->php_executed = 1;
zval_ptr_dtor(&xmlrpc_params);
- return PHP_to_XMLRPC(pData->return_data TSRMLS_CC);
+ return PHP_to_XMLRPC(&pData->return_data TSRMLS_CC);
}
/* }}} */
@@ -963,61 +900,54 @@ static XMLRPC_VALUE php_xmlrpc_callback(XMLRPC_SERVER server, XMLRPC_REQUEST xRe
*/
static void php_xmlrpc_introspection_callback(XMLRPC_SERVER server, void* data) /* {{{ */
{
- zval retval, **php_function;
- zval *callback_params[1];
- char *php_function_name;
+ zval retval, *php_function;
+ zval callback_params[1];
+ zend_string *php_function_name;
xmlrpc_callback_data* pData = (xmlrpc_callback_data*)data;
TSRMLS_FETCH();
/* setup data hoojum */
- callback_params[0] = pData->caller_params;
-
- /* loop through and call all registered callbacks */
- zend_hash_internal_pointer_reset(Z_ARRVAL_P(pData->server->introspection_map));
- while (1) {
- if (zend_hash_get_current_data(Z_ARRVAL_P(pData->server->introspection_map), (void**)&php_function) == SUCCESS) {
- if (zend_is_callable(*php_function, 0, &php_function_name TSRMLS_CC)) {
- /* php func prototype: function string user_func($user_params) */
- if (call_user_function(CG(function_table), NULL, *php_function, &retval, 1, callback_params TSRMLS_CC) == SUCCESS) {
- XMLRPC_VALUE xData;
- STRUCT_XMLRPC_ERROR err = {0};
-
- /* return value should be a string */
- convert_to_string(&retval);
-
- xData = XMLRPC_IntrospectionCreateDescription(Z_STRVAL(retval), &err);
-
- if (xData) {
- if (!XMLRPC_ServerAddIntrospectionData(server, xData)) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s(), improper element structure", php_function_name);
- }
- XMLRPC_CleanupValue(xData);
- } else {
- /* could not create description */
- if (err.xml_elem_error.parser_code) {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "xml parse error: [line %ld, column %ld, message: %s] Unable to add introspection data returned from %s()",
- err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error, php_function_name);
- } else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s()", php_function_name);
- }
+ ZVAL_COPY_VALUE(&callback_params[0], &pData->caller_params);
+
+ ZEND_HASH_FOREACH_VAL(Z_ARRVAL(pData->server->introspection_map), php_function) {
+ if (zend_is_callable(php_function, 0, &php_function_name TSRMLS_CC)) {
+ /* php func prototype: function string user_func($user_params) */
+ if (call_user_function(CG(function_table), NULL, php_function, &retval, 1, callback_params TSRMLS_CC) == SUCCESS) {
+ XMLRPC_VALUE xData;
+ STRUCT_XMLRPC_ERROR err = {0};
+
+ /* return value should be a string */
+ convert_to_string(&retval);
+
+ xData = XMLRPC_IntrospectionCreateDescription(Z_STRVAL(retval), &err);
+
+ if (xData) {
+ if (!XMLRPC_ServerAddIntrospectionData(server, xData)) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s(), improper element structure", php_function_name->val);
}
- zval_dtor(&retval);
+ XMLRPC_CleanupValue(xData);
} else {
- /* user func failed */
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error calling user introspection callback: %s()", php_function_name);
+ /* could not create description */
+ if (err.xml_elem_error.parser_code) {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "xml parse error: [line %ld, column %ld, message: %s] Unable to add introspection data returned from %s()",
+ err.xml_elem_error.column, err.xml_elem_error.line, err.xml_elem_error.parser_error, php_function_name->val);
+ } else {
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Unable to add introspection data returned from %s()", php_function_name->val);
+ }
}
+ zval_ptr_dtor(&retval);
} else {
- php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid callback '%s' passed", php_function_name);
+ /* user func failed */
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Error calling user introspection callback: %s()", php_function_name->val);
}
- efree(php_function_name);
} else {
- break;
+ php_error_docref(NULL TSRMLS_CC, E_WARNING, "Invalid callback '%s' passed", php_function_name->val);
}
- zend_hash_move_forward(Z_ARRVAL_P(pData->server->introspection_map));
- }
+ STR_RELEASE(php_function_name);
+ } ZEND_HASH_FOREACH_END();
/* so we don't call the same callbacks ever again */
- zend_hash_clean(Z_ARRVAL_P(pData->server->introspection_map));
+ zend_hash_clean(Z_ARRVAL(pData->server->introspection_map));
}
/* }}} */
@@ -1027,32 +957,29 @@ PHP_FUNCTION(xmlrpc_server_register_method)
{
char *method_key;
int method_key_len;
- zval *handle, *method_name_save, **method_name;
- int type;
+ zval *handle, *method_name;
xmlrpc_server_data* server;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsZ", &handle, &method_key, &method_key_len, &method_name) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsz", &handle, &method_key, &method_key_len, &method_name) == FAILURE) {
return;
}
- server = zend_list_find(Z_LVAL_P(handle), &type);
+ ZEND_FETCH_RESOURCE(server, xmlrpc_server_data*, handle, -1, "xmlrpc server", le_xmlrpc_server);
- if (type == le_xmlrpc_server) {
- /* register with C engine. every method just calls our standard callback,
- * and it then dispatches to php as necessary
- */
- if (XMLRPC_ServerRegisterMethod(server->server_ptr, method_key, php_xmlrpc_callback)) {
- /* save for later use */
- ALLOC_ZVAL(method_name_save);
- MAKE_COPY_ZVAL(method_name, method_name_save);
-
- /* register our php method */
- add_zval(server->method_map, method_key, &method_name_save);
+ /* register with C engine. every method just calls our standard callback,
+ * and it then dispatches to php as necessary
+ */
+ if (XMLRPC_ServerRegisterMethod(server->server_ptr, method_key, php_xmlrpc_callback)) {
+ /* save for later use */
- RETURN_BOOL(1);
+ if (Z_REFCOUNTED_P(method_name)) {
+ Z_ADDREF_P(method_name);
}
+ /* register our php method */
+ add_zval(&server->method_map, method_key, method_name);
+
+ RETURN_TRUE;
}
- RETURN_BOOL(0);
}
/* }}} */
@@ -1060,27 +987,22 @@ PHP_FUNCTION(xmlrpc_server_register_method)
Register a PHP function to generate documentation */
PHP_FUNCTION(xmlrpc_server_register_introspection_callback)
{
- zval **method_name, *handle, *method_name_save;
- int type;
+ zval *method_name, *handle;
xmlrpc_server_data* server;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rZ", &handle, &method_name) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rz", &handle, &method_name) == FAILURE) {
return;
}
- server = zend_list_find(Z_LVAL_P(handle), &type);
+ ZEND_FETCH_RESOURCE(server, xmlrpc_server_data*, handle, -1, "xmlrpc server", le_xmlrpc_server);
- if (type == le_xmlrpc_server) {
- /* save for later use */
- ALLOC_ZVAL(method_name_save);
- MAKE_COPY_ZVAL(method_name, method_name_save);
-
- /* register our php method */
- add_zval(server->introspection_map, NULL, &method_name_save);
-
- RETURN_BOOL(1);
+ if (Z_REFCOUNTED_P(method_name)) {
+ Z_ADDREF_P(method_name);
}
- RETURN_BOOL(0);
+ /* register our php method */
+ add_zval(&server->introspection_map, NULL, method_name);
+
+ RETURN_TRUE;
}
/* }}} */
@@ -1090,17 +1012,17 @@ PHP_FUNCTION(xmlrpc_server_register_introspection_callback)
Parses XML requests and call methods */
PHP_FUNCTION(xmlrpc_server_call_method)
{
- xmlrpc_callback_data data = {0};
XMLRPC_REQUEST xRequest;
+ xmlrpc_callback_data data;
STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS input_opts;
xmlrpc_server_data* server;
- zval **caller_params, *handle, *output_opts = NULL;
+ zval *caller_params, *handle, *output_opts = NULL;
char *rawxml;
- int rawxml_len, type;
+ int rawxml_len;
php_output_options out;
- int argc =ZEND_NUM_ARGS();
+ int argc = ZEND_NUM_ARGS();
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsZ|a", &handle, &rawxml, &rawxml_len, &caller_params, &output_opts) != SUCCESS) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rsz|a", &handle, &rawxml, &rawxml_len, &caller_params, &output_opts) != SUCCESS) {
return;
}
/* user output options */
@@ -1110,87 +1032,80 @@ PHP_FUNCTION(xmlrpc_server_call_method)
set_output_options(&out, output_opts);
}
- server = zend_list_find(Z_LVAL_P(handle), &type);
+ ZEND_FETCH_RESOURCE(server, xmlrpc_server_data*, handle, -1, "xmlrpc server", le_xmlrpc_server);
- if (type == le_xmlrpc_server) {
- /* HACK: use output encoding for now */
- input_opts.xml_elem_opts.encoding = utf8_get_encoding_id_from_string(out.xmlrpc_out.xml_elem_opts.encoding);
+ /* HACK: use output encoding for now */
+ input_opts.xml_elem_opts.encoding = utf8_get_encoding_id_from_string(out.xmlrpc_out.xml_elem_opts.encoding);
- /* generate an XMLRPC_REQUEST from the raw xml input */
- xRequest = XMLRPC_REQUEST_FromXML(rawxml, rawxml_len, &input_opts);
+ /* generate an XMLRPC_REQUEST from the raw xml input */
+ xRequest = XMLRPC_REQUEST_FromXML(rawxml, rawxml_len, &input_opts);
- if (xRequest) {
- const char* methodname = XMLRPC_RequestGetMethodName(xRequest);
- XMLRPC_VALUE xAnswer = NULL;
- MAKE_STD_ZVAL(data.xmlrpc_method); /* init. very important. spent a frustrating day finding this out. */
- MAKE_STD_ZVAL(data.return_data);
- Z_TYPE_P(data.return_data) = IS_NULL; /* in case value is never init'd, we don't dtor to think it is a string or something */
- Z_TYPE_P(data.xmlrpc_method) = IS_NULL;
-
- /* setup some data to pass to the callback function */
- data.caller_params = *caller_params;
- data.php_executed = 0;
- data.server = server;
-
- /* We could just call the php method directly ourselves at this point, but we do this
- * with a C callback in case the xmlrpc library ever implements some cool usage stats,
- * or somesuch.
- */
- xAnswer = XMLRPC_ServerCallMethod(server->server_ptr, xRequest, &data);
- if (xAnswer && out.b_php_out) {
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
- data.return_data = XMLRPC_to_PHP(xAnswer);
- } else if (data.php_executed && !out.b_php_out && !xAnswer) {
- xAnswer = PHP_to_XMLRPC(data.return_data TSRMLS_CC);
- }
+ if (xRequest) {
+ const char* methodname = XMLRPC_RequestGetMethodName(xRequest);
+ XMLRPC_VALUE xAnswer = NULL;
+ ZVAL_NULL(&data.xmlrpc_method); /* init. very important. spent a frustrating day finding this out. */
+ ZVAL_NULL(&data.return_data);
+ ZVAL_NULL(&data.return_data); /* in case value is never init'd, we don't dtor to think it is a string or something */
+ ZVAL_NULL(&data.xmlrpc_method);
- /* should we return data as xml? */
- if (!out.b_php_out) {
- XMLRPC_REQUEST xResponse = XMLRPC_RequestNew();
- if (xResponse) {
- char *outBuf = 0;
- int buf_len = 0;
-
- /* automagically determine output serialization type from request type */
- if (out.b_auto_version) {
- XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
- if (opts) {
- out.xmlrpc_out.version = opts->version;
- }
- }
- /* set some required request hoojum */
- XMLRPC_RequestSetOutputOptions(xResponse, &out.xmlrpc_out);
- XMLRPC_RequestSetRequestType(xResponse, xmlrpc_request_response);
- XMLRPC_RequestSetData(xResponse, xAnswer);
- XMLRPC_RequestSetMethodName(xResponse, methodname);
-
- /* generate xml */
- outBuf = XMLRPC_REQUEST_ToXML(xResponse, &buf_len);
- if (outBuf) {
- RETVAL_STRINGL(outBuf, buf_len, 1);
- free(outBuf);
+ /* setup some data to pass to the callback function */
+ ZVAL_COPY_VALUE(&data.caller_params, caller_params);
+ data.php_executed = 0;
+ data.server = server;
+
+ /* We could just call the php method directly ourselves at this point, but we do this
+ * with a C callback in case the xmlrpc library ever implements some cool usage stats,
+ * or somesuch.
+ */
+ xAnswer = XMLRPC_ServerCallMethod(server->server_ptr, xRequest, &data);
+ if (xAnswer && out.b_php_out) {
+ XMLRPC_to_PHP(xAnswer, &data.return_data);
+ } else if (data.php_executed && !out.b_php_out && !xAnswer) {
+ xAnswer = PHP_to_XMLRPC(&data.return_data TSRMLS_CC);
+ }
+
+ /* should we return data as xml? */
+ if (!out.b_php_out) {
+ XMLRPC_REQUEST xResponse = XMLRPC_RequestNew();
+ if (xResponse) {
+ char *outBuf = 0;
+ int buf_len = 0;
+
+ /* automagically determine output serialization type from request type */
+ if (out.b_auto_version) {
+ XMLRPC_REQUEST_OUTPUT_OPTIONS opts = XMLRPC_RequestGetOutputOptions(xRequest);
+ if (opts) {
+ out.xmlrpc_out.version = opts->version;
}
- /* cleanup after ourselves. what a sty! */
- XMLRPC_RequestFree(xResponse, 0);
}
- } else { /* or as native php types? */
- *return_value = *data.return_data;
- zval_copy_ctor(return_value);
+ /* set some required request hoojum */
+ XMLRPC_RequestSetOutputOptions(xResponse, &out.xmlrpc_out);
+ XMLRPC_RequestSetRequestType(xResponse, xmlrpc_request_response);
+ XMLRPC_RequestSetData(xResponse, xAnswer);
+ XMLRPC_RequestSetMethodName(xResponse, methodname);
+
+ /* generate xml */
+ outBuf = XMLRPC_REQUEST_ToXML(xResponse, &buf_len);
+ if (outBuf) {
+ RETVAL_STRINGL(outBuf, buf_len);
+ free(outBuf);
+ }
+ /* cleanup after ourselves. what a sty! */
+ XMLRPC_RequestFree(xResponse, 0);
}
+ } else { /* or as native php types? */
+ ZVAL_COPY(return_value, &data.return_data);
+ }
- /* cleanup after ourselves. what a sty! */
- zval_ptr_dtor(&data.xmlrpc_method);
-
- zval_dtor(data.return_data);
- FREE_ZVAL(data.return_data);
-
- if (xAnswer) {
- XMLRPC_CleanupValue(xAnswer);
- }
+ /* cleanup after ourselves. what a sty! */
+ zval_ptr_dtor(&data.xmlrpc_method);
+ zval_ptr_dtor(&data.return_data);
- XMLRPC_RequestFree(xRequest, 1);
+ if (xAnswer) {
+ XMLRPC_CleanupValue(xAnswer);
}
+
+ XMLRPC_RequestFree(xRequest, 1);
}
}
/* }}} */
@@ -1200,22 +1115,19 @@ PHP_FUNCTION(xmlrpc_server_call_method)
PHP_FUNCTION(xmlrpc_server_add_introspection_data)
{
zval *handle, *desc;
- int type;
xmlrpc_server_data* server;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ra", &handle, &desc) == FAILURE) {
return;
}
- server = zend_list_find(Z_LVAL_P(handle), &type);
+ ZEND_FETCH_RESOURCE(server, xmlrpc_server_data*, handle, -1, "xmlrpc server", le_xmlrpc_server);
- if (type == le_xmlrpc_server) {
- XMLRPC_VALUE xDesc = PHP_to_XMLRPC(desc TSRMLS_CC);
- if (xDesc) {
- int retval = XMLRPC_ServerAddIntrospectionData(server->server_ptr, xDesc);
- XMLRPC_CleanupValue(xDesc);
- RETURN_LONG(retval);
- }
+ XMLRPC_VALUE xDesc = PHP_to_XMLRPC(desc TSRMLS_CC);
+ if (xDesc) {
+ int retval = XMLRPC_ServerAddIntrospectionData(server->server_ptr, xDesc);
+ XMLRPC_CleanupValue(xDesc);
+ RETURN_LONG(retval);
}
RETURN_LONG(0);
}
@@ -1225,7 +1137,6 @@ PHP_FUNCTION(xmlrpc_server_add_introspection_data)
Decodes XML into a list of method descriptions */
PHP_FUNCTION(xmlrpc_parse_method_descriptions)
{
- zval *retval;
char *arg1;
int arg1_len;
@@ -1233,15 +1144,11 @@ PHP_FUNCTION(xmlrpc_parse_method_descriptions)
return;
}
- if (return_value_used) {
+ if (USED_RET()) {
STRUCT_XMLRPC_ERROR err = {0};
XMLRPC_VALUE xVal = XMLRPC_IntrospectionCreateDescription(arg1, &err);
if (xVal) {
- retval = XMLRPC_to_PHP(xVal);
-
- if (retval) {
- RETVAL_ZVAL(retval, 1, 1);
- }
+ XMLRPC_to_PHP(xVal, return_value);
/* dust, sweep, and mop */
XMLRPC_CleanupValue(xVal);
} else {
@@ -1355,29 +1262,22 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */
if (Z_TYPE_P(value) == IS_STRING) {
if (newtype == xmlrpc_base64 || newtype == xmlrpc_datetime) {
const char* typestr = xmlrpc_type_as_str(newtype, xmlrpc_vector_none);
- zval* type;
+ zval type;
- MAKE_STD_ZVAL(type);
-
- Z_TYPE_P(type) = IS_STRING;
- Z_STRVAL_P(type) = estrdup(typestr);
- Z_STRLEN_P(type) = strlen(typestr);
+ ZVAL_STRING(&type, typestr);
if (newtype == xmlrpc_datetime) {
- XMLRPC_VALUE v = XMLRPC_CreateValueDateTime_ISO8601(NULL, value->value.str.val);
+ XMLRPC_VALUE v = XMLRPC_CreateValueDateTime_ISO8601(NULL, Z_STRVAL_P(value));
if (v) {
time_t timestamp = (time_t) php_parse_date((char *)XMLRPC_GetValueDateTime_ISO8601(v), NULL);
if (timestamp != -1) {
- zval* ztimestamp;
-
- MAKE_STD_ZVAL(ztimestamp);
+ zval ztimestamp;
- ztimestamp->type = IS_LONG;
- ztimestamp->value.lval = timestamp;
+ ZVAL_LONG(&ztimestamp, timestamp);
convert_to_object(value);
- if (SUCCESS == zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL)) {
- bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR), (void *) &ztimestamp, sizeof(zval *), NULL);
+ if (zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type)) {
+ bSuccess = zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_VALUE_TS_ATTR, sizeof(OBJECT_VALUE_TS_ATTR) - 1, &ztimestamp) != NULL;
}
} else {
zval_ptr_dtor(&type);
@@ -1388,7 +1288,7 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */
}
} else {
convert_to_object(value);
- bSuccess = zend_hash_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void *) &type, sizeof(zval *), NULL);
+ bSuccess = zend_hash_str_update(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1, &type) != NULL;
}
}
}
@@ -1398,7 +1298,7 @@ int set_zval_xmlrpc_type(zval* value, XMLRPC_VALUE_TYPE newtype) /* {{{ */
/* }}} */
/* return xmlrpc type of a php value */
-XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue) /* {{{ */
+XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval* newvalue) /* {{{ */
{
XMLRPC_VALUE_TYPE type = xmlrpc_none;
TSRMLS_FETCH();
@@ -1411,7 +1311,8 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue) /* {{{ */
#ifndef BOOL_AS_LONG
/* Right thing to do, but it breaks some legacy code. */
- case IS_BOOL:
+ case IS_TRUE:
+ case IS_FALSE:
type = xmlrpc_boolean;
break;
#else
@@ -1435,12 +1336,12 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue) /* {{{ */
break;
case IS_OBJECT:
{
- zval** attr;
+ zval* attr;
type = xmlrpc_vector;
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR), (void**) &attr) == SUCCESS) {
- if (Z_TYPE_PP(attr) == IS_STRING) {
- type = xmlrpc_str_as_type(Z_STRVAL_PP(attr));
+ if ((attr = zend_hash_str_find(Z_OBJPROP_P(value), OBJECT_TYPE_ATTR, sizeof(OBJECT_TYPE_ATTR) - 1)) != NULL) {
+ if (Z_TYPE_P(attr) == IS_STRING) {
+ type = xmlrpc_str_as_type(Z_STRVAL_P(attr));
}
}
break;
@@ -1449,14 +1350,14 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue) /* {{{ */
/* if requested, return an unmolested (magic removed) copy of the value */
if (newvalue) {
- zval** val;
+ zval* val;
if ((type == xmlrpc_base64 && Z_TYPE_P(value) != IS_NULL) || type == xmlrpc_datetime) {
- if (zend_hash_find(Z_OBJPROP_P(value), OBJECT_VALUE_ATTR, sizeof(OBJECT_VALUE_ATTR), (void**) &val) == SUCCESS) {
- *newvalue = *val;
+ if ((val = zend_hash_str_find(Z_OBJPROP_P(value), OBJECT_VALUE_ATTR, sizeof(OBJECT_VALUE_ATTR) - 1)) != NULL) {
+ ZVAL_COPY_VALUE(newvalue, val);
}
} else {
- *newvalue = value;
+ ZVAL_COPY_VALUE(newvalue, value);
}
}
}
@@ -1469,18 +1370,20 @@ XMLRPC_VALUE_TYPE get_zval_xmlrpc_type(zval* value, zval** newvalue) /* {{{ */
Sets xmlrpc type, base64 or datetime, for a PHP string value */
PHP_FUNCTION(xmlrpc_set_type)
{
- zval **arg;
+ zval *arg;
char *type;
int type_len;
XMLRPC_VALUE_TYPE vtype;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Zs", &arg, &type, &type_len) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zs", &arg, &type, &type_len) == FAILURE) {
return;
}
+ ZVAL_DEREF(arg);
+
vtype = xmlrpc_str_as_type(type);
if (vtype != xmlrpc_none) {
- if (set_zval_xmlrpc_type(*arg, vtype) == SUCCESS) {
+ if (set_zval_xmlrpc_type(arg, vtype) == SUCCESS) {
RETURN_TRUE;
}
} else {
@@ -1494,20 +1397,20 @@ PHP_FUNCTION(xmlrpc_set_type)
Gets xmlrpc type for a PHP value. Especially useful for base64 and datetime strings */
PHP_FUNCTION(xmlrpc_get_type)
{
- zval **arg;
+ zval *arg;
XMLRPC_VALUE_TYPE type;
XMLRPC_VECTOR_TYPE vtype = xmlrpc_vector_none;
- if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z", &arg) == FAILURE) {
+ if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", &arg) == FAILURE) {
return;
}
- type = get_zval_xmlrpc_type(*arg, 0);
+ type = get_zval_xmlrpc_type(arg, 0);
if (type == xmlrpc_vector) {
- vtype = determine_vector_type((Z_TYPE_PP(arg) == IS_OBJECT) ? Z_OBJPROP_PP(arg) : Z_ARRVAL_PP(arg));
+ vtype = determine_vector_type((Z_TYPE_P(arg) == IS_OBJECT) ? Z_OBJPROP_P(arg) : Z_ARRVAL_P(arg));
}
- RETURN_STRING((char*) xmlrpc_type_as_str(type, vtype), 1);
+ RETURN_STRING((char*) xmlrpc_type_as_str(type, vtype));
}
/* }}} */
@@ -1515,7 +1418,7 @@ PHP_FUNCTION(xmlrpc_get_type)
Determines if an array value represents an XMLRPC fault. */
PHP_FUNCTION(xmlrpc_is_fault)
{
- zval *arg, **val;
+ zval *arg;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "a", &arg) == FAILURE) {
return;
@@ -1527,8 +1430,8 @@ PHP_FUNCTION(xmlrpc_is_fault)
* array, which is rather expensive, especially if it was
* a big array. Thus, we resort to this not so clever hackery.
*/
- if (zend_hash_find(Z_ARRVAL_P(arg), FAULT_CODE, FAULT_CODE_LEN + 1, (void**) &val) == SUCCESS &&
- zend_hash_find(Z_ARRVAL_P(arg), FAULT_STRING, FAULT_STRING_LEN + 1, (void**) &val) == SUCCESS) {
+ if (zend_hash_str_exists(Z_ARRVAL_P(arg), FAULT_CODE, FAULT_CODE_LEN) &&
+ zend_hash_str_exists(Z_ARRVAL_P(arg), FAULT_STRING, FAULT_STRING_LEN)) {
RETURN_TRUE;
}