Port remaining functions.

Piotr Pawłow [2016-09-23 02:45:49]
Port remaining functions.
Filename
php_imlib.c
diff --git a/php_imlib.c b/php_imlib.c
index f007ee8..b55c504 100644
--- a/php_imlib.c
+++ b/php_imlib.c
@@ -942,7 +942,7 @@ static void _php_imlib_draw_something(INTERNAL_FUNCTION_PARAMETERS, void (*func)
    int argc;
    int cx, cy, cw, ch;
    zval *img, *dbox;
-   long x,y,w,h,r,g,b,a;
+   zend_long x,y,w,h,r,g,b,a;
    Imlib_Image im;

    argc = ZEND_NUM_ARGS();
@@ -950,7 +950,8 @@ static void _php_imlib_draw_something(INTERNAL_FUNCTION_PARAMETERS, void (*func)
       return;
    }

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_context_set_color(r,g,b,a);
@@ -977,7 +978,8 @@ static void _php_imlib_single_arg(INTERNAL_FUNCTION_PARAMETERS, void (*func)())

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    (*func)();
@@ -996,12 +998,13 @@ static void _php_wrap_draw_line(int x1, int y1, int x2, int y2)
 PHP_FUNCTION(imlib_add_color_to_color_range)
 {
    zval *crange;
-   long x,r,g,b,a;
+   zend_long x,r,g,b,a;
    Imlib_Color_Range range;

    if (zend_parse_parameters(6 TSRMLS_CC, "rlllll", &crange, &x, &r, &g, &b, &a) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(range, Imlib_Color_Range, &crange, -1, le_imlib_cr_name, le_imlib_cr);
+   if ((range = (Imlib_Color_Range)zend_fetch_resource(Z_RES_P(crange), le_imlib_cr_name, le_imlib_cr)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_color_range(range);
    imlib_context_set_color(r,g,b,a);
@@ -1016,13 +1019,15 @@ PHP_FUNCTION(imlib_blend_image_onto_image)
 {
    zval *dstimg, *srcimg;
    Imlib_Image dst,src;
-   long sx,sy,sw,sh,dx,dy,dw,dh;
-   long calias, calpha, cblend, cdither;
+   zend_long sx,sy,sw,sh,dx,dy,dw,dh;
+   zend_long calias, calpha, cblend, cdither;

    if (zend_parse_parameters(14 TSRMLS_CC, "rrllllllllllll", &dstimg, &srcimg, &calpha, &sx, &sy, &sw, &sh, &dx, &dy, &dw, &dh, &cdither, &cblend, &calias) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(src, Imlib_Image, &srcimg, -1, le_imlib_img_name, le_imlib_img);
-   ZEND_FETCH_RESOURCE(dst, Imlib_Image, &dstimg, -1, le_imlib_img_name, le_imlib_img);
+   if ((src = (Imlib_Image)zend_fetch_resource(Z_RES_P(srcimg), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;
+   if ((dst = (Imlib_Image)zend_fetch_resource(Z_RES_P(dstimg), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(dst);
    imlib_context_set_anti_alias(calias);
@@ -1043,12 +1048,13 @@ PHP_FUNCTION(imlib_clone_image)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(src, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((src = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(src);
    dst = imlib_clone_image();

-   if (dst) ZEND_REGISTER_RESOURCE(return_value, dst, le_imlib_img);
+   if (dst) RETURN_RES(zend_register_resource(dst, le_imlib_img));
 }
 /* }}} */

@@ -1065,7 +1071,7 @@ PHP_FUNCTION(imlib_create_color_range)

    cr = imlib_create_color_range();

-   if (cr) ZEND_REGISTER_RESOURCE(return_value, cr, le_imlib_cr);
+   if (cr) RETURN_RES(zend_register_resource(cr, le_imlib_cr));
 }
 /* }}} */

@@ -1092,7 +1098,7 @@ PHP_FUNCTION(imlib_create_color_modifier)
       RETURN_FALSE;
    }

-   ZEND_REGISTER_RESOURCE(return_value, cm, le_imlib_cm);
+   RETURN_RES(zend_register_resource(cm, le_imlib_cm));
 }
 /* }}} */

@@ -1101,17 +1107,18 @@ PHP_FUNCTION(imlib_create_color_modifier)
 PHP_FUNCTION(imlib_create_cropped_image)
 {
    zval *img;
-   long sx,sy,sw,sh;
+   zend_long sx,sy,sw,sh;
    Imlib_Image src,dst;

    if (zend_parse_parameters(5 TSRMLS_CC, "rllll", &img, &sx, &sy, &sw, &sh) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(src, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((src = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(src);
    dst = imlib_create_cropped_image(sx,sy,sw,sh);

-   if (dst) ZEND_REGISTER_RESOURCE(return_value, dst, le_imlib_img);
+   if (dst) RETURN_RES(zend_register_resource(dst, le_imlib_img));
 }
 /* }}} */

@@ -1121,17 +1128,18 @@ PHP_FUNCTION(imlib_create_cropped_image)
 PHP_FUNCTION(imlib_create_cropped_scaled_image)
 {
    zval *img;
-   long sx,sy,sw,sh,dw,dh;
+   zend_long sx,sy,sw,sh,dw,dh;
    Imlib_Image src,dst;

    if (zend_parse_parameters(7 TSRMLS_CC, "rllllll", &img, &sx, &sy, &sw, &sh, &dw, &dh) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(src, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((src = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(src);
    dst = imlib_create_cropped_scaled_image(sx,sy, sw,sh, dw,dh);

-   if (dst) ZEND_REGISTER_RESOURCE(return_value, dst, le_imlib_img);
+   if (dst) RETURN_RES(zend_register_resource(dst, le_imlib_img));
 }
 /* }}} */

@@ -1141,7 +1149,7 @@ PHP_FUNCTION(imlib_create_cropped_scaled_image)
 PHP_FUNCTION(imlib_create_image)
 {
    Imlib_Image im;
-   long x,y;
+   zend_long x,y;

    if (zend_parse_parameters(2 TSRMLS_CC, "ll", &x, &y) == FAILURE) return;

@@ -1151,7 +1159,7 @@ PHP_FUNCTION(imlib_create_image)
       imlib_context_set_image(im);
       memset(imlib_image_get_data(), '\0', x * y * sizeof(DATA32));

-      ZEND_REGISTER_RESOURCE(return_value, im, le_imlib_img);
+      RETURN_RES(zend_register_resource(im, le_imlib_img));
    }
 }
 /* }}} */
@@ -1172,14 +1180,15 @@ PHP_FUNCTION(imlib_create_rotated_image)
    argc = ZEND_NUM_ARGS();
    if (zend_parse_parameters(argc TSRMLS_CC, "rd|d", &srcimg, &angle, &radians) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(src, Imlib_Image, &srcimg, -1, le_imlib_img_name, le_imlib_img);
+   if ((src = (Imlib_Image)zend_fetch_resource(Z_RES_P(srcimg), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    if (argc == 2) radians = angle * M_PI/180;

    imlib_context_set_image(src);
    dst = imlib_create_rotated_image(radians);

-   if (dst) ZEND_REGISTER_RESOURCE(return_value, dst, le_imlib_img);
+   if (dst) RETURN_RES(zend_register_resource(dst, le_imlib_img));
 }
 /* }}} */

@@ -1189,18 +1198,19 @@ PHP_FUNCTION(imlib_create_rotated_image)
 PHP_FUNCTION(imlib_create_scaled_image)
 {
    zval *img;
-   zval **dstw, **dsth;
+   zval *dstw, *dsth;
    long sw,sh,dw,dh;
    Imlib_Image src,dst;

-   if (zend_parse_parameters(3 TSRMLS_CC, "rZZ", &img, &dstw, &dsth) == FAILURE) return;
+   if (zend_parse_parameters(3 TSRMLS_CC, "rzz", &img, &dstw, &dsth) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(src, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((src = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    convert_to_long_ex(dstw);
    convert_to_long_ex(dsth);
-   dw = Z_LVAL_PP(dstw);
-   dh = Z_LVAL_PP(dsth);
+   dw = Z_LVAL_P(dstw);
+   dh = Z_LVAL_P(dsth);

    if (!dw && !dh) {
       RETURN_FALSE;
@@ -1218,7 +1228,7 @@ PHP_FUNCTION(imlib_create_scaled_image)

    dst = imlib_create_cropped_scaled_image(0,0, sw,sh, dw,dh);

-   if (dst) ZEND_REGISTER_RESOURCE(return_value, dst, le_imlib_img);
+   if (dst) RETURN_RES(zend_register_resource(dst, le_imlib_img));
 }
 /* }}} */

@@ -1228,22 +1238,23 @@ PHP_FUNCTION(imlib_create_scaled_image)
 PHP_FUNCTION(imlib_dump_image)
 {
    int argc, retval;
-   long q;
+   zend_long q;
    FILE *tmp;
-   char *tmpfile;
-   zval *img, **err;
+   zend_string *tmpfile;
+   zval *img, *err;
    Imlib_Image im;
    Imlib_Load_Error im_err;

    argc = ZEND_NUM_ARGS();
-   if (zend_parse_parameters(argc TSRMLS_CC, "r|Zl", &img, &err, &q) == FAILURE) return;
+   if (zend_parse_parameters(argc TSRMLS_CC, "r|zl", &img, &err, &q) == FAILURE) return;

    if (argc > 1) {
-      zval_dtor(*err);
-      ZVAL_LONG(*err,0);
+      zval_dtor(err);
+      ZVAL_LONG(err,0);
    }

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    tmp = php_open_temporary_file("", "", &tmpfile TSRMLS_CC);
    if (tmp == NULL) {
@@ -1261,19 +1272,19 @@ PHP_FUNCTION(imlib_dump_image)
       imlib_image_attach_data_value("quality",NULL,q,NULL);
    }

-   imlib_save_image_with_error_return(tmpfile,&im_err);
+   imlib_save_image_with_error_return(tmpfile->val,&im_err);

    if (im_err)
    {
       if (argc > 1)
       {
-         ZVAL_LONG(*err,im_err);
+         ZVAL_LONG(err,im_err);
       }
       _php_handle_imlib_error(INTERNAL_FUNCTION_PARAM_PASSTHRU,
-                              im_err,tmpfile);
+                              im_err,tmpfile->val);
       fclose(tmp);
-      VCWD_UNLINK((const char *)tmpfile); /* make sure that the temporary file is removed */
-      efree(tmpfile);
+      VCWD_UNLINK(tmpfile->val); /* make sure that the temporary file is removed */
+      zend_string_release(tmpfile);
       RETURN_FALSE;
    }
    else
@@ -1293,8 +1304,8 @@ PHP_FUNCTION(imlib_dump_image)
       }

       fclose(tmp);
-      VCWD_UNLINK((const char *)tmpfile); /* make sure that the temporary file is removed */
-      efree(tmpfile);
+      VCWD_UNLINK(tmpfile->val); /* make sure that the temporary file is removed */
+      zend_string_release(tmpfile);

       RETURN_TRUE;
    }
@@ -1311,8 +1322,9 @@ PHP_FUNCTION(imlib_free_color_range)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &fcr) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(cr, Imlib_Color_Range, &fcr, -1, le_imlib_cr_name, le_imlib_cr);
-   zend_list_delete(Z_LVAL_PP(&fcr));
+   if ((cr = (Imlib_Color_Range)zend_fetch_resource(Z_RES_P(fcr), le_imlib_cr_name, le_imlib_cr)) == NULL)
+      RETURN_FALSE;
+   zend_list_close(Z_RES_P(fcr));
 }
 /* }}} */

@@ -1326,8 +1338,9 @@ PHP_FUNCTION(imlib_free_color_modifier)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &fcm) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &fcm, -1, le_imlib_cm_name, le_imlib_cm);
-   zend_list_delete(Z_LVAL_PP(&fcm));
+   if ((cm = (Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(fcm), le_imlib_cm_name, le_imlib_cm)) == NULL)
+      RETURN_FALSE;
+   zend_list_close(Z_RES_P(fcm));
 }
 /* }}} */

@@ -1340,8 +1353,9 @@ PHP_FUNCTION(imlib_free_font)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &font) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(fn, PHP_Imlib_Font, &font, -1, le_imlib_font_name, le_imlib_font);
-   zend_list_delete(Z_LVAL_PP(&font));
+   if ((fn = (PHP_Imlib_Font)zend_fetch_resource(Z_RES_P(font), le_imlib_font_name, le_imlib_font)) == NULL)
+      RETURN_FALSE;
+   zend_list_close(Z_RES_P(font));
 }
 /* }}} */

@@ -1355,8 +1369,9 @@ PHP_FUNCTION(imlib_free_image)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
-   zend_list_delete(Z_LVAL_PP(&img));
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;
+   zend_list_close(Z_RES_P(img));
 }
 /* }}} */

@@ -1366,24 +1381,26 @@ PHP_FUNCTION(imlib_free_image)
 PHP_FUNCTION(imlib_get_text_advance)
 {
    zval *font;
-   zval **thoriz_adv, **tvert_adv;
+   zval *thoriz_adv, *tvert_adv;
    PHP_Imlib_Font fn;
-   const char *text = NULL;
-   int text_len, horiz_adv, vert_adv;
-   long dir;
+   char *text = NULL;
+   size_t text_len;
+   int horiz_adv, vert_adv;
+   zend_long dir;

-   if (zend_parse_parameters(5 TSRMLS_CC, "rsZZl", &font, &text, &text_len, &thoriz_adv, &tvert_adv, &dir) == FAILURE) return;
+   if (zend_parse_parameters(5 TSRMLS_CC, "rszzl", &font, &text, &text_len, &thoriz_adv, &tvert_adv, &dir) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(fn, PHP_Imlib_Font, &font, -1, le_imlib_font_name, le_imlib_font);
+   if ((fn = (PHP_Imlib_Font)zend_fetch_resource(Z_RES_P(font), le_imlib_font_name, le_imlib_font)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_font(fn->font);
    imlib_context_set_direction(dir);
    imlib_get_text_advance(text, &horiz_adv, &vert_adv);

-   zval_dtor(*thoriz_adv);
-   zval_dtor(*tvert_adv);
-   ZVAL_LONG(*thoriz_adv,horiz_adv);
-   ZVAL_LONG(*tvert_adv,vert_adv);
+   zval_dtor(thoriz_adv);
+   zval_dtor(tvert_adv);
+   ZVAL_LONG(thoriz_adv,horiz_adv);
+   ZVAL_LONG(tvert_adv,vert_adv);
 }
 /* }}} */

@@ -1393,25 +1410,27 @@ PHP_FUNCTION(imlib_get_text_advance)
 PHP_FUNCTION(imlib_get_text_size)
 {
    zval *font;
-   zval **tw, **th;
+   zval *tw, *th;
    PHP_Imlib_Font fn;
-   const char *text = NULL;
-   int text_len, w,h;
-   long dir;
+   char *text = NULL;
+   size_t text_len;
+   int w,h;
+   zend_long dir;

-   if (zend_parse_parameters(5 TSRMLS_CC, "rsZZl", &font, &text, &text_len, &tw, &th, &dir) == FAILURE) return;
+   if (zend_parse_parameters(5 TSRMLS_CC, "rszzl", &font, &text, &text_len, &tw, &th, &dir) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(fn, PHP_Imlib_Font, &font, -1, le_imlib_font_name, le_imlib_font);
+   if ((fn = (PHP_Imlib_Font)zend_fetch_resource(Z_RES_P(font), le_imlib_font_name, le_imlib_font)) == NULL)
+      RETURN_FALSE;

-   zval_dtor(*tw);
-   zval_dtor(*th);
+   zval_dtor(tw);
+   zval_dtor(th);

    imlib_context_set_font(fn->font);
    imlib_context_set_direction(dir);
    imlib_get_text_size(text, &w, &h);

-   ZVAL_LONG(*tw,w);
-   ZVAL_LONG(*th,h);
+   ZVAL_LONG(tw,w);
+   ZVAL_LONG(th,h);
 }
 /* }}} */

@@ -1421,12 +1440,13 @@ PHP_FUNCTION(imlib_get_text_size)
 PHP_FUNCTION(imlib_image_blur)
 {
    zval *img;
-   long r;
+   zend_long r;
    Imlib_Image im;

    if (zend_parse_parameters(2 TSRMLS_CC, "rl", &img, &r) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_image_blur(r);
@@ -1459,7 +1479,7 @@ PHP_FUNCTION(imlib_image_draw_line)
 PHP_FUNCTION(imlib_image_draw_polygon)
 {
    zval *img, *polygon, *dbox;
-   long r,g,b,a;
+   zend_long r,g,b,a;
    int cx,cy,cw,ch,argc;
    Imlib_Image im;
    ImlibPolygon poly;
@@ -1468,8 +1488,10 @@ PHP_FUNCTION(imlib_image_draw_polygon)
    argc = ZEND_NUM_ARGS();
    if (zend_parse_parameters(argc TSRMLS_CC, "rrbllll|a", &img, &polygon, &closed, &r, &g, &b, &a, &dbox) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
-   ZEND_FETCH_RESOURCE(poly, ImlibPolygon, &polygon, -1, le_imlib_poly_name, le_imlib_poly);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;
+   if ((poly = (ImlibPolygon)zend_fetch_resource(Z_RES_P(polygon), le_imlib_poly_name, le_imlib_poly)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_context_set_color(r,g,b,a);
@@ -1502,7 +1524,7 @@ PHP_FUNCTION(imlib_image_draw_rectangle)
 PHP_FUNCTION(imlib_image_fill_color_range_rectangle)
 {
    zval *fim, *fcr, *fbox;
-   long x,y,width,height;
+   zend_long x,y,width,height;
    int argc,cx,cy,cw,ch;
    double angle;
    Imlib_Image im;
@@ -1511,8 +1533,10 @@ PHP_FUNCTION(imlib_image_fill_color_range_rectangle)
    argc = ZEND_NUM_ARGS();
    if (zend_parse_parameters(argc TSRMLS_CC, "rrlllld|a", &fim, &fcr, &x, &y, &width, &height, &angle, &fbox) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(cr, Imlib_Color_Range, &fcr, -1, le_imlib_cr_name, le_imlib_cr);
-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &fim, -1, le_imlib_img_name, le_imlib_img);
+   if ((cr = (Imlib_Color_Range)zend_fetch_resource(Z_RES_P(fcr), le_imlib_cr_name, le_imlib_cr)) == NULL)
+      RETURN_FALSE;
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(fim), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_color_range(cr);
    imlib_context_set_image(im);
@@ -1546,7 +1570,7 @@ PHP_FUNCTION(imlib_image_fill_ellipse)
 PHP_FUNCTION(imlib_image_fill_polygon)
 {
    zval *img, *polygon, *dbox;
-   long r,g,b,a;
+   zend_long r,g,b,a;
    int cx,cy,cw,ch,argc;
    Imlib_Image im;
    ImlibPolygon poly;
@@ -1554,8 +1578,10 @@ PHP_FUNCTION(imlib_image_fill_polygon)
    argc = ZEND_NUM_ARGS();
    if (zend_parse_parameters(argc TSRMLS_CC, "rrllll|a", &img, &polygon, &r, &g, &b, &a, &dbox) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
-   ZEND_FETCH_RESOURCE(poly, ImlibPolygon, &polygon, -1, le_imlib_poly_name, le_imlib_poly);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;
+   if ((poly = (ImlibPolygon)zend_fetch_resource(Z_RES_P(polygon), le_imlib_poly_name, le_imlib_poly)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_context_set_color(r,g,b,a);
@@ -1619,12 +1645,13 @@ PHP_FUNCTION(imlib_image_orientate)
   /* Contributed by Gareth Ardron */

    zval *img;
-   long r;
+   zend_long r;
    Imlib_Image im;

    if (zend_parse_parameters(2 TSRMLS_CC, "rl", &img, &r) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_image_orientate(r);
@@ -1642,14 +1669,15 @@ PHP_FUNCTION(imlib_image_format)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    name = imlib_image_format();
    if (!name)
       RETURN_FALSE;

-   RETURN_STRING(name,strlen(name));
+   RETURN_STRING(name);
 }
 /* }}} */

@@ -1664,14 +1692,15 @@ PHP_FUNCTION(imlib_image_get_filename)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    name = imlib_image_get_filename();
    if (!name)
       RETURN_FALSE;

-   RETURN_STRING((char*)name,strlen(name));
+   RETURN_STRING((char*)name);
 }
 /* }}} */

@@ -1686,7 +1715,8 @@ PHP_FUNCTION(imlib_image_get_height)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    height = imlib_image_get_height();
@@ -1706,7 +1736,8 @@ PHP_FUNCTION(imlib_image_get_width)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    width = imlib_image_get_width();
@@ -1725,7 +1756,8 @@ PHP_FUNCTION(imlib_image_has_alpha)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &img) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    if (imlib_image_has_alpha())
@@ -1748,13 +1780,14 @@ PHP_FUNCTION(imlib_image_modify_alpha)
    Imlib_Image im;
    DATA8 map[256];
    Imlib_Color_Modifier *cmod;
-   long malpha;
+   zend_long malpha;
    int i;
    double ratio;

    if (zend_parse_parameters(2 TSRMLS_CC, "rl", &img, &malpha) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    ratio = ((double)malpha) / 255;

@@ -1787,11 +1820,12 @@ PHP_FUNCTION(imlib_image_set_format)
    zval *img;
    Imlib_Image im;
    char *format;
-   int format_len;
+   size_t format_len;

    if (zend_parse_parameters(2 TSRMLS_CC, "rs", &img, &format, &format_len) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_image_set_format(format);
@@ -1806,12 +1840,13 @@ PHP_FUNCTION(imlib_image_set_format)
 PHP_FUNCTION(imlib_image_sharpen)
 {
    zval *img;
-   long r;
+   zend_long r;
    Imlib_Image im;

    if (zend_parse_parameters(2 TSRMLS_CC, "rl", &img, &r) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_image_sharpen(r);
@@ -1863,8 +1898,7 @@ PHP_FUNCTION(imlib_list_fonts)

    for (i = 0; i < fcount; i++)
    {
-      /* FIXME: Is 1 the right parameter here? */
-      add_next_index_string(return_value, flist[i], 1);
+      add_next_index_string(return_value, flist[i]);
    }

    imlib_free_font_list(flist,fcount);
@@ -1877,7 +1911,7 @@ PHP_FUNCTION(imlib_list_fonts)
 PHP_FUNCTION(imlib_load_font)
 {
    char *fontname;
-   int fontname_len;
+   size_t fontname_len;
    PHP_Imlib_Font fn;
    int argc;

@@ -1895,7 +1929,7 @@ PHP_FUNCTION(imlib_load_font)
       RETURN_FALSE;
    }

-   ZEND_REGISTER_RESOURCE(return_value, fn, le_imlib_font);
+   RETURN_RES(zend_register_resource(fn, le_imlib_font));
 }
 /* }}} */

@@ -1904,35 +1938,35 @@ PHP_FUNCTION(imlib_load_font)
    Load a file into an image, optionally fetch an error parameter */
 PHP_FUNCTION(imlib_load_image)
 {
-   zval **err;
+   zval *err;
    int argc;
    Imlib_Image im;
    Imlib_Load_Error im_err;
    FILE* f;
-   char* filename;
+   zend_string* filename;
    char* img;
-   int img_len;
+   size_t img_len;

    argc = ZEND_NUM_ARGS();
-   if (zend_parse_parameters(argc TSRMLS_CC, "s|Z", &img, &img_len, &err) == FAILURE) return;
+   if (zend_parse_parameters(argc TSRMLS_CC, "s|z", &img, &img_len, &err) == FAILURE) return;

    if (argc == 2) {
-      zval_dtor(*err);
-      ZVAL_LONG(*err,0);
+      zval_dtor(err);
+      ZVAL_LONG(err,0);
    }

    f = php_stream_open_wrapper_as_file(img, "rb", IGNORE_PATH | REPORT_ERRORS, &filename);
    if (f == NULL) RETURN_FALSE;

-   im = imlib_load_image_with_error_return(filename, &im_err);
+   im = imlib_load_image_with_error_return(filename->val, &im_err);

    fclose(f);
-   efree(filename);
+   zend_string_release(filename);

    if ((im_err) || (!im))
    {
       if (argc == 2) {
-         ZVAL_LONG(*err,im_err);
+         ZVAL_LONG(err,im_err);
       }
       _php_handle_imlib_error(INTERNAL_FUNCTION_PARAM_PASSTHRU,
                               im_err,img);
@@ -1940,7 +1974,7 @@ PHP_FUNCTION(imlib_load_image)
    }
    else
    {
-      ZEND_REGISTER_RESOURCE(return_value, im, le_imlib_img);
+      RETURN_RES(zend_register_resource(im, le_imlib_img));
    }
 }
 /* }}} */
@@ -1951,12 +1985,13 @@ PHP_FUNCTION(imlib_load_image)
 PHP_FUNCTION(imlib_polygon_add_point)
 {
    zval *polygon;
-   long x,y;
+   zend_long x,y;
    ImlibPolygon poly;

    if (zend_parse_parameters(3 TSRMLS_CC, "rll", &polygon, &x, &y) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(poly, ImlibPolygon, &polygon, -1, le_imlib_poly_name, le_imlib_poly);
+   if ((poly = (ImlibPolygon)zend_fetch_resource(Z_RES_P(polygon), le_imlib_poly_name, le_imlib_poly)) == NULL)
+      RETURN_FALSE;

    imlib_polygon_add_point(poly,x,y);
 }
@@ -1968,13 +2003,14 @@ PHP_FUNCTION(imlib_polygon_add_point)
 PHP_FUNCTION(imlib_polygon_contains_point)
 {
    zval *polygon;
-   long x,y;
+   zend_long x,y;
    int ret;
    ImlibPolygon poly;

    if (zend_parse_parameters(3 TSRMLS_CC, "rll", &polygon, &x, &y) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(poly, ImlibPolygon, &polygon, -1, le_imlib_poly_name, le_imlib_poly);
+   if ((poly = (ImlibPolygon)zend_fetch_resource(Z_RES_P(polygon), le_imlib_poly_name, le_imlib_poly)) == NULL)
+      RETURN_FALSE;

    ret = imlib_polygon_contains_point(poly,x,y);

@@ -1999,8 +2035,9 @@ PHP_FUNCTION(imlib_polygon_free)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &polygon) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(poly, ImlibPolygon, &polygon, -1, le_imlib_poly_name, le_imlib_poly);
-   zend_list_delete(Z_LVAL_PP(&polygon));
+   if ((poly = (ImlibPolygon)zend_fetch_resource(Z_RES_P(polygon), le_imlib_poly_name, le_imlib_poly)) == NULL)
+      RETURN_FALSE;
+   zend_list_close(Z_RES_P(polygon));
 }
 /* }}} */

@@ -2010,25 +2047,26 @@ PHP_FUNCTION(imlib_polygon_free)
 PHP_FUNCTION(imlib_polygon_get_bounds)
 {
    zval *polygon;
-   zval **px1, **py1, **px2, **py2;
+   zval *px1, *py1, *px2, *py2;
    int x1,y1,x2,y2;
    ImlibPolygon poly;

-   if (zend_parse_parameters(5 TSRMLS_CC, "rZZZZ", &polygon, &px1, &py1, &px2, &py2) == FAILURE) return;
+   if (zend_parse_parameters(5 TSRMLS_CC, "rzzzz", &polygon, &px1, &py1, &px2, &py2) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(poly, ImlibPolygon, &polygon, -1, le_imlib_poly_name, le_imlib_poly);
+   if ((poly = (ImlibPolygon)zend_fetch_resource(Z_RES_P(polygon), le_imlib_poly_name, le_imlib_poly)) == NULL)
+      RETURN_FALSE;

-   zval_dtor(*px1);
-   zval_dtor(*py1);
-   zval_dtor(*px2);
-   zval_dtor(*py2);
+   zval_dtor(px1);
+   zval_dtor(py1);
+   zval_dtor(px2);
+   zval_dtor(py2);

    imlib_polygon_get_bounds(poly,&x1,&y1,&x2,&y2);

-   ZVAL_LONG(*px1,x1);
-   ZVAL_LONG(*py1,y1);
-   ZVAL_LONG(*px2,x2);
-   ZVAL_LONG(*py2,y2);
+   ZVAL_LONG(px1,x1);
+   ZVAL_LONG(py1,y1);
+   ZVAL_LONG(px2,x2);
+   ZVAL_LONG(py2,y2);
 }
 /* }}} */

@@ -2044,7 +2082,7 @@ PHP_FUNCTION(imlib_polygon_new)
    }

    poly = imlib_polygon_new();
-   if (poly) ZEND_REGISTER_RESOURCE(return_value, poly, le_imlib_poly);
+   if (poly) RETURN_RES(zend_register_resource(poly, le_imlib_poly));
 }
 /* }}} */

@@ -2053,26 +2091,27 @@ PHP_FUNCTION(imlib_polygon_new)
    Save an image to a file, at an optional quality level (1-100) for jpegs.  For pngs, the value will be converted to a compression level (0-9) */
 PHP_FUNCTION(imlib_save_image)
 {
-   zval *img, **err;
+   zval *img, *err;
    char* name;
-   int name_len;
+   size_t name_len;
    Imlib_Image im;
    Imlib_Load_Error im_err;
    int argc;
-   long q;
-   char* filename;
+   zend_long q;
+   zend_string* filename;
    FILE* f;

    argc = ZEND_NUM_ARGS();
-   if (zend_parse_parameters(argc TSRMLS_CC, "rs|Zl", &img, &name, &name_len, &err, &q) == FAILURE) return;
+   if (zend_parse_parameters(argc TSRMLS_CC, "rs|zl", &img, &name, &name_len, &err, &q) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);

    if (argc > 2) {
-      zval_dtor(*err);
-      ZVAL_LONG(*err,0);
+      zval_dtor(err);
+      ZVAL_LONG(err,0);
    }

    if (argc > 3)
@@ -2083,16 +2122,16 @@ PHP_FUNCTION(imlib_save_image)
    f = php_stream_open_wrapper_as_file(name, "wb", IGNORE_PATH | REPORT_ERRORS, &filename);
    if (f == NULL) RETURN_FALSE;

-   imlib_save_image_with_error_return(filename, &im_err);
+   imlib_save_image_with_error_return(filename->val, &im_err);

    fclose(f);
-   efree(filename);
+   zend_string_release(filename);

    if (im_err)
    {
       if (argc > 2)
       {
-         ZVAL_LONG(*err,im_err);
+         ZVAL_LONG(err,im_err);
       }
       _php_handle_imlib_error(INTERNAL_FUNCTION_PARAM_PASSTHRU,
                               im_err,name);
@@ -2112,13 +2151,15 @@ PHP_FUNCTION(imlib_text_draw)
    Imlib_Image im;
    PHP_Imlib_Font fn;
    char *text;
-   int text_len;
-   long x,y,dir,r,g,b,a;
+   size_t text_len;
+   zend_long x,y,dir,r,g,b,a;

    if (zend_parse_parameters(10 TSRMLS_CC, "rrllslllll", &img, &font, &x, &y, &text, &text_len, &dir, &r, &g, &b, &a) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
-   ZEND_FETCH_RESOURCE(fn, PHP_Imlib_Font, &font, -1, le_imlib_font_name, le_imlib_font);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;
+   if ((fn = (PHP_Imlib_Font)zend_fetch_resource(Z_RES_P(font), le_imlib_font_name, le_imlib_font)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_context_set_color(r,g,b,a);
@@ -2142,7 +2183,7 @@ PHP_FUNCTION(imlib_get_cache_size)
    Set the size of image cache */
 PHP_FUNCTION(imlib_set_cache_size)
 {
-   long size;
+   zend_long size;
    if (zend_parse_parameters(1 TSRMLS_CC, "l", &size) == FAILURE) return;
    _php_imlib_set_cache_size(size TSRMLS_CC);
    RETURN_TRUE;
@@ -2157,11 +2198,12 @@ PHP_FUNCTION(imlib_apply_filter)
    Imlib_Image im;
    struct php_imlib_filter* filter;
    char* filter_name;
-   int filter_name_len;
+   size_t filter_name_len;
    HashTable* arg_ht;
    if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "rs|a", &img, &filter_name, &filter_name_len, &tparams) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;

    filter = _php_imlib_find_filter(filter_name TSRMLS_CC);

@@ -2196,7 +2238,7 @@ PHP_FUNCTION(imlib_create_filter)

    fil = imlib_create_filter(0);

-   if (fil) ZEND_REGISTER_RESOURCE(return_value, fil, le_imlib_filter);
+   if (fil) RETURN_RES(zend_register_resource(fil, le_imlib_filter));
 }
 /* }}} */

@@ -2210,8 +2252,9 @@ PHP_FUNCTION(imlib_free_filter)

    if (zend_parse_parameters(1 TSRMLS_CC, "r", &filter) == FAILURE) return;

-   ZEND_FETCH_RESOURCE(fil, Imlib_Filter, &filter, -1, le_imlib_filter_name, le_imlib_filter);
-   zend_list_delete(Z_LVAL_PP(&filter));
+   if ((fil = (Imlib_Filter)zend_fetch_resource(Z_RES_P(filter), le_imlib_filter_name, le_imlib_filter)) == NULL)
+      RETURN_FALSE;
+   zend_list_close(Z_RES_P(filter));
 }
 /* }}} */

@@ -2225,8 +2268,10 @@ PHP_FUNCTION(imlib_image_filter)

    if (zend_parse_parameters(2 TSRMLS_CC, "rr", &img, &filter)  == FAILURE) return;

-   ZEND_FETCH_RESOURCE(im, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
-   ZEND_FETCH_RESOURCE(fil, Imlib_Filter, &filter, -1, le_imlib_filter_name, le_imlib_filter);
+   if ((im = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+      RETURN_FALSE;
+   if ((fil = (Imlib_Filter)zend_fetch_resource(Z_RES_P(filter), le_imlib_filter_name, le_imlib_filter)) == NULL)
+      RETURN_FALSE;

    imlib_context_set_image(im);
    imlib_context_set_filter(fil);
@@ -2238,12 +2283,13 @@ static void _php_imlib_filter_set(INTERNAL_FUNCTION_PARAMETERS, int type)
 {
     zval *filter;
     int argc;
-    long xoff,yoff,a,r,g,b;
+    zend_long xoff,yoff,a,r,g,b;
     Imlib_Filter fil;

     if (zend_parse_parameters(7 TSRMLS_CC, "rllllll", &filter, &xoff, &yoff, &a, &r, &g, &b) == FAILURE) return;

-    ZEND_FETCH_RESOURCE(fil, Imlib_Filter, &filter, -1, le_imlib_filter_name, le_imlib_filter);
+   if ((fil = (Imlib_Filter)zend_fetch_resource(Z_RES_P(filter), le_imlib_filter_name, le_imlib_filter)) == NULL)
+      RETURN_FALSE;

     imlib_context_set_filter(fil);

@@ -2301,12 +2347,13 @@ PHP_FUNCTION(imlib_filter_set_alpha)
 PHP_FUNCTION(imlib_filter_constants)
 {
 	zval *filter;
-        long a, r, g, b;
+        zend_long a, r, g, b;
 	Imlib_Filter fil;

         if (zend_parse_parameters(5 TSRMLS_CC, "rllll", &filter, &a, &r, &g, &b) == FAILURE) return;

-        ZEND_FETCH_RESOURCE(fil, Imlib_Filter, &filter, -1, le_imlib_filter_name, le_imlib_filter);
+	if ((fil = (Imlib_Filter)zend_fetch_resource(Z_RES_P(filter), le_imlib_filter_name, le_imlib_filter)) == NULL)
+		RETURN_FALSE;

 	imlib_context_set_filter(fil);
 	imlib_filter_constants(a,r,g,b);
@@ -2318,12 +2365,14 @@ PHP_FUNCTION(imlib_filter_constants)
 PHP_FUNCTION(imlib_filter_divisors)
 {
 	zval *filter;
-        long a, r, g, b;
+        zend_long a, r, g, b;
 	Imlib_Filter fil;

         if (zend_parse_parameters(5 TSRMLS_CC, "rllll", &filter, &a, &r, &g, &b) == FAILURE) return;

-        ZEND_FETCH_RESOURCE(fil, Imlib_Filter, &filter, -1, le_imlib_filter_name, le_imlib_filter);
+	if ((fil = (Imlib_Filter)zend_fetch_resource(Z_RES_P(filter), le_imlib_filter_name, le_imlib_filter)) == NULL)
+		RETURN_FALSE;
+

 	imlib_context_set_filter(fil);
 	imlib_filter_divisors(a,r,g,b);
@@ -2341,7 +2390,8 @@ PHP_FUNCTION(imlib_modify_color_modifier_gamma)

     if (zend_parse_parameters(2 TSRMLS_CC, "rd", &color_modifier, &gamma) == FAILURE) return;

-    ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
     if (cm->modified) _php_imlib_color_modifier_synch(cm);
     imlib_context_set_color_modifier(cm->cm);
     imlib_modify_color_modifier_gamma(gamma);
@@ -2361,7 +2411,8 @@ PHP_FUNCTION(imlib_modify_color_modifier_brightness)

     if (zend_parse_parameters(2 TSRMLS_CC, "rd", &color_modifier, &brightness) == FAILURE) return;

-    ZEND_FETCH_RESOURCE(cm, Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
     if (cm->modified) _php_imlib_color_modifier_synch(cm);
     imlib_context_set_color_modifier(cm->cm);
     imlib_modify_color_modifier_brightness(brightness);
@@ -2381,7 +2432,8 @@ PHP_FUNCTION(imlib_modify_color_modifier_contrast)

     if (zend_parse_parameters(2 TSRMLS_CC, "rd", &color_modifier, &contrast) == FAILURE) return;

-    ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
     if (cm->modified) _php_imlib_color_modifier_synch(cm);
     imlib_context_set_color_modifier(cm->cm);
     imlib_modify_color_modifier_contrast(contrast);
@@ -2400,7 +2452,8 @@ PHP_FUNCTION(imlib_reset_color_modifier)

     if (zend_parse_parameters(1 TSRMLS_CC, "r", &color_modifier) == FAILURE) return;

-    ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
     imlib_context_set_color_modifier(cm->cm);
     imlib_reset_color_modifier();
     imlib_context_set_color_modifier(NULL);
@@ -2414,7 +2467,7 @@ PHP_FUNCTION(imlib_reset_color_modifier)
 PHP_FUNCTION(imlib_apply_color_modifier)
 {
     zval *color_modifier, *image;
-    long x, y, width, height;
+    zend_long x, y, width, height;
     PHP_Imlib_Color_Modifier cm;
     Imlib_Image img;
     int argc;
@@ -2422,8 +2475,10 @@ PHP_FUNCTION(imlib_apply_color_modifier)
     argc=ZEND_NUM_ARGS();
     if (zend_parse_parameters(argc TSRMLS_CC, "rr|llll", &image, &color_modifier, &x, &y, &width, &height) == FAILURE) return;

-    ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
-    ZEND_FETCH_RESOURCE(img, Imlib_Image, &image, -1, le_imlib_img_name, le_imlib_img);
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
+    if ((img = (Imlib_Image)zend_fetch_resource(Z_RES_P(image), le_imlib_img_name, le_imlib_img)) == NULL)
+       RETURN_FALSE;
     if (cm->modified) _php_imlib_color_modifier_synch(cm);
     imlib_context_set_image(img);

@@ -2443,13 +2498,14 @@ PHP_FUNCTION(imlib_apply_color_modifier)
 PHP_FUNCTION(imlib_set_color_modifier)
 {
     zval *color_modifier;
-    long index, value, channels = 15;
+    zend_long index, value, channels = 15;
     PHP_Imlib_Color_Modifier cm;
     int argc,i=0;

     argc=ZEND_NUM_ARGS();
     if (zend_parse_parameters(argc TSRMLS_CC, "rll|l", &color_modifier, &index, &value, &channels) == FAILURE) return;
-    ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
     if (!cm->valid) _php_imlib_color_modifier_synch(cm);
     while (i<4) {
 	if (channels&1)	{
@@ -2469,23 +2525,24 @@ PHP_FUNCTION(imlib_set_color_modifier)
 PHP_FUNCTION(imlib_get_color_modifier)
 {
     zval *color_modifier;
-    zval **tred, **tgreen, **tblue, **talpha;
-    long index;
+    zval *tred, *tgreen, *tblue, *talpha;
+    zend_long index;
     PHP_Imlib_Color_Modifier cm;

-    if (zend_parse_parameters(6 TSRMLS_CC, "rlZZZZ", &color_modifier, &index, &tred, &tgreen, &tblue, &talpha) == FAILURE) return;
-    ZEND_FETCH_RESOURCE(cm, PHP_Imlib_Color_Modifier, &color_modifier, -1, le_imlib_cm_name, le_imlib_cm);
+    if (zend_parse_parameters(6 TSRMLS_CC, "rlzzzz", &color_modifier, &index, &tred, &tgreen, &tblue, &talpha) == FAILURE) return;
+    if ((cm = (PHP_Imlib_Color_Modifier)zend_fetch_resource(Z_RES_P(color_modifier), le_imlib_cm_name, le_imlib_cm)) == NULL)
+       RETURN_FALSE;
     if (!cm->valid) _php_imlib_color_modifier_synch(cm);

-    zval_dtor(*tred);
-    zval_dtor(*tgreen);
-    zval_dtor(*tblue);
-    zval_dtor(*talpha);
+    zval_dtor(tred);
+    zval_dtor(tgreen);
+    zval_dtor(tblue);
+    zval_dtor(talpha);

-    ZVAL_LONG(*tred,cm->channels[0][index]);
-    ZVAL_LONG(*tgreen,cm->channels[1][index]);
-    ZVAL_LONG(*tblue,cm->channels[2][index]);
-    ZVAL_LONG(*talpha,cm->channels[3][index]);
+    ZVAL_LONG(tred,cm->channels[0][index]);
+    ZVAL_LONG(tgreen,cm->channels[1][index]);
+    ZVAL_LONG(tblue,cm->channels[2][index]);
+    ZVAL_LONG(talpha,cm->channels[3][index]);
 }
 /* }}} */

@@ -2501,7 +2558,7 @@ PHP_FUNCTION(imlib_pstext)

 	zval *img, *fnt;
 	int i, j, argc;
-        long x, y, sz, r, g, b, a, space = 0, width = 0, aa_steps = 4;
+        zend_long x, y, sz, r, g, b, a, space = 0, width = 0, aa_steps = 4;
 	unsigned long color;
 	int *f_ind;
 	int h_lines, v_lines, c_ind;
@@ -2514,7 +2571,7 @@ PHP_FUNCTION(imlib_pstext)
 	T1_OUTLINE *char_path, *str_path;
 	T1_TMATRIX *transform = NULL;
 	char *str;
-        int str_len;
+        size_t str_len;

 	argc=ZEND_NUM_ARGS();

@@ -2522,8 +2579,10 @@ PHP_FUNCTION(imlib_pstext)

 	color=(r<<16)|(g<<8)|b;

-	ZEND_FETCH_RESOURCE(bg_img, Imlib_Image, &img, -1, le_imlib_img_name, le_imlib_img);
-        ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, le_ps_font_name, le_ps_font);
+	if ((bg_img = (Imlib_Image)zend_fetch_resource(Z_RES_P(img), le_imlib_img_name, le_imlib_img)) == NULL)
+		RETURN_FALSE;
+	if ((f_ind = (int *)zend_fetch_resource(Z_RES_P(fnt), le_ps_font_name, le_ps_font)) == NULL)
+		RETURN_FALSE;

 	T1_errno = 0;
 	T1_AASetBitsPerPixel(32);
@@ -2624,9 +2683,9 @@ PHP_FUNCTION(imlib_psloadfont)
 {
 #if HAVE_LIBT1
         char* file;
-        int file_len;
+        size_t file_len;
         int f_ind, *font;
-        char* filename;
+        zend_string* filename;
         FILE* f;

         if (zend_parse_parameters(1 TSRMLS_CC, "s", &file, &file_len) == FAILURE) return;
@@ -2634,10 +2693,10 @@ PHP_FUNCTION(imlib_psloadfont)
         f = php_stream_open_wrapper_as_file(file, "rb", IGNORE_PATH | REPORT_ERRORS, &filename);
         if (f == NULL) RETURN_FALSE;

-        f_ind = T1_AddFont(filename);
+        f_ind = T1_AddFont(filename->val);

         fclose(f);
-        efree(filename);
+        zend_string_release(filename);

         if (f_ind < 0) {
                 switch (f_ind) {
@@ -2663,7 +2722,7 @@ PHP_FUNCTION(imlib_psloadfont)
         }
         font = (int *) emalloc(sizeof(int));
         *font = f_ind;
-        ZEND_REGISTER_RESOURCE(return_value, font, le_ps_font);
+        RETURN_RES(zend_register_resource(font, le_ps_font));
 #else
         php_error(E_WARNING, "imlib_psloadfont: No T1lib support in this PHP build");
         RETURN_FALSE;
@@ -2681,9 +2740,10 @@ PHP_FUNCTION(imlib_psfreefont)

         if (zend_parse_parameters(1 TSRMLS_CC, "r", &fnt) == FAILURE) return;

-        ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, le_ps_font_name, le_ps_font);
+        if ((f_ind = (int *)zend_fetch_resource(Z_RES_P(fnt), le_ps_font_name, le_ps_font)) == NULL)
+                RETURN_FALSE;

-        zend_list_delete(Z_LVAL_PP(&fnt));
+        zend_list_close(Z_RES_P(fnt));
         RETURN_TRUE;
 #else
         php_error(E_WARNING, "imlib_psfreefont: No T1lib support in this PHP build");
@@ -2699,23 +2759,24 @@ PHP_FUNCTION(imlib_psencodefont)
 #if HAVE_LIBT1
         zval *fnt;
         char *enc;
-        int enc_len;
+        size_t enc_len;
         char **enc_vector;
         int *f_ind;
-        char* filename;
+        zend_string* filename;
         FILE* f;

         if (zend_parse_parameters(2 TSRMLS_CC, "rs", &fnt, &enc, &enc_len) == FAILURE) return;

-        ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, le_ps_font_name, le_ps_font);
+        if ((f_ind = (int *)zend_fetch_resource(Z_RES_P(fnt), le_ps_font_name, le_ps_font)) == NULL)
+                RETURN_FALSE;

         f = php_stream_open_wrapper_as_file(enc, "rb", IGNORE_PATH | REPORT_ERRORS, &filename);
         if (f == NULL) RETURN_FALSE;

-        enc_vector = T1_LoadEncoding(filename);
+        enc_vector = T1_LoadEncoding(filename->val);

         fclose(f);
-        efree(filename);
+        zend_string_release(filename);

         if (enc_vector == NULL) {
                 php_error(E_WARNING, "Couldn't load encoding vector from %s", enc);
@@ -2748,7 +2809,8 @@ PHP_FUNCTION(imlib_psextendfont)

         if (zend_parse_parameters(2 TSRMLS_CC, "rd", &fnt, &ext) == FAILURE) return;

-        ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, le_ps_font_name, le_ps_font);
+        if ((f_ind = (int *)zend_fetch_resource(Z_RES_P(fnt), le_ps_font_name, le_ps_font)) == NULL)
+                RETURN_FALSE;

         if (T1_ExtendFont(*f_ind, ext) != 0) RETURN_FALSE;

@@ -2771,7 +2833,8 @@ PHP_FUNCTION(imlib_psslantfont)

         if (zend_parse_parameters(2 TSRMLS_CC, "rd", &fnt, &slt) == FAILURE) return;

-        ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, le_ps_font_name, le_ps_font);
+        if ((f_ind = (int *)zend_fetch_resource(Z_RES_P(fnt), le_ps_font_name, le_ps_font)) == NULL)
+                RETURN_FALSE;

         if (T1_SlantFont(*f_ind, slt) != 0) RETURN_FALSE;
         RETURN_TRUE;
@@ -2789,8 +2852,8 @@ PHP_FUNCTION(imlib_psbbox)
 #if HAVE_LIBT1
 	zval *fnt;
         char* str;
-        int str_len;
-        long sz, space = 0, add_width = 0;
+        size_t str_len;
+        zend_long sz, space = 0, add_width = 0;
 	int i, char_width, amount_kern;
 	int cur_x, cur_y, dx, dy;
 	int x1, y1, x2, y2, x3, y3, x4, y4;
@@ -2805,7 +2868,8 @@ PHP_FUNCTION(imlib_psbbox)
 	cos_a = cos(angle);
 	per_char =  add_width || angle ? 1 : 0;

-	ZEND_FETCH_RESOURCE(f_ind, int *, &fnt, -1, le_ps_font_name, le_ps_font);
+	if ((f_ind = (int *)zend_fetch_resource(Z_RES_P(fnt), le_ps_font_name, le_ps_font)) == NULL)
+		RETURN_FALSE;

 #define max(a, b) (a > b ? a : b)
 #define min(a, b) (a < b ? a : b)
ViewGit