From 6acbb3f0b668d94d25919c6ff316d556a3eebb81d366a05e6b21d5a32fb7ea76 Mon Sep 17 00:00:00 2001 From: Dirk Stoecker Date: Fri, 17 May 2019 09:28:17 +0000 Subject: [PATCH] update, still has a build failure (ruby) OBS-URL: https://build.opensuse.org/package/show/Application:Geo/mapserver?expand=0&rev=109 --- 5461.patch | 8836 ---------------------------------------- cmake-3.12.patch | 73 - mapserver-7.2.0.tar.gz | 3 - mapserver-7.4.0.tar.gz | 3 + mapserver.changes | 13 + mapserver.spec | 8 +- 6 files changed, 17 insertions(+), 8919 deletions(-) delete mode 100644 5461.patch delete mode 100644 cmake-3.12.patch delete mode 100644 mapserver-7.2.0.tar.gz create mode 100644 mapserver-7.4.0.tar.gz diff --git a/5461.patch b/5461.patch deleted file mode 100644 index 32935df..0000000 --- a/5461.patch +++ /dev/null @@ -1,8836 +0,0 @@ -From 9dbfe1b23d9c9529c9c980bd3de79dbf2033f388 Mon Sep 17 00:00:00 2001 -From: bjoernboldt -Date: Mon, 3 Jul 2017 09:32:20 +0200 -Subject: [PATCH 1/5] Add PHP7.x-support - ---- - mapscript/php/class.c | 184 +++++++++++----- - mapscript/php/cluster.c | 81 +++++-- - mapscript/php/color.c | 68 +++++- - mapscript/php/error.c | 96 ++++++-- - mapscript/php/grid.c | 82 ++++++- - mapscript/php/hashtable.c | 73 ++++++- - mapscript/php/image.c | 67 +++++- - mapscript/php/label.c | 141 +++++++++--- - mapscript/php/labelcache.c | 56 ++++- - mapscript/php/labelcachemember.c | 104 +++++++-- - mapscript/php/labelleader.c | 58 ++++- - mapscript/php/layer.c | 438 ++++++++++++++++++++++++------------- - mapscript/php/legend.c | 76 ++++++- - mapscript/php/line.c | 101 +++++++-- - mapscript/php/map.c | 378 +++++++++++++++++++++----------- - mapscript/php/mapscript_error.c | 13 ++ - mapscript/php/outputformat.c | 81 ++++++- - mapscript/php/owsrequest.c | 174 ++++++++++++--- - mapscript/php/php_mapscript.c | 80 +++++-- - mapscript/php/php_mapscript.h | 326 ++++++++++++++++++++++++++- - mapscript/php/php_mapscript_util.c | 77 ++++--- - mapscript/php/php_mapscript_util.h | 89 +++++++- - mapscript/php/point.c | 121 ++++++++-- - mapscript/php/projection.c | 83 ++++++- - mapscript/php/querymap.c | 73 ++++++- - mapscript/php/rect.c | 108 +++++++-- - mapscript/php/referencemap.c | 75 ++++++- - mapscript/php/result.c | 59 ++++- - mapscript/php/scalebar.c | 81 ++++++- - mapscript/php/shape.c | 199 +++++++++++------ - mapscript/php/shapefile.c | 79 +++++-- - mapscript/php/style.c | 158 +++++++++---- - mapscript/php/symbol.c | 92 ++++++-- - mapscript/php/web.c | 75 ++++++- - 34 files changed, 3259 insertions(+), 787 deletions(-) - -diff --git a/mapscript/php/class.c b/mapscript/php/class.c -index 48f2f812a..a256ac9bd 100644 ---- a/mapscript/php/class.c -+++ b/mapscript/php/class.c -@@ -143,10 +143,10 @@ PHP_METHOD(classObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - if (zclass) -- php_class2 = (php_class_object *) zend_object_store_get_object(zclass TSRMLS_CC); -+ php_class2 = MAPSCRIPT_OBJ_P(php_class_object, zclass); - - - if ((class = classObj_new(php_layer->layer, (zclass ? php_class2->class:NULL))) == NULL) { -@@ -177,7 +177,7 @@ PHP_METHOD(classObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - IF_GET_STRING("name", php_class->class->name) - else IF_GET_STRING("title", php_class->class->title) -@@ -213,7 +213,7 @@ PHP_METHOD(classObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - /* special case for "template" which we want to set to NULL and not an empty string */ - if(Z_TYPE_P(value)==IS_NULL && !strcmp(property,"template")) { -@@ -258,8 +258,8 @@ PHP_METHOD(classObj, addLabel) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_label = (php_label_object *) zend_object_store_get_object(zlabel TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zlabel); - - status = classObj_addLabel(php_class->class, php_label->label); - php_label->is_ref = 1; -@@ -287,7 +287,7 @@ PHP_METHOD(classObj, removeLabel) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - if ((label = classObj_removeLabel(php_class->class, index)) == NULL) { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -318,7 +318,7 @@ PHP_METHOD(classObj, getLabel) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - if ((label = classObj_getLabel(php_class->class, index)) == NULL) { - mapscript_throw_exception("Invalid label index." TSRMLS_CC); -@@ -349,7 +349,7 @@ PHP_METHOD(classObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - status = classObj_updateFromString(php_class->class, snippet); - -@@ -378,14 +378,14 @@ PHP_METHOD(classObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - value = classObj_convertToString(php_class->class); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -408,7 +408,7 @@ PHP_METHOD(classObj, setExpression) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - status = classObj_setExpression(php_class->class, expression); - -@@ -437,14 +437,14 @@ PHP_METHOD(classObj, getExpressionString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - value = classObj_getExpressionString(php_class->class); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -468,8 +468,8 @@ PHP_METHOD(classObj, setText) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val); - - status = classObj_setText(php_class->class, php_layer->layer, text); - -@@ -498,14 +498,14 @@ PHP_METHOD(classObj, getTextString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - value = classObj_getTextString(php_class->class); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -528,7 +528,7 @@ PHP_METHOD(classObj, getStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - if (index < 0 || index >= php_class->class->numstyles) { - mapscript_throw_exception("Invalid style index." TSRMLS_CC); -@@ -560,8 +560,8 @@ PHP_METHOD(classObj, insertStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_style = (php_style_object *) zend_object_store_get_object(zstyle TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zstyle); - - RETURN_LONG(msInsertStyle(php_class->class, php_style->style, index)); - } -@@ -585,7 +585,7 @@ PHP_METHOD(classObj, removeStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - style = msRemoveStyle(php_class->class, index); - -@@ -615,7 +615,7 @@ PHP_METHOD(classObj, moveStyleUp) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - status = classObj_moveStyleUp(php_class->class, index); - -@@ -643,7 +643,7 @@ PHP_METHOD(classObj, moveStyleDown) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - status = classObj_moveStyleDown(php_class->class, index); - -@@ -669,7 +669,7 @@ PHP_METHOD(classObj, deleteStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - status = classObj_deleteStyle(php_class->class, index); - -@@ -684,7 +684,7 @@ PHP_METHOD(classObj, getMetaData) - zval *zname; - zval *zobj = getThis(); - php_class_object *php_class; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", -@@ -694,12 +694,15 @@ PHP_METHOD(classObj, getMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata); -- - MAPSCRIPT_CALL_METHOD_1(php_class->metadata, "get", retval, zname); - -+#if PHP_VERSION_ID < 70000 - RETURN_STRING(Z_STRVAL_P(retval),1); -+#else -+ RETURN_STRING(Z_STRVAL(retval)); -+#endif - } - /* }}} */ - -@@ -710,7 +713,7 @@ PHP_METHOD(classObj, setMetaData) - zval *zname, *zvalue; - zval *zobj = getThis(); - php_class_object *php_class; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", -@@ -720,12 +723,16 @@ PHP_METHOD(classObj, setMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata); - - MAPSCRIPT_CALL_METHOD_2(php_class->metadata, "set", retval, zname, zvalue); - -+#if PHP_VERSION_ID < 70000 - RETURN_LONG(Z_LVAL_P(retval)); -+#else -+ RETURN_LONG(Z_LVAL(retval)); -+#endif - } - /* }}} */ - -@@ -736,7 +743,7 @@ PHP_METHOD(classObj, removeMetaData) - zval *zname; - zval *zobj = getThis(); - php_class_object *php_class; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", -@@ -746,12 +753,16 @@ PHP_METHOD(classObj, removeMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_class->metadata, &php_class->class->metadata); - - MAPSCRIPT_CALL_METHOD_1(php_class->metadata, "remove", retval, zname); - -+#if PHP_VERSION_ID < 70000 - RETURN_LONG(Z_LVAL_P(retval)); -+#else -+ RETURN_LONG(Z_LVAL(retval)); -+#endif - } - /* }}} */ - -@@ -774,15 +785,15 @@ PHP_METHOD(classObj, createLegendIcon) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this class object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((image = classObj_createLegendIcon(php_class->class, - php_map->map, -@@ -820,17 +831,17 @@ PHP_METHOD(classObj, drawLegendIcon) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); -+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val); - - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this class object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if (!MS_RENDERER_PLUGIN(php_image->image->format)) { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -865,7 +876,7 @@ PHP_METHOD(classObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zobj); - - MAPSCRIPT_DELREF(php_class->metadata); - } -@@ -905,13 +916,87 @@ void mapscript_create_class(classObj *class, parent_object parent, zval *return_ - { - php_class_object * php_class; - object_init_ex(return_value, mapscript_ce_class); -- php_class = (php_class_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, return_value); - php_class->class = class; - - php_class->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_class_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_class_object *php_class; -+ -+ php_class = ecalloc(1, sizeof(*php_class) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_class->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_class->zobj, ce); -+ -+ php_class->zobj.handlers = &mapscript_class_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_class->parent); -+ ZVAL_UNDEF(&php_class->metadata); -+ ZVAL_UNDEF(&php_class->leader); -+ -+ return &php_class->zobj; -+} -+ -+static void mapscript_class_free_object(zend_object *object) -+{ -+ php_class_object *php_class; -+ -+ php_class = (php_class_object *)((char *)object - XtOffsetOf(php_class_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_class->parent); -+ -+ MAPSCRIPT_DELREF(php_class->metadata); -+ MAPSCRIPT_DELREF(php_class->leader); -+ -+ /* We don't need to free the classObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_class_clone_object(zval *zobj) -+{ -+ php_class_object *php_class_old, *php_class_new; -+ php_layer_object *php_layer; -+ zend_object* zobj_new; -+ -+ php_class_old = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class_old->parent.val); -+ -+ zobj_new = mapscript_class_create_object(mapscript_ce_class); -+ php_class_new = (php_class_object *)((char *)zobj_new - XtOffsetOf(php_class_object, zobj)); -+ -+ zend_objects_clone_members(&php_class_new->zobj, &php_class_old->zobj); -+ -+ php_class_new->class = classObj_clone(php_class_old->class, php_layer->layer); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(class) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "classObj", class_functions); -+ mapscript_ce_class = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_class->create_object = mapscript_class_create_object; -+ mapscript_ce_class->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_class_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_class_object_handlers)); -+ mapscript_class_object_handlers.free_obj = mapscript_class_free_object; -+ mapscript_class_object_handlers.clone_obj = mapscript_class_clone_object; -+ mapscript_class_object_handlers.offset = XtOffsetOf(php_class_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_class_object_destroy(void *object TSRMLS_DC) - { - php_class_object *php_class = (php_class_object *)object; -@@ -961,8 +1046,8 @@ static zend_object_value mapscript_class_object_clone(zval *zobj TSRMLS_DC) - php_layer_object *php_layer; - zend_object_value new_ov; - -- php_class_old = (php_class_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(php_class_old->parent.val TSRMLS_CC); -+ php_class_old = MAPSCRIPT_OBJ_P(php_class_object, zobj); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, php_class_old->parent.val); - - new_ov = mapscript_class_object_new_ex(mapscript_ce_class, &php_class_new TSRMLS_CC); - zend_objects_clone_members(&php_class_new->std, new_ov, &php_class_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -988,3 +1073,4 @@ PHP_MINIT_FUNCTION(class) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/cluster.c b/mapscript/php/cluster.c -index 1031c020a..48dce8ae4 100644 ---- a/mapscript/php/cluster.c -+++ b/mapscript/php/cluster.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_cluster; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_cluster_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(cluster___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -78,7 +81,7 @@ PHP_METHOD(clusterObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - IF_GET_DOUBLE("maxdistance", php_cluster->cluster->maxdistance) - else IF_GET_DOUBLE("buffer", php_cluster->cluster->buffer) -@@ -104,7 +107,7 @@ PHP_METHOD(clusterObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - IF_SET_DOUBLE("maxdistance", php_cluster->cluster->maxdistance, value) - else IF_SET_DOUBLE("buffer", php_cluster->cluster->buffer, value) -@@ -132,7 +135,7 @@ PHP_METHOD(clusterObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - status = clusterObj_updateFromString(php_cluster->cluster, snippet); - -@@ -161,14 +164,14 @@ PHP_METHOD(clusterObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - value = clusterObj_convertToString(php_cluster->cluster); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -191,7 +194,7 @@ PHP_METHOD(clusterObj, setGroup) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - if ((status = clusterObj_setGroup(php_cluster->cluster, group)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -217,14 +220,14 @@ PHP_METHOD(clusterObj, getGroupString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - value = clusterObj_getGroupString(php_cluster->cluster); - if (value == NULL) { - RETURN_NULL(); - } - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -247,7 +250,7 @@ PHP_METHOD(clusterObj, setFilter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - if ((status = clusterObj_setFilter(php_cluster->cluster, filter)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -273,14 +276,14 @@ PHP_METHOD(clusterObj, getFilterString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_cluster = (php_cluster_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, zobj); - - value = clusterObj_getFilterString(php_cluster->cluster); - if (value == NULL) { - RETURN_NULL(); - } - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -304,16 +307,65 @@ void mapscript_create_cluster(clusterObj *cluster, parent_object parent, zval *r - { - php_cluster_object * php_cluster; - object_init_ex(return_value, mapscript_ce_cluster); -- php_cluster = (php_cluster_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_cluster = MAPSCRIPT_OBJ_P(php_cluster_object, return_value); - php_cluster->cluster = cluster; - -- if (parent.val) -+ if (ZVAL_NOT_UNDEF(parent.val)) - php_cluster->is_ref = 1; - - php_cluster->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_cluster_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_cluster_object *php_cluster; -+ -+ php_cluster = ecalloc(1, sizeof(*php_cluster) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_cluster->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_cluster->zobj, ce); -+ -+ php_cluster->zobj.handlers = &mapscript_cluster_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_cluster->parent); -+ -+ return &php_cluster->zobj; -+} -+ -+static void mapscript_cluster_free_object(zend_object *object) -+{ -+ php_cluster_object *php_cluster; -+ -+ php_cluster = (php_cluster_object *)((char *)object - XtOffsetOf(php_cluster_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_cluster->parent); -+ -+ /* We don't need to free the clusterObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(cluster) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "clusterObj", cluster_functions); -+ mapscript_ce_cluster = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_cluster->create_object = mapscript_cluster_create_object; -+ mapscript_ce_cluster->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_cluster_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_cluster_object_handlers)); -+ mapscript_cluster_object_handlers.free_obj = mapscript_cluster_free_object; -+ mapscript_cluster_object_handlers.offset = XtOffsetOf(php_cluster_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_cluster_object_destroy(void *object TSRMLS_DC) - { - php_cluster_object *php_cluster = (php_cluster_object *)object; -@@ -356,3 +408,4 @@ PHP_MINIT_FUNCTION(cluster) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/color.c b/mapscript/php/color.c -index bc86f3b35..559ef5eb0 100644 ---- a/mapscript/php/color.c -+++ b/mapscript/php/color.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_color; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_color_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(color___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -79,7 +82,7 @@ PHP_METHOD(colorObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj); - - IF_GET_LONG("red", php_color->color->red) - else IF_GET_LONG("green", php_color->color->green) -@@ -106,7 +109,7 @@ PHP_METHOD(colorObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj); - - IF_SET_COLOR("red", php_color->color->red, value) - else IF_SET_COLOR("green", php_color->color->green, value) -@@ -134,7 +137,7 @@ PHP_METHOD(colorObj, setRGB) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj); - - - MS_INIT_COLOR(*(php_color->color), red, green, blue, alpha); -@@ -173,7 +176,7 @@ PHP_METHOD(colorObj, setHex) - RETURN_LONG(MS_FAILURE); - } - -- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj); - - MS_INIT_COLOR(*(php_color->color), red, green, blue, alpha); - -@@ -194,7 +197,7 @@ PHP_METHOD(colorObj, toHex) - php_color_object *php_color; - colorObj *color; - -- php_color = (php_color_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_color = MAPSCRIPT_OBJ_P(php_color_object, zobj); - color = php_color->color; - - if (color->red < 0 || color->green < 0 || color->blue < 0) { -@@ -215,7 +218,7 @@ PHP_METHOD(colorObj, toHex) - return; - } - -- RETURN_STRINGL(hex, strlen(hex), 0); -+ MAPSCRIPT_RETURN_STRINGL(hex, strlen(hex), 0); - } - /* }}} */ - -@@ -235,7 +238,7 @@ void mapscript_create_color(colorObj *color, parent_object parent, zval *return_ - { - php_color_object * php_color; - object_init_ex(return_value, mapscript_ce_color); -- php_color = (php_color_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_color = MAPSCRIPT_OBJ_P(php_color_object, return_value); - php_color->color = color; - - php_color->parent = parent; -@@ -243,6 +246,55 @@ void mapscript_create_color(colorObj *color, parent_object parent, zval *return_ - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_color_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_color_object *php_color; -+ -+ php_color = ecalloc(1, sizeof(*php_color) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_color->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_color->zobj, ce); -+ -+ php_color->zobj.handlers = &mapscript_color_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_color->parent); -+ -+ return &php_color->zobj; -+} -+ -+static void mapscript_color_free_object(zend_object *object) -+{ -+ php_color_object *php_color; -+ -+ php_color = (php_color_object *)((char *)object - XtOffsetOf(php_color_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_color->parent); -+ -+ /* We don't need to free the colorObj, the mapObj will do it */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(color) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "colorObj", color_functions); -+ mapscript_ce_color = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_color->create_object = mapscript_color_create_object; -+ mapscript_ce_color->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_color_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_color_object_handlers)); -+ mapscript_color_object_handlers.free_obj = mapscript_color_free_object; -+ mapscript_color_object_handlers.offset = XtOffsetOf(php_color_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_color_object_destroy(void *object TSRMLS_DC) - { - php_color_object *php_color = (php_color_object *)object; -@@ -284,4 +336,4 @@ PHP_MINIT_FUNCTION(color) - - return SUCCESS; - } -- -+#endif -diff --git a/mapscript/php/error.c b/mapscript/php/error.c -index 2e96eea27..881295ef4 100644 ---- a/mapscript/php/error.c -+++ b/mapscript/php/error.c -@@ -31,7 +31,7 @@ - - #include "php_mapscript.h" - --#if PHP_VERSION_ID >= 50625 -+#if PHP_VERSION_ID >= 50625 && PHP_VERSION_ID < 70000 - #undef ZVAL_STRING - #define ZVAL_STRING(z, s, duplicate) do { \ - const char *__s=(s); \ -@@ -43,6 +43,9 @@ - #endif - - zend_class_entry *mapscript_ce_error; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_error_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(error___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -66,7 +69,8 @@ PHP_METHOD(errorObj, __get) - char *property; - long property_len = 0; - zval *zobj = getThis(); -- php_error_object *php_error; -+ /* php_error is in PHP7 defined in php.h, so we use php_errobj instead */ -+ php_error_object *php_errobj; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", -@@ -76,12 +80,12 @@ PHP_METHOD(errorObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_error = (php_error_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_errobj = MAPSCRIPT_OBJ_P(php_error_object, zobj); - -- IF_GET_LONG("code", php_error->error->code) -- else IF_GET_STRING("routine", php_error->error->routine) -- else IF_GET_STRING("message", php_error->error->message) -- else IF_GET_LONG("isreported", php_error->error->isreported) -+ IF_GET_LONG("code", php_errobj->error->code) -+ else IF_GET_STRING("routine", php_errobj->error->routine) -+ else IF_GET_STRING("message", php_errobj->error->message) -+ else IF_GET_LONG("isreported", php_errobj->error->isreported) - else { - mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property); - } -@@ -92,8 +96,8 @@ PHP_METHOD(errorObj, __set) - char *property; - long property_len = 0; - zval *value; -- zval *zobj = getThis(); -- php_error_object *php_error; -+ /* zval *zobj = getThis(); */ -+ /* php_error_object *php_errobj; */ - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", -@@ -103,7 +107,7 @@ PHP_METHOD(errorObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_error = (php_error_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ /* php_errobj = MAPSCRIPT_OBJ_P(php_error_object, zobj); */ - - if ( (STRING_EQUAL("code", property)) || - (STRING_EQUAL("routine", property)) || -@@ -120,7 +124,7 @@ PHP_METHOD(errorObj, __set) - PHP_METHOD(errorObj, next) - { - zval *zobj = getThis(); -- php_error_object *php_error; -+ php_error_object *php_errobj; - errorObj *error = NULL; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); -@@ -130,15 +134,15 @@ PHP_METHOD(errorObj, next) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_error = (php_error_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_errobj = MAPSCRIPT_OBJ_P(php_error_object, zobj); - -- if (php_error->error->next == NULL) -+ if (php_errobj->error->next == NULL) - RETURN_NULL(); - - /* Make sure 'self' is still valid. It may have been deleted by - * msResetErrorList() */ - error = msGetErrorObj(); -- while(error != php_error->error) { -+ while(error != php_errobj->error) { - if (error->next == NULL) { - mapscript_throw_exception("Trying to access an errorObj that has expired." TSRMLS_CC); - return; -@@ -146,7 +150,7 @@ PHP_METHOD(errorObj, next) - error = error->next; - } - -- php_error->error = php_error->error->next; -+ php_errobj->error = php_errobj->error->next; - *return_value = *zobj; - zval_copy_ctor(return_value); - INIT_PZVAL(return_value); -@@ -164,17 +168,62 @@ zend_function_entry error_functions[] = { - - void mapscript_create_error(errorObj *error, zval *return_value TSRMLS_DC) - { -- php_error_object * php_error; -+ php_error_object * php_errobj; - object_init_ex(return_value, mapscript_ce_error); -- php_error = (php_error_object *)zend_object_store_get_object(return_value TSRMLS_CC); -- php_error->error = error; -+ php_errobj = MAPSCRIPT_OBJ_P(php_error_object, return_value); -+ php_errobj->error = error; -+} -+ -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_error_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_error_object *php_errobj; -+ -+ php_errobj = ecalloc(1, sizeof(*php_errobj) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_errobj->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_errobj->zobj, ce); -+ -+ php_errobj->zobj.handlers = &mapscript_error_object_handlers; -+ -+ return &php_errobj->zobj; - } - -+/* -+static void mapscript_error_free_object(zend_object *object) -+{ -+ php_error_object *php_errobj; -+ -+ php_errobj = (php_error_object *)((char *)object - XtOffsetOf(php_error_object, zobj)); -+ -+ zend_object_std_dtor(object); -+} -+*/ -+ -+PHP_MINIT_FUNCTION(error) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "errorObj", error_functions); -+ mapscript_ce_error = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_error->create_object = mapscript_error_create_object; -+ mapscript_ce_error->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_error_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_error_object_handlers)); -+ /* mapscript_error_object_handlers.free_obj = mapscript_error_free_object; // nothing to do here -> use standard handler */ -+ mapscript_error_object_handlers.offset = XtOffsetOf(php_error_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_error_object_destroy(void *object TSRMLS_DC) - { -- php_error_object *php_error = (php_error_object *)object; -+ php_error_object *php_errobj = (php_error_object *)object; - -- MAPSCRIPT_FREE_OBJECT(php_error); -+ MAPSCRIPT_FREE_OBJECT(php_errobj); - - /* We don't need to free the errorObj */ - -@@ -184,11 +233,11 @@ static void mapscript_error_object_destroy(void *object TSRMLS_DC) - static zend_object_value mapscript_error_object_new(zend_class_entry *ce TSRMLS_DC) - { - zend_object_value retval; -- php_error_object *php_error; -+ php_error_object *php_errobj; - -- MAPSCRIPT_ALLOC_OBJECT(php_error, php_error_object); -+ MAPSCRIPT_ALLOC_OBJECT(php_errobj, php_error_object); - -- retval = mapscript_object_new(&php_error->std, ce, -+ retval = mapscript_object_new(&php_errobj->std, ce, - &mapscript_error_object_destroy TSRMLS_CC); - - return retval; -@@ -207,3 +256,4 @@ PHP_MINIT_FUNCTION(error) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/grid.c b/mapscript/php/grid.c -index 977b7600d..c13f54bc3 100644 ---- a/mapscript/php/grid.c -+++ b/mapscript/php/grid.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_grid; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_grid_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(grid___construct_args, 0, 1, 1) - ZEND_ARG_OBJ_INFO(0, layer, layerObj, 0) -@@ -63,8 +66,8 @@ PHP_METHOD(gridObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_grid = (php_grid_object *) zend_object_store_get_object(getThis() TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, getThis()); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - - php_layer->layer->connectiontype = MS_GRATICULE; - -@@ -78,17 +81,30 @@ PHP_METHOD(gridObj, __construct) - - php_grid->grid = (graticuleObj *)php_layer->layer->layerinfo; - -- if (php_layer->grid && (Z_TYPE_P(php_layer->grid) == IS_OBJECT)) { -- php_old_grid = (php_grid_object *) zend_object_store_get_object(php_layer->grid TSRMLS_CC); -+ if (ZVAL_NOT_UNDEF(php_layer->grid) && (MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT)) { -+ php_old_grid = MAPSCRIPT_OBJ(php_grid_object, php_layer->grid); - php_old_grid->parent.child_ptr = NULL; -+#if PHP_VERSION_ID < 70000 - zend_objects_store_del_ref(php_layer->grid TSRMLS_CC); -+#else -+/* -+ Z_SET_REFCOUNT(php_layer->grid, 0); -+ _zval_dtor_func_for_ptr(Z_COUNTED(php_layer->grid)); -+ Z_UNDEF(&php_layer->grid); -+*/ -+ MAPSCRIPT_DELREF(php_layer->grid); -+#endif - } - - MAKE_STD_ZVAL(php_layer->grid); - MAPSCRIPT_MAKE_PARENT(zlayer, &php_layer->grid); -+#if PHP_VERSION_ID < 70000 - mapscript_create_grid((graticuleObj *)(php_layer->layer->layerinfo), parent, php_layer->grid TSRMLS_CC); -- - return_value_ptr = &php_layer->grid; -+#else -+ mapscript_create_grid((graticuleObj *)(php_layer->layer->layerinfo), parent, &php_layer->grid TSRMLS_CC); -+ return_value = &php_layer->grid; -+#endif - } - /* }}} */ - -@@ -107,7 +123,7 @@ PHP_METHOD(gridObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, zobj); - - IF_GET_DOUBLE("minsubdivide", php_grid->grid->minsubdivides) - else IF_GET_DOUBLE("maxsubdivide", php_grid->grid->maxsubdivides) -@@ -137,7 +153,7 @@ PHP_METHOD(gridObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_grid = (php_grid_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, zobj); - - IF_SET_DOUBLE("minsubdivide", php_grid->grid->minsubdivides, value) - else IF_SET_DOUBLE("maxsubdivide", php_grid->grid->maxsubdivides, value) -@@ -160,11 +176,60 @@ zend_function_entry grid_functions[] = { - } - }; - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_grid_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_grid_object *php_grid; -+ -+ php_grid = ecalloc(1, sizeof(*php_grid) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_grid->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_grid->zobj, ce); -+ -+ php_grid->zobj.handlers = &mapscript_grid_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_grid->parent); -+ -+ return &php_grid->zobj; -+} -+ -+static void mapscript_grid_free_object(zend_object *object) -+{ -+ php_grid_object *php_grid; -+ -+ php_grid = (php_grid_object *)((char *)object - XtOffsetOf(php_grid_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_grid->parent); -+ -+ /* We don't need to free the gridObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(grid) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "gridObj", grid_functions); -+ mapscript_ce_grid = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_grid->create_object = mapscript_grid_create_object; -+ mapscript_ce_grid->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_grid_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_grid_object_handlers)); -+ mapscript_grid_object_handlers.free_obj = mapscript_grid_free_object; -+ mapscript_grid_object_handlers.offset = XtOffsetOf(php_grid_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC) - { - php_grid_object * php_grid; - object_init_ex(return_value, mapscript_ce_grid); -- php_grid = (php_grid_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, return_value); - php_grid->grid = grid; - - php_grid->parent = parent; -@@ -212,3 +277,4 @@ PHP_MINIT_FUNCTION(grid) - - return SUCCESS; - } -+#endif -\ No newline at end of file -diff --git a/mapscript/php/hashtable.c b/mapscript/php/hashtable.c -index 44f56805f..3e6c0c783 100644 ---- a/mapscript/php/hashtable.c -+++ b/mapscript/php/hashtable.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_hashtable; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_hashtable_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(hashtable___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -82,7 +85,7 @@ PHP_METHOD(hashtableObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj); - - IF_GET_LONG("numitems", php_hashtable->hashtable->numitems) - else { -@@ -129,14 +132,14 @@ PHP_METHOD(hashtableObj, get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj); - - value = hashTableObj_get(php_hashtable->hashtable, key); - if (value == NULL) { -- RETURN_STRING("",1); -+ MAPSCRIPT_RETURN_STRING("",1); - } - -- RETURN_STRING((char *)value, 1); -+ MAPSCRIPT_RETURN_STRING((char *)value, 1); - } - /* }}} */ - -@@ -158,7 +161,7 @@ PHP_METHOD(hashtableObj, set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj); - - if ((status = hashTableObj_set(php_hashtable->hashtable, key, value)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -187,7 +190,7 @@ PHP_METHOD(hashtableObj, remove) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj); - - if ((status = hashTableObj_remove(php_hashtable->hashtable, key)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -212,7 +215,7 @@ PHP_METHOD(hashtableObj, clear) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj); - - hashTableObj_clear(php_hashtable->hashtable); - } -@@ -237,14 +240,14 @@ PHP_METHOD(hashtableObj, nextKey) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_hashtable = (php_hashtable_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, zobj); - - value = hashTableObj_nextKey(php_hashtable->hashtable, key); - - if (value == NULL) - RETURN_NULL(); - -- RETURN_STRING(value, 1); -+ MAPSCRIPT_RETURN_STRING(value, 1); - } - /* }}} */ - -@@ -265,7 +268,7 @@ void mapscript_create_hashtable(hashTableObj *hashtable, parent_object parent, z - { - php_hashtable_object * php_hashtable; - object_init_ex(return_value, mapscript_ce_hashtable); -- php_hashtable = (php_hashtable_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_hashtable = MAPSCRIPT_OBJ_P(php_hashtable_object, return_value); - php_hashtable->hashtable = hashtable; - - php_hashtable->parent = parent; -@@ -273,6 +276,55 @@ void mapscript_create_hashtable(hashTableObj *hashtable, parent_object parent, z - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_hashtable_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_hashtable_object *php_hashtable; -+ -+ php_hashtable = ecalloc(1, sizeof(*php_hashtable) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_hashtable->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_hashtable->zobj, ce); -+ -+ php_hashtable->zobj.handlers = &mapscript_hashtable_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_hashtable->parent); -+ -+ return &php_hashtable->zobj; -+} -+ -+static void mapscript_hashtable_free_object(zend_object *object) -+{ -+ php_hashtable_object *php_hashtable; -+ -+ php_hashtable = (php_hashtable_object *)((char *)object - XtOffsetOf(php_hashtable_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_hashtable->parent); -+ -+ /* We don't need to free the hashTableObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(hashtable) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "hashTableObj", hashtable_functions); -+ mapscript_ce_hashtable = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_hashtable->create_object = mapscript_hashtable_create_object; -+ mapscript_ce_hashtable->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_hashtable_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_hashtable_object_handlers)); -+ mapscript_hashtable_object_handlers.free_obj = mapscript_hashtable_free_object; -+ mapscript_hashtable_object_handlers.offset = XtOffsetOf(php_hashtable_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_hashtable_object_destroy(void *object TSRMLS_DC) - { - php_hashtable_object *php_hashtable = (php_hashtable_object *)object; -@@ -314,3 +366,4 @@ PHP_MINIT_FUNCTION(hashtable) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/image.c b/mapscript/php/image.c -index f284e5936..719208866 100644 ---- a/mapscript/php/image.c -+++ b/mapscript/php/image.c -@@ -34,6 +34,9 @@ - #include "main/php_output.h" - - zend_class_entry *mapscript_ce_image; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_image_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(image___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -81,7 +84,7 @@ PHP_METHOD(imageObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj); - - IF_GET_LONG("width", php_image->image->width) - else IF_GET_LONG("height", php_image->image->height) -@@ -111,7 +114,7 @@ PHP_METHOD(imageObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj); - - IF_SET_STRING("imagepath", php_image->image->imagepath, value) - else IF_SET_STRING("imageurl", php_image->image->imageurl, value) -@@ -144,7 +147,7 @@ PHP_METHOD(imageObj, saveWebImage) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj); - - imageFilename = msTmpFilename(php_image->image->format->extension); - imageFile = msBuildPath(path, php_image->image->imagepath, imageFilename); -@@ -157,7 +160,7 @@ PHP_METHOD(imageObj, saveWebImage) - imageUrlFull = msBuildPath(path, php_image->image->imageurl, imageFilename); - msFree(imageFilename); - -- RETURN_STRING(imageUrlFull, 1); -+ MAPSCRIPT_RETURN_STRING(imageUrlFull, 1); - } - /* }}} */ - -@@ -194,8 +197,8 @@ PHP_METHOD(imageObj, pasteImage) - if (ZEND_NUM_ARGS() == 3) - mapscript_report_php_error(E_WARNING, "dstX parameter given but not dstY" TSRMLS_CC); - -- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_imageSrc = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj); -+ php_imageSrc = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - if (!MS_RENDERER_PLUGIN(php_imageSrc->image->format) || - !MS_RENDERER_PLUGIN(php_image->image->format)) { -@@ -274,9 +277,9 @@ PHP_METHOD(imageObj, saveImage) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_image = (php_image_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zobj); - if (zmap) -- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); - - if(filename_len > 0) { - if ((status = msSaveImage((zmap ? php_map->map:NULL), php_image->image, filename) != MS_SUCCESS)) { -@@ -339,10 +342,55 @@ void mapscript_create_image(imageObj *image, zval *return_value TSRMLS_DC) - { - php_image_object * php_image; - object_init_ex(return_value, mapscript_ce_image); -- php_image = (php_image_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, return_value); - php_image->image = image; - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_image_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_image_object *php_image; -+ -+ php_image = ecalloc(1, sizeof(*php_image) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_image->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_image->zobj, ce); -+ -+ php_image->zobj.handlers = &mapscript_image_object_handlers; -+ -+ return &php_image->zobj; -+} -+ -+static void mapscript_image_free_object(zend_object *object) -+{ -+ php_image_object *php_image; -+ -+ php_image = (php_image_object *)((char *)object - XtOffsetOf(php_image_object, zobj)); -+ -+ msFreeImage(php_image->image); -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(image) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "imageObj", image_functions); -+ mapscript_ce_image = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_image->create_object = mapscript_image_create_object; -+ mapscript_ce_image->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_image_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_image_object_handlers)); -+ mapscript_image_object_handlers.free_obj = mapscript_image_free_object; -+ mapscript_image_object_handlers.offset = XtOffsetOf(php_image_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_image_object_destroy(void *object TSRMLS_DC) - { - php_image_object *php_image = (php_image_object *)object; -@@ -380,3 +428,4 @@ PHP_MINIT_FUNCTION(image) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/label.c b/mapscript/php/label.c -index 9fab6ec3e..214dfb19b 100644 ---- a/mapscript/php/label.c -+++ b/mapscript/php/label.c -@@ -106,7 +106,7 @@ PHP_METHOD(labelObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, getThis()); - - if ((php_label->label = labelObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct labelObj." TSRMLS_CC); -@@ -130,7 +130,7 @@ PHP_METHOD(labelObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - IF_GET_STRING("font", php_label->label->font) - else IF_GET_STRING("encoding", php_label->label->encoding) -@@ -187,7 +187,7 @@ PHP_METHOD(labelObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - IF_SET_STRING("font", php_label->label->font, value) - else IF_SET_STRING("encoding", php_label->label->encoding, value) -@@ -248,7 +248,7 @@ PHP_METHOD(labelObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - if ((status = labelObj_updateFromString(php_label->label, snippet)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -274,14 +274,14 @@ PHP_METHOD(labelObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - value = labelObj_convertToString(php_label->label); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -304,7 +304,7 @@ PHP_METHOD(labelObj, setBinding) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - if (bindingId < 0 || bindingId > MS_LABEL_BINDING_LENGTH) { - mapscript_throw_exception("Invalid binding id." TSRMLS_CC); -@@ -347,7 +347,7 @@ PHP_METHOD(labelObj, getBinding) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - if (bindingId < 0 || bindingId > MS_LABEL_BINDING_LENGTH) { - mapscript_throw_exception("Invalid binding id." TSRMLS_CC); -@@ -355,7 +355,7 @@ PHP_METHOD(labelObj, getBinding) - } - - if( (value = php_label->label->bindings[bindingId].item) != NULL) { -- RETURN_STRING(value, 1); -+ MAPSCRIPT_RETURN_STRING(value, 1); - } - - RETURN_NULL(); -@@ -379,7 +379,7 @@ PHP_METHOD(labelObj, removeBinding) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - if (bindingId < 0 || bindingId > MS_LABEL_BINDING_LENGTH) { - mapscript_throw_exception("Invalid binding id." TSRMLS_CC); -@@ -417,7 +417,7 @@ PHP_METHOD(labelObj, getStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - if (index < 0 || index >= php_label->label->numstyles) { - mapscript_throw_exception("Invalid style index." TSRMLS_CC); -@@ -449,8 +449,8 @@ PHP_METHOD(labelObj, insertStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_style = (php_style_object *) zend_object_store_get_object(zstyle TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zstyle); - - RETURN_LONG(msInsertLabelStyle(php_label->label, php_style->style, index)); - } -@@ -474,7 +474,7 @@ PHP_METHOD(labelObj, removeStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - style = msRemoveLabelStyle(php_label->label, index); - -@@ -500,7 +500,7 @@ PHP_METHOD(labelObj, moveStyleUp) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - status = labelObj_moveStyleUp(php_label->label, index); - -@@ -524,7 +524,7 @@ PHP_METHOD(labelObj, moveStyleDown) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - status = labelObj_moveStyleDown(php_label->label, index); - -@@ -548,7 +548,7 @@ PHP_METHOD(labelObj, deleteStyle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - status = labelObj_deleteStyle(php_label->label, index); - -@@ -570,7 +570,7 @@ PHP_METHOD(labelObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - MAPSCRIPT_DELREF(php_label->color); - MAPSCRIPT_DELREF(php_label->outlinecolor); -@@ -596,7 +596,7 @@ PHP_METHOD(labelObj, setExpression) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - status = labelObj_setExpression(php_label->label, expression); - -@@ -625,14 +625,14 @@ PHP_METHOD(labelObj, getExpressionString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - value = labelObj_getExpressionString(php_label->label); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -656,8 +656,8 @@ PHP_METHOD(labelObj, setText) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(php_label->parent.val TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); -+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_label->parent.val); - - status = labelObj_setText(php_label->label, php_layer->layer, text); - -@@ -686,14 +686,14 @@ PHP_METHOD(labelObj, getTextString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_label = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - value = labelObj_getTextString(php_label->label); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -728,16 +728,93 @@ void mapscript_create_label(labelObj *label, parent_object parent, zval *return_ - { - php_label_object * php_label; - object_init_ex(return_value, mapscript_ce_label); -- php_label = (php_label_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, return_value); - php_label->label = label; - -- if (parent.val) -+ if(ZVAL_NOT_UNDEF(parent.val)) - php_label->is_ref = 1; - - php_label->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_label_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_label_object *php_label; -+ -+ php_label = ecalloc(1, sizeof(*php_label) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_label->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_label->zobj, ce); -+ -+ php_label->zobj.handlers = &mapscript_label_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_label->parent); -+ php_label->is_ref = 0; -+ ZVAL_UNDEF(&php_label->color); -+ ZVAL_UNDEF(&php_label->outlinecolor); -+ ZVAL_UNDEF(&php_label->shadowcolor); -+ ZVAL_UNDEF(&php_label->leader); -+ -+ -+ return &php_label->zobj; -+} -+ -+static void mapscript_label_free_object(zend_object *object) -+{ -+ php_label_object *php_label; -+ -+ php_label = (php_label_object *)((char *)object - XtOffsetOf(php_label_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_label->parent); -+ MAPSCRIPT_DELREF(php_label->color); -+ MAPSCRIPT_DELREF(php_label->outlinecolor); -+ MAPSCRIPT_DELREF(php_label->shadowcolor); -+ MAPSCRIPT_DELREF(php_label->leader); -+ -+ if (php_label->label && !php_label->is_ref) { -+ labelObj_destroy(php_label->label); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_label_clone_object(zval *zobj) -+{ -+ php_label_object *php_label_old, *php_label_new; -+ zend_object* zobj_new; -+ -+ php_label_old = MAPSCRIPT_OBJ_P(php_label_object, zobj); -+ -+ zobj_new = mapscript_label_create_object(mapscript_ce_label); -+ php_label_new = (php_label_object *)((char *)zobj_new - XtOffsetOf(php_label_object, zobj)); -+ -+ php_label_new->label = labelObj_clone(php_label_old->label); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(label) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "labelObj", label_functions); -+ mapscript_ce_label = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_label->create_object = mapscript_label_create_object; -+ mapscript_ce_label->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_label_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_label_object_handlers)); -+ mapscript_label_object_handlers.free_obj = mapscript_label_free_object; -+ mapscript_label_object_handlers.clone_obj = mapscript_label_clone_object; -+ mapscript_label_object_handlers.offset = XtOffsetOf(php_label_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_label_object_destroy(void *object TSRMLS_DC) - { - php_label_object *php_label = (php_label_object *)object; -@@ -791,7 +868,7 @@ static zend_object_value mapscript_label_object_clone(zval *zobj TSRMLS_DC) - php_label_object *php_label_old, *php_label_new; - zend_object_value new_ov; - -- php_label_old = (php_label_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_label_old = MAPSCRIPT_OBJ_P(php_label_object, zobj); - - new_ov = mapscript_label_object_new_ex(mapscript_ce_label, &php_label_new TSRMLS_CC); - zend_objects_clone_members(&php_label_new->std, new_ov, &php_label_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -817,4 +894,4 @@ PHP_MINIT_FUNCTION(label) - - return SUCCESS; - } -- -+#endif -diff --git a/mapscript/php/labelcache.c b/mapscript/php/labelcache.c -index 43f6ef503..cd04b3cdf 100644 ---- a/mapscript/php/labelcache.c -+++ b/mapscript/php/labelcache.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_labelcache; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_labelcache_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(labelcache___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -75,7 +78,7 @@ PHP_METHOD(labelCacheObj, freeCache) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_labelcache = (php_labelcache_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_labelcache = MAPSCRIPT_OBJ_P(php_labelcache_object, zobj); - - labelCacheObj_freeCache(php_labelcache->labelcache); - -@@ -96,13 +99,61 @@ void mapscript_create_labelcache(labelCacheObj *labelcache, parent_object parent - { - php_labelcache_object * php_labelcache; - object_init_ex(return_value, mapscript_ce_labelcache); -- php_labelcache = (php_labelcache_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_labelcache = MAPSCRIPT_OBJ_P(php_labelcache_object, return_value); - php_labelcache->labelcache = labelcache; - - php_labelcache->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+ -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_labelcache_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_labelcache_object *php_labelcache; -+ -+ php_labelcache = ecalloc(1, sizeof(*php_labelcache) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_labelcache->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_labelcache->zobj, ce); -+ -+ php_labelcache->zobj.handlers = &mapscript_labelcache_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_labelcache->parent); -+ -+ return &php_labelcache->zobj; -+} -+ -+static void mapscript_labelcache_free_object(zend_object *object) -+{ -+ php_labelcache_object *php_labelcache; -+ -+ php_labelcache = (php_labelcache_object *)((char *)object - XtOffsetOf(php_labelcache_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_labelcache->parent); -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(labelcache) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "labelcacheObj", labelcache_functions); -+ mapscript_ce_labelcache = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_labelcache->create_object = mapscript_labelcache_create_object; -+ mapscript_ce_labelcache->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_labelcache_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_labelcache_object_handlers)); -+ mapscript_labelcache_object_handlers.free_obj = mapscript_labelcache_free_object; -+ mapscript_labelcache_object_handlers.offset = XtOffsetOf(php_labelcache_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_labelcache_object_destroy(void *object TSRMLS_DC) - { - php_labelcache_object *php_labelcache = (php_labelcache_object *)object; -@@ -144,3 +195,4 @@ PHP_MINIT_FUNCTION(labelcache) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/labelcachemember.c b/mapscript/php/labelcachemember.c -index e34010673..6241b9528 100644 ---- a/mapscript/php/labelcachemember.c -+++ b/mapscript/php/labelcachemember.c -@@ -29,10 +29,12 @@ - * DEALINGS IN THE SOFTWARE. - **********************************************************************/ - --#ifdef what_the_fxxx_is_this_for - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_labelcachemember; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_labelcachemember_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(labelcachemember___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -66,21 +68,21 @@ PHP_METHOD(labelCacheMemberObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, zobj); - - IF_GET_LONG("classindex", php_labelcachemember->labelcachemember->classindex) -- else IF_GET_LONG("featuresize", php_labelcachemember->labelcachemember->featuresize) -+ /* else IF_GET_LONG("featuresize", php_labelcachemember->labelcachemember->featuresize) */ - else IF_GET_LONG("layerindex", php_labelcachemember->labelcachemember->layerindex) -- else IF_GET_LONG("numstyles", php_labelcachemember->labelcachemember->numstyles) -- else IF_GET_LONG("numlabels", php_labelcachemember->labelcachemember->numlabels) -+ /* else IF_GET_LONG("numstyles", php_labelcachemember->labelcachemember->numstyles) */ -+ /* else IF_GET_LONG("numlabels", php_labelcachemember->labelcachemember->numlabels) */ - /* else IF_GET_LONG("shapeindex", php_labelcachemember->labelcachemember->shapeindex) */ - else IF_GET_LONG("status", php_labelcachemember->labelcachemember->status) - else IF_GET_LONG("markerid", php_labelcachemember->labelcachemember->markerid) - /* else IF_GET_LONG("tileindex", php_labelcachemember->labelcachemember->tileindex) */ - else IF_GET_OBJECT("point", mapscript_ce_point, php_labelcachemember->point, &php_labelcachemember->labelcachemember->point) -- else IF_GET_OBJECT("labels", mapscript_ce_label, php_labelcachemember->labels, &php_labelcachemember->labelcachemember->labels) -- else IF_GET_OBJECT("styles", mapscript_ce_style, php_labelcachemember->styles, php_labelcachemember->labelcachemember->styles) -- else IF_GET_OBJECT("poly", mapscript_ce_shape, php_labelcachemember->poly, php_labelcachemember->labelcachemember->poly) -+ /* else IF_GET_OBJECT("labels", mapscript_ce_label, php_labelcachemember->labels, &php_labelcachemember->labelcachemember->labels) */ -+ /* else IF_GET_OBJECT("styles", mapscript_ce_style, php_labelcachemember->styles, php_labelcachemember->labelcachemember->styles) */ -+ /* else IF_GET_OBJECT("poly", mapscript_ce_shape, php_labelcachemember->poly, php_labelcachemember->labelcachemember->poly) */ - else { - mapscript_throw_exception("Property '%s' does not exist in this object." TSRMLS_CC, property); - } -@@ -91,8 +93,8 @@ PHP_METHOD(labelCacheMemberObj, __set) - char *property; - long property_len = 0; - zval *value; -- zval *zobj = getThis(); -- php_labelcachemember_object *php_labelcachemember; -+ /* zval *zobj = getThis(); */ -+ /* php_labelcachemember_object *php_labelcachemember; */ - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sz", -@@ -102,20 +104,20 @@ PHP_METHOD(labelCacheMemberObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ /* php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, zobj); */ - - if ( (STRING_EQUAL("classindex", property)) || -- (STRING_EQUAL("featuresize", property)) || -+ /* (STRING_EQUAL("featuresize", property)) || */ - (STRING_EQUAL("layerindex", property)) || -- (STRING_EQUAL("numstyles", property)) || -- (STRING_EQUAL("numlabels", property)) || -- (STRING_EQUAL("shapeindex", property)) || -+ /* (STRING_EQUAL("numstyles", property)) || */ -+ /* (STRING_EQUAL("numlabels", property)) || */ -+ /* (STRING_EQUAL("shapeindex", property)) || */ - (STRING_EQUAL("status", property)) || - (STRING_EQUAL("markerid", property)) || -- (STRING_EQUAL("tileindex", property)) || -- (STRING_EQUAL("labels", property)) || -- (STRING_EQUAL("styles", property)) || -- (STRING_EQUAL("poly", property)) || -+ /* (STRING_EQUAL("tileindex", property)) || */ -+ /* (STRING_EQUAL("labels", property)) || */ -+ /* (STRING_EQUAL("styles", property)) || */ -+ /* (STRING_EQUAL("poly", property)) || */ - (STRING_EQUAL("point", property))) { - mapscript_throw_exception("Property '%s' is read-only and cannot be set." TSRMLS_CC, property); - } else { -@@ -137,7 +139,7 @@ PHP_METHOD(labelCacheMemberObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, zobj); - - MAPSCRIPT_DELREF(php_labelcachemember->point); - MAPSCRIPT_DELREF(php_labelcachemember->labels); -@@ -162,7 +164,7 @@ void mapscript_create_labelcachemember(labelCacheMemberObj *labelcachemember, - { - php_labelcachemember_object * php_labelcachemember; - object_init_ex(return_value, mapscript_ce_labelcachemember); -- php_labelcachemember = (php_labelcachemember_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_labelcachemember = MAPSCRIPT_OBJ_P(php_labelcachemember_object, return_value); - php_labelcachemember->labelcachemember = labelcachemember; - - php_labelcachemember->parent = parent; -@@ -170,6 +172,65 @@ void mapscript_create_labelcachemember(labelCacheMemberObj *labelcachemember, - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_labelcachemember_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_labelcachemember_object *php_labelcachemember; -+ -+ php_labelcachemember = ecalloc(1, sizeof(*php_labelcachemember) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_labelcachemember->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_labelcachemember->zobj, ce); -+ -+ php_labelcachemember->zobj.handlers = &mapscript_labelcachemember_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_labelcachemember->parent); -+ ZVAL_UNDEF(&php_labelcachemember->point); -+ ZVAL_UNDEF(&php_labelcachemember->labels); -+ ZVAL_UNDEF(&php_labelcachemember->styles); -+ ZVAL_UNDEF(&php_labelcachemember->poly); -+ -+ -+ return &php_labelcachemember->zobj; -+} -+ -+static void mapscript_labelcachemember_free_object(zend_object *object) -+{ -+ php_labelcachemember_object *php_labelcachemember; -+ -+ php_labelcachemember = (php_labelcachemember_object *)((char *)object - XtOffsetOf(php_labelcachemember_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_labelcachemember->parent); -+ MAPSCRIPT_DELREF(php_labelcachemember->point); -+ MAPSCRIPT_DELREF(php_labelcachemember->labels); -+ MAPSCRIPT_DELREF(php_labelcachemember->styles); -+ MAPSCRIPT_DELREF(php_labelcachemember->poly); -+ -+ /* We don't need to free the labelCacheMemberObj, the mapObj will do it */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(labelcachemember) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "labelCacheMemberObj", labelcachemember_functions); -+ mapscript_ce_labelcachemember = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_labelcachemember->create_object = mapscript_labelcachemember_create_object; -+ mapscript_ce_labelcachemember->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_labelcachemember_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_labelcachemember_object_handlers)); -+ mapscript_labelcachemember_object_handlers.free_obj = mapscript_labelcachemember_free_object; -+ mapscript_labelcachemember_object_handlers.offset = XtOffsetOf(php_labelcachemember_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ -+ - static void mapscript_labelcachemember_object_destroy(void *object TSRMLS_DC) - { - php_labelcachemember_object *php_labelcachemember = (php_labelcachemember_object *)object; -@@ -220,4 +281,3 @@ PHP_MINIT_FUNCTION(labelcachemember) - return SUCCESS; - } - #endif -- -diff --git a/mapscript/php/labelleader.c b/mapscript/php/labelleader.c -index 343a531e8..edf4d113a 100644 ---- a/mapscript/php/labelleader.c -+++ b/mapscript/php/labelleader.c -@@ -30,6 +30,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_labelleader; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_labelleader_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(labelleader___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -63,7 +66,7 @@ PHP_METHOD(labelLeaderObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_labelleader = (php_labelleader_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_labelleader = MAPSCRIPT_OBJ_P(php_labelleader_object, zobj); - - IF_GET_LONG("maxdistance", php_labelleader->labelleader->maxdistance) - else IF_GET_LONG("gridstep", php_labelleader->labelleader->gridstep) -@@ -106,13 +109,63 @@ void mapscript_create_labelleader(labelLeaderObj *labelleader, parent_object par - { - php_labelleader_object * php_labelleader; - object_init_ex(return_value, mapscript_ce_labelleader); -- php_labelleader = (php_labelleader_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_labelleader = MAPSCRIPT_OBJ_P(php_labelleader_object, return_value); - php_labelleader->labelleader = labelleader; - - php_labelleader->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_labelleader_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_labelleader_object *php_labelleader; -+ -+ php_labelleader = ecalloc(1, sizeof(*php_labelleader) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_labelleader->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_labelleader->zobj, ce); -+ -+ php_labelleader->zobj.handlers = &mapscript_labelleader_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_labelleader->parent); -+ -+ return &php_labelleader->zobj; -+} -+ -+static void mapscript_labelleader_free_object(zend_object *object) -+{ -+ php_labelleader_object *php_labelleader; -+ -+ php_labelleader = (php_labelleader_object *)((char *)object - XtOffsetOf(php_labelleader_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_labelleader->parent); -+ -+ /* We don't need to free the labelLeaderObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(labelleader) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "labelLeaderObj", labelleader_functions); -+ mapscript_ce_labelleader = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_labelleader->create_object = mapscript_labelleader_create_object; -+ mapscript_ce_labelleader->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_labelleader_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_labelleader_object_handlers)); -+ mapscript_labelleader_object_handlers.free_obj = mapscript_labelleader_free_object; -+ mapscript_labelleader_object_handlers.offset = XtOffsetOf(php_labelleader_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ -+ - static void mapscript_labelleader_object_destroy(void *object TSRMLS_DC) - { - php_labelleader_object *php_labelleader = (php_labelleader_object *)object; -@@ -154,3 +207,4 @@ PHP_MINIT_FUNCTION(labelleader) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/layer.c b/mapscript/php/layer.c -index 8567bc8e2..09c961173 100644 ---- a/mapscript/php/layer.c -+++ b/mapscript/php/layer.c -@@ -220,10 +220,10 @@ PHP_METHOD(layerObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *)zend_object_store_get_object(zobj TSRMLS_CC); -- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); - if (zlayer) -- php_layer2 = (php_layer_object *)zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_layer2 = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - - if ((layer = layerObj_new(php_map->map)) == NULL) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -235,7 +235,7 @@ PHP_METHOD(layerObj, __construct) - - MAPSCRIPT_MAKE_PARENT(zmap, NULL); - php_layer->parent = parent; -- MAPSCRIPT_ADDREF(zmap); -+ MAPSCRIPT_ADDREF_P(zmap); - - /* if a layer is passed as argument, copy the layer into - the new one */ -@@ -248,7 +248,11 @@ PHP_METHOD(layerObj, __construct) - - if (layer->connectiontype != MS_GRATICULE || layer->layerinfo == NULL) { - MAKE_STD_ZVAL(php_layer->grid); -+#if PHP_VERSION_ID < 70000 - ZVAL_NULL(php_layer->grid); -+#else -+ ZVAL_NULL(&php_layer->grid); -+#endif - } - } - /* }}} */ -@@ -268,7 +272,7 @@ PHP_METHOD(layerObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - IF_GET_LONG("numclasses", php_layer->layer->numclasses) - else IF_GET_STRING("encoding", php_layer->layer->encoding) -@@ -345,7 +349,7 @@ PHP_METHOD(layerObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - /* special case for "template" which we want to set to NULL and not an empty string */ - if(Z_TYPE_P(value)==IS_NULL && !strcmp(property,"template")) { -@@ -433,15 +437,15 @@ PHP_METHOD(layerObj, draw) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_draw(php_layer->layer, php_map->map, php_image->image)) != MS_SUCCESS) - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -469,15 +473,15 @@ PHP_METHOD(layerObj, drawQuery) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_drawQuery(php_layer->layer, php_map->map, php_image->image)) != MS_SUCCESS) - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -508,15 +512,15 @@ PHP_METHOD(layerObj, queryByPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByPoint(php_layer->layer, php_map->map, php_point->point, - mode, buffer)) != MS_SUCCESS) -@@ -545,15 +549,15 @@ PHP_METHOD(layerObj, queryByRect) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_rect = (php_rect_object *) zend_object_store_get_object(zrect TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zrect); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByRect(php_layer->layer, php_map->map, *(php_rect->rect))) != MS_SUCCESS) - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -581,15 +585,15 @@ PHP_METHOD(layerObj, queryByShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByShape(php_layer->layer, php_map->map, php_shape->shape)) != MS_SUCCESS) - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -616,14 +620,14 @@ PHP_METHOD(layerObj, queryByFeatures) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByFeatures(php_layer->layer, php_map->map, slayer)) != MS_SUCCESS) - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -656,14 +660,14 @@ PHP_METHOD(layerObj, queryByAttributes) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByAttributes(php_layer->layer, php_map->map, - item, string, mode)) != MS_SUCCESS) -@@ -692,14 +696,14 @@ PHP_METHOD(layerObj, queryByFilter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByFilter(php_layer->layer, php_map->map, - string)) != MS_SUCCESS) -@@ -728,14 +732,14 @@ PHP_METHOD(layerObj, queryByIndex) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((status = layerObj_queryByIndex(php_layer->layer, php_map->map, - tileindex, shapeindex, addtoquery)) != MS_SUCCESS) -@@ -763,7 +767,7 @@ PHP_METHOD(layerObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((status = layerObj_updateFromString(php_layer->layer, snippet)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -789,14 +793,14 @@ PHP_METHOD(layerObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - value = layerObj_convertToString(php_layer->layer); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -819,7 +823,7 @@ PHP_METHOD(layerObj, getClass) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((class = layerObj_getClass(php_layer->layer, index)) == NULL) { - mapscript_throw_exception("Invalid class index." TSRMLS_CC); -@@ -837,7 +841,8 @@ PHP_METHOD(layerObj, getClass) - PHP_METHOD(layerObj, getClassIndex) - { - zval *zobj = getThis(); -- zval *zshape, **ppzval, *zclassgroup = NULL; -+ zval *zshape, *zclassgroup = NULL; -+ MAPSCRIPT_ZVAL_P ppzval; - int numElements, *classGroups = NULL; - int retval = -1, i = 0; - long numClasses = 0; -@@ -856,15 +861,15 @@ PHP_METHOD(layerObj, getClassIndex) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if (zclassgroup) { - classgroup_hash = Z_ARRVAL_P(zclassgroup); -@@ -874,7 +879,11 @@ PHP_METHOD(layerObj, getClassIndex) - for(zend_hash_internal_pointer_reset(classgroup_hash); - zend_hash_has_more_elements(classgroup_hash) == SUCCESS; - zend_hash_move_forward(classgroup_hash), ++i) { -+#if PHP_VERSION_ID < 70000 - zend_hash_get_current_data(classgroup_hash, (void **)&ppzval); -+#else -+ ppzval = zend_hash_get_current_data(classgroup_hash); -+#endif - classGroups[i] = Z_LVAL_PP(ppzval); - } - } -@@ -907,7 +916,7 @@ PHP_METHOD(layerObj, setFilter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((status = layerObj_setFilter(php_layer->layer, expression)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -933,14 +942,14 @@ PHP_METHOD(layerObj, getFilterString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - value = layerObj_getFilter(php_layer->layer); - if (value == NULL) { - RETURN_NULL(); - } - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -964,16 +973,16 @@ PHP_METHOD(layerObj, setProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- if (php_layer->projection) -- php_projection = (php_projection_object *) zend_object_store_get_object(php_layer->projection TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ if (ZVAL_NOT_UNDEF(php_layer->projection)) -+ php_projection = MAPSCRIPT_OBJ(php_projection_object, php_layer->projection); - - if ((status = layerObj_setProjection(php_layer->layer, projection)) != MS_SUCCESS) { - mapscript_report_php_error(E_WARNING, "setProjection failed" TSRMLS_CC); - RETURN_LONG(status); - } - -- if (php_layer->projection) -+ if (ZVAL_NOT_UNDEF(php_layer->projection)) - php_projection->projection = &(php_layer->layer->projection); - - RETURN_LONG(status); -@@ -995,14 +1004,14 @@ PHP_METHOD(layerObj, getProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - projection = layerObj_getProjection(php_layer->layer); - if (projection == NULL) { - RETURN_NULL(); - } - -- RETVAL_STRING(projection, 1); -+ MAPSCRIPT_RETVAL_STRING(projection, 1); - free(projection); - } - /* }}} */ -@@ -1026,16 +1035,16 @@ PHP_METHOD(layerObj, setWKTProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- if (php_layer->projection) -- php_projection = (php_projection_object *) zend_object_store_get_object(php_layer->projection TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ if (ZVAL_NOT_UNDEF(php_layer->projection)) -+ php_projection = MAPSCRIPT_OBJ(php_projection_object, php_layer->projection); - - if ((status = layerObj_setWKTProjection(php_layer->layer, projection)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); - return; - } - -- if (php_layer->projection) -+ if (ZVAL_NOT_UNDEF(php_layer->projection)) - php_projection->projection = &(php_layer->layer->projection); - - RETURN_LONG(status); -@@ -1056,7 +1065,7 @@ PHP_METHOD(layerObj, getNumResults) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - - if (!php_layer->layer->resultcache) -@@ -1081,7 +1090,7 @@ PHP_METHOD(layerObj, getResultsBounds) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if (!php_layer->layer->resultcache) - RETURN_NULL(); -@@ -1111,7 +1120,7 @@ PHP_METHOD(layerObj, getResult) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((result = layerObj_getResult(php_layer->layer, index)) == NULL) { - mapscript_throw_exception("Invalid result index." TSRMLS_CC); -@@ -1140,7 +1149,7 @@ PHP_METHOD(layerObj, open) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - - status = layerObj_open(php_layer->layer); -@@ -1182,8 +1191,8 @@ PHP_METHOD(layerObj, whichShapes) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_rect = (php_rect_object *) zend_object_store_get_object(zrect TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zrect); - - - status = layerObj_whichShapes(php_layer->layer, php_rect->rect); -@@ -1207,7 +1216,7 @@ PHP_METHOD(layerObj, nextShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - shape = layerObj_nextShape(php_layer->layer); - -@@ -1234,7 +1243,7 @@ PHP_METHOD(layerObj, close) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - layerObj_close(php_layer->layer); - } -@@ -1256,7 +1265,7 @@ PHP_METHOD(layerObj, getExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - /* Create a new rectObj to hold the result */ - if ((rect = rectObj_new()) == NULL) { -@@ -1290,7 +1299,7 @@ PHP_METHOD(layerObj, setExtent) - return; - } - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if (minx > maxx || miny > maxy) { - mapscript_throw_mapserver_exception("Invalid min/max values" TSRMLS_CC); -@@ -1320,8 +1329,8 @@ PHP_METHOD(layerObj, addFeature) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - - status = layerObj_addFeature(php_layer->layer, php_shape->shape); -@@ -1337,7 +1346,7 @@ PHP_METHOD(layerObj, getMetaData) - zval *zname; - zval *zobj = getThis(); - php_layer_object *php_layer; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", -@@ -1347,12 +1356,16 @@ PHP_METHOD(layerObj, getMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata); - - MAPSCRIPT_CALL_METHOD_1(php_layer->metadata, "get", retval, zname); - -+#if PHP_VERSION_ID < 70000 - RETURN_STRING(Z_STRVAL_P(retval),1); -+#else -+ RETURN_STRING(Z_STRVAL(retval)) -+#endif - } - /* }}} */ - -@@ -1363,7 +1376,7 @@ PHP_METHOD(layerObj, setMetaData) - zval *zname, *zvalue; - zval *zobj = getThis(); - php_layer_object *php_layer; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", -@@ -1373,12 +1386,16 @@ PHP_METHOD(layerObj, setMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata); - - MAPSCRIPT_CALL_METHOD_2(php_layer->metadata, "set", retval, zname, zvalue); - -+#if PHP_VERSION_ID < 70000 - RETURN_LONG(Z_LVAL_P(retval)); -+#else -+ RETURN_LONG(Z_LVAL(retval)); -+#endif - } - /* }}} */ - -@@ -1389,7 +1406,7 @@ PHP_METHOD(layerObj, removeMetaData) - zval *zname; - zval *zobj = getThis(); - php_layer_object *php_layer; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", -@@ -1399,12 +1416,16 @@ PHP_METHOD(layerObj, removeMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_layer->metadata, &php_layer->layer->metadata); - - MAPSCRIPT_CALL_METHOD_1(php_layer->metadata, "remove", retval, zname); - -+#if PHP_VERSION_ID < 70000 - RETURN_LONG(Z_LVAL_P(retval)); -+#else -+ RETURN_LONG(Z_LVAL(retval)); -+#endif - } - /* }}} */ - -@@ -1429,14 +1450,14 @@ PHP_METHOD(layerObj, getWMSFeatureInfoURL) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - if ((value = layerObj_getWMSFeatureInfoURL(php_layer->layer, php_map->map, - clickx, -@@ -1444,10 +1465,10 @@ PHP_METHOD(layerObj, getWMSFeatureInfoURL) - featureCount, - infoFormat)) == NULL) { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -1467,7 +1488,7 @@ PHP_METHOD(layerObj, getItems) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - array_init(return_value); - status = msLayerGetItems(php_layer->layer); -@@ -1475,7 +1496,7 @@ PHP_METHOD(layerObj, getItems) - if (status != MS_FAILURE && php_layer->layer->numitems > 0) { - for (i=0; ilayer->numitems; i++) { - /* add a copy of the group name to the PHP array */ -- add_next_index_string(return_value, php_layer->layer->items[i], 1); -+ mapscript_add_next_index_string(return_value, php_layer->layer->items[i], 1); - } - } - } -@@ -1498,7 +1519,7 @@ PHP_METHOD(layerObj, setProcessing) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - php_layer->layer->numprocessing++; - if(php_layer->layer->numprocessing == 1) -@@ -1532,7 +1553,7 @@ PHP_METHOD(layerObj, setProcessingKey) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - msLayerSetProcessingKey( php_layer->layer, key, value ); - -@@ -1555,12 +1576,12 @@ PHP_METHOD(layerObj, getProcessing) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - array_init(return_value); - if (php_layer->layer->numprocessing > 0) { - for (i=0; ilayer->numprocessing; i++) { -- add_next_index_string(return_value, php_layer->layer->processing[i], 1); -+ mapscript_add_next_index_string(return_value, php_layer->layer->processing[i], 1); - } - } - } -@@ -1581,7 +1602,7 @@ PHP_METHOD(layerObj, clearProcessing) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if (php_layer->layer->numprocessing > 0) { - for(i=0; ilayer->numprocessing; i++) -@@ -1608,12 +1629,12 @@ PHP_METHOD(layerObj, executeWFSGetFeature) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((value=layerObj_executeWFSGetFeature(php_layer->layer)) == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -1642,7 +1663,7 @@ PHP_METHOD(layerObj, applySLD) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - status = layerObj_applySLD(php_layer->layer, sldxml, namedLayer); - -@@ -1675,7 +1696,7 @@ PHP_METHOD(layerObj, applySLDURL) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - status = layerObj_applySLDURL(php_layer->layer, sldurl, namedLayer); - -@@ -1699,16 +1720,16 @@ PHP_METHOD(layerObj, generateSLD) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - buffer = layerObj_generateSLD(php_layer->layer); - - if (buffer) { -- RETVAL_STRING(buffer, 1); -+ MAPSCRIPT_RETVAL_STRING(buffer, 1); - free(buffer); - } else { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - } - /* }}} */ -@@ -1731,7 +1752,7 @@ PHP_METHOD(layerObj, moveClassUp) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - status = layerObj_moveClassUp(php_layer->layer, index); - -@@ -1757,7 +1778,7 @@ PHP_METHOD(layerObj, moveClassDown) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - status = layerObj_moveClassDown(php_layer->layer, index); - -@@ -1784,7 +1805,7 @@ PHP_METHOD(layerObj, removeClass) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((class = layerObj_removeClass(php_layer->layer, index)) == NULL) { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -@@ -1814,14 +1835,14 @@ PHP_METHOD(layerObj, isVisible) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - retval = msLayerIsVisible(php_map->map, php_layer->layer); - -@@ -1849,7 +1870,7 @@ PHP_METHOD(layerObj, setConnectionType) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if ((status = layerObj_setConnectionType(php_layer->layer, - type, -@@ -1859,10 +1880,14 @@ PHP_METHOD(layerObj, setConnectionType) - } - - if (php_layer->layer->connectiontype != MS_GRATICULE || php_layer->layer->layerinfo == NULL) { -- if (php_layer->grid && Z_TYPE_P(php_layer->grid) == IS_OBJECT) { -+ if (ZVAL_NOT_UNDEF(php_layer->grid) && MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT) { - MAPSCRIPT_DELREF(php_layer->grid); - MAKE_STD_ZVAL(php_layer->grid); -+#if PHP_VERSION_ID < 70000 - ZVAL_NULL(php_layer->grid); -+#else -+ ZVAL_NULL(&php_layer->grid); -+#endif - } - } - -@@ -1876,7 +1901,7 @@ PHP_METHOD(layerObj, getGridIntersectionCoordinates) - { - zval *zobj = getThis(); - graticuleIntersectionObj *values=NULL; -- zval *tmp_arr1; -+ MAPSCRIPT_ZVAL tmp_arr1; - int i=0; - php_layer_object *php_layer; - php_map_object *php_map; -@@ -1888,14 +1913,14 @@ PHP_METHOD(layerObj, getGridIntersectionCoordinates) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - -- if (!php_layer->parent.val) { -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this layer object." TSRMLS_CC); - return; - } - -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - - - array_init(return_value); -@@ -1914,92 +1939,118 @@ PHP_METHOD(layerObj, getGridIntersectionCoordinates) - add_assoc_double(return_value, "topnumpoints", values->nTop); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inTop; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_string(tmp_arr1, values->papszTopLabels[i],1); -+#else -+ add_next_index_string(&tmp_arr1, values->papszTopLabels[i]); -+#endif - } -- zend_hash_update(Z_ARRVAL_P(return_value), "toplabels", strlen("toplabels")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "toplabels", tmp_arr1); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inTop; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_double(tmp_arr1, values->pasTop[i].x); - add_next_index_double(tmp_arr1, values->pasTop[i].y); -+#else -+ add_next_index_double(&tmp_arr1, values->pasTop[i].x); -+ add_next_index_double(&tmp_arr1, values->pasTop[i].y); -+#endif - - } - -- zend_hash_update(Z_ARRVAL_P(return_value), "toppoints", strlen("toppoints")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "toppoints", tmp_arr1); - - /*BOTTOM*/ - - add_assoc_double(return_value, "bottomnumpoints", values->nBottom); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inBottom; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_string(tmp_arr1, values->papszBottomLabels[i],1); -+#else -+ add_next_index_string(&tmp_arr1, values->papszBottomLabels[i]); -+#endif - } -- zend_hash_update(Z_ARRVAL_P(return_value), "bottomlabels", strlen("bottomlabels")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "bottomlabels", tmp_arr1); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inBottom; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_double(tmp_arr1, values->pasBottom[i].x); - add_next_index_double(tmp_arr1, values->pasBottom[i].y); -+#else -+ add_next_index_double(&tmp_arr1, values->pasBottom[i].x); -+ add_next_index_double(&tmp_arr1, values->pasBottom[i].y); -+#endif - - } - -- zend_hash_update(Z_ARRVAL_P(return_value), "bottompoints", strlen("bottompoints")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "bottompoints", tmp_arr1); - - - /*LEFT*/ - add_assoc_double(return_value, "leftnumpoints", values->nLeft); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inLeft; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_string(tmp_arr1, values->papszLeftLabels[i],1); -+#else -+ add_next_index_string(&tmp_arr1, values->papszLeftLabels[i]); -+#endif - } -- zend_hash_update(Z_ARRVAL_P(return_value), "leftlabels", strlen("leftlabels")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "leftlabels", tmp_arr1); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inLeft; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_double(tmp_arr1, values->pasLeft[i].x); - add_next_index_double(tmp_arr1, values->pasLeft[i].y); -- -+#else -+ add_next_index_double(&tmp_arr1, values->pasLeft[i].x); -+ add_next_index_double(&tmp_arr1, values->pasLeft[i].y); -+#endif - } - -- zend_hash_update(Z_ARRVAL_P(return_value), "leftpoints", strlen("leftpoints")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "leftpoints", tmp_arr1); - - - /*RIGHT*/ - add_assoc_double(return_value, "rightnumpoints", values->nRight); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inRight; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_string(tmp_arr1, values->papszRightLabels[i],1); -+#else -+ add_next_index_string(&tmp_arr1, values->papszRightLabels[i]); -+#endif - } -- zend_hash_update(Z_ARRVAL_P(return_value), "rightlabels", strlen("rightlabels")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "rightlabels", tmp_arr1); - - MAKE_STD_ZVAL(tmp_arr1); -- array_init(tmp_arr1); -+ mapscript_array_init(tmp_arr1); - for (i=0; inRight; i++) { -+#if PHP_VERSION_ID < 70000 - add_next_index_double(tmp_arr1, values->pasRight[i].x); - add_next_index_double(tmp_arr1, values->pasRight[i].y); -- -+#else -+ add_next_index_double(&tmp_arr1, values->pasRight[i].x); -+ add_next_index_double(&tmp_arr1, values->pasRight[i].y); -+#endif - } - -- zend_hash_update(Z_ARRVAL_P(return_value), "rightpoints", strlen("rightpoints")+1, &tmp_arr1, -- sizeof(tmp_arr1), NULL); -+ mapscript_hash_update(Z_ARRVAL_P(return_value), "rightpoints", tmp_arr1); - - msGraticuleLayerFreeIntersectionPoints(values); - } -@@ -2024,8 +2075,8 @@ PHP_METHOD(layerObj, getShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_result = (php_result_object *) zend_object_store_get_object(zresult TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ php_result = MAPSCRIPT_OBJ_P(php_result_object, zresult); - - /* Create a new shapeObj to hold the result - * Note that the type used to create the shape (MS_NULL) does not matter -@@ -2062,13 +2113,13 @@ PHP_METHOD(layerObj, getGeomTransform) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - if (php_layer->layer->_geomtransform.type == MS_GEOMTRANSFORM_NONE || - !php_layer->layer->_geomtransform.string) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETURN_STRING(php_layer->layer->_geomtransform.string, 1); -+ MAPSCRIPT_RETURN_STRING(php_layer->layer->_geomtransform.string, 1); - } - /* }}} */ - -@@ -2089,7 +2140,7 @@ PHP_METHOD(layerObj, setGeomTransform) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - msFree(php_layer->layer->_geomtransform.string); - if (transform_len > 0) { -@@ -2118,10 +2169,10 @@ PHP_METHOD(layerObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - MAPSCRIPT_DELREF(php_layer->offsite); -- if (php_layer->grid && Z_TYPE_P(php_layer->grid) == IS_OBJECT) -+ if (ZVAL_NOT_UNDEF(php_layer->grid) && MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT) - MAPSCRIPT_DELREF(php_layer->grid); - MAPSCRIPT_DELREF(php_layer->metadata); - MAPSCRIPT_DELREF(php_layer->bindvals); -@@ -2195,21 +2246,110 @@ void mapscript_create_layer(layerObj *layer, parent_object parent, zval *return_ - { - php_layer_object * php_layer; - object_init_ex(return_value, mapscript_ce_layer); -- php_layer = (php_layer_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, return_value); - php_layer->layer = layer; - - if (layer->connectiontype != MS_GRATICULE || layer->layerinfo == NULL) { - MAKE_STD_ZVAL(php_layer->grid); -+#if PHP_VERSION_ID < 70000 - ZVAL_NULL(php_layer->grid); -+#else -+ ZVAL_NULL(&php_layer->grid); -+#endif - } - -- if (parent.val) -+ if(ZVAL_NOT_UNDEF(parent.val)) - php_layer->is_ref = 1; - - php_layer->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_layer_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_layer_object *php_layer; -+ -+ php_layer = ecalloc(1, sizeof(*php_layer) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_layer->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_layer->zobj, ce); -+ -+ php_layer->zobj.handlers = &mapscript_layer_object_handlers; -+ -+ php_layer->is_ref = 0; -+ MAPSCRIPT_INIT_PARENT(php_layer->parent); -+ ZVAL_UNDEF(&php_layer->offsite); -+ ZVAL_UNDEF(&php_layer->grid); -+ ZVAL_UNDEF(&php_layer->metadata); -+ ZVAL_UNDEF(&php_layer->bindvals); -+ ZVAL_UNDEF(&php_layer->cluster); -+ ZVAL_UNDEF(&php_layer->projection); -+ ZVAL_UNDEF(&php_layer->extent); -+ -+ return &php_layer->zobj; -+} -+ -+static void mapscript_layer_free_object(zend_object *object) -+{ -+ php_layer_object *php_layer; -+ -+ php_layer = (php_layer_object *)((char *)object - XtOffsetOf(php_layer_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_layer->parent); -+ MAPSCRIPT_DELREF(php_layer->offsite); -+ if (ZVAL_NOT_UNDEF(php_layer->grid) && MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT) -+ MAPSCRIPT_DELREF(php_layer->grid); -+ MAPSCRIPT_DELREF(php_layer->metadata); -+ MAPSCRIPT_DELREF(php_layer->bindvals); -+ MAPSCRIPT_DELREF(php_layer->cluster); -+ MAPSCRIPT_DELREF(php_layer->projection); -+ MAPSCRIPT_DELREF(php_layer->extent); -+ -+ if (php_layer->layer && !php_layer->is_ref) { -+ layerObj_destroy(php_layer->layer); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_layer_clone_object(zval *zobj) -+{ -+ php_layer_object *php_layer_old, *php_layer_new; -+ zend_object* zobj_new; -+ -+ php_layer_old = MAPSCRIPT_OBJ_P(php_layer_object, zobj); -+ -+ zobj_new = mapscript_layer_create_object(mapscript_ce_layer); -+ php_layer_new = (php_layer_object *)((char *)zobj_new - XtOffsetOf(php_layer_object, zobj)); -+ -+ zend_objects_clone_members(&php_layer_new->zobj, &php_layer_old->zobj); -+ -+ php_layer_new->layer = layerObj_clone(php_layer_old->layer); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(layer) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "layerObj", layer_functions); -+ mapscript_ce_layer = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_layer->create_object = mapscript_layer_create_object; -+ mapscript_ce_layer->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_layer_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_layer_object_handlers)); -+ mapscript_layer_object_handlers.free_obj = mapscript_layer_free_object; -+ mapscript_layer_object_handlers.clone_obj = mapscript_layer_clone_object; -+ mapscript_layer_object_handlers.offset = XtOffsetOf(php_layer_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_layer_object_destroy(void *object TSRMLS_DC) - { - php_layer_object *php_layer = (php_layer_object *)object; -@@ -2269,7 +2409,7 @@ static zend_object_value mapscript_layer_object_clone(zval *zobj TSRMLS_DC) - php_layer_object *php_layer_old, *php_layer_new; - zend_object_value new_ov; - -- php_layer_old = (php_layer_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_layer_old = MAPSCRIPT_OBJ_P(php_layer_object, zobj); - - new_ov = mapscript_layer_object_new_ex(mapscript_ce_layer, &php_layer_new TSRMLS_CC); - zend_objects_clone_members(&php_layer_new->std, new_ov, &php_layer_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -2295,4 +2435,4 @@ PHP_MINIT_FUNCTION(layer) - - return SUCCESS; - } -- -+#endif -diff --git a/mapscript/php/legend.c b/mapscript/php/legend.c -index 52258fec5..29e080df7 100644 ---- a/mapscript/php/legend.c -+++ b/mapscript/php/legend.c -@@ -30,6 +30,9 @@ - **********************************************************************/ - - #include "php_mapscript.h" -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_legend_object_handlers; -+#endif - - zend_class_entry *mapscript_ce_legend; - -@@ -69,7 +72,7 @@ PHP_METHOD(legendObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj); - - IF_GET_LONG("height", php_legend->legend->height) - else IF_GET_LONG("width", php_legend->legend->width) -@@ -105,7 +108,7 @@ PHP_METHOD(legendObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj); - - IF_SET_LONG("height", php_legend->legend->height, value) - else IF_SET_LONG("width", php_legend->legend->width, value) -@@ -144,7 +147,7 @@ PHP_METHOD(legendObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj); - - status = legendObj_updateFromString(php_legend->legend, snippet); - -@@ -172,14 +175,14 @@ PHP_METHOD(legendObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj); - - value = legendObj_convertToString(php_legend->legend); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -198,7 +201,7 @@ PHP_METHOD(legendObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_legend = (php_legend_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, zobj); - - MAPSCRIPT_DELREF(php_legend->outlinecolor); - MAPSCRIPT_DELREF(php_legend->imagecolor); -@@ -217,11 +220,67 @@ zend_function_entry legend_functions[] = { - } - }; - -+ -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_legend_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_legend_object *php_legend; -+ -+ php_legend = ecalloc(1, sizeof(*php_legend) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_legend->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_legend->zobj, ce); -+ -+ php_legend->zobj.handlers = &mapscript_legend_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_legend->parent); -+ ZVAL_UNDEF(&php_legend->outlinecolor); -+ ZVAL_UNDEF(&php_legend->imagecolor); -+ ZVAL_UNDEF(&php_legend->label); -+ -+ return &php_legend->zobj; -+} -+ -+static void mapscript_legend_free_object(zend_object *object) -+{ -+ php_legend_object *php_legend; -+ -+ php_legend = (php_legend_object *)((char *)object - XtOffsetOf(php_legend_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_legend->parent); -+ MAPSCRIPT_DELREF(php_legend->outlinecolor); -+ MAPSCRIPT_DELREF(php_legend->imagecolor); -+ MAPSCRIPT_DELREF(php_legend->label); -+ -+ /* We don't need to free the legendObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(legend) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "legendObj", legend_functions); -+ mapscript_ce_legend = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_legend->create_object = mapscript_legend_create_object; -+ mapscript_ce_legend->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_legend_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_legend_object_handlers)); -+ mapscript_legend_object_handlers.free_obj = mapscript_legend_free_object; -+ mapscript_legend_object_handlers.offset = XtOffsetOf(php_legend_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - void mapscript_create_legend(legendObj *legend, parent_object parent, zval *return_value TSRMLS_DC) - { - php_legend_object * php_legend; - object_init_ex(return_value, mapscript_ce_legend); -- php_legend = (php_legend_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, return_value); - php_legend->legend = legend; - - php_legend->parent = parent; -@@ -275,3 +334,4 @@ PHP_MINIT_FUNCTION(legend) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/line.c b/mapscript/php/line.c -index cf73316a2..44aeb583c 100644 ---- a/mapscript/php/line.c -+++ b/mapscript/php/line.c -@@ -87,7 +87,7 @@ PHP_METHOD(lineObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, getThis()); - - if ((php_line->line = lineObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct lineObj." TSRMLS_CC); -@@ -111,7 +111,7 @@ PHP_METHOD(lineObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); - - IF_GET_LONG("numpoints", php_line->line->numpoints) - else { -@@ -158,8 +158,8 @@ PHP_METHOD(lineObj, add) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zobj_point TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj_point); - - status = lineObj_add(php_line->line, php_point->point); - -@@ -185,7 +185,7 @@ PHP_METHOD(lineObj, addXY) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); - - point.x = x; - point.y = y; -@@ -220,7 +220,7 @@ PHP_METHOD(lineObj, addXYZ) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); - - point.x = x; - point.y = y; -@@ -255,9 +255,9 @@ PHP_METHOD(lineObj, project) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC); -- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); -+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in); -+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out); - - status = lineObj_project(php_line->line, php_proj_in->projection, php_proj_out->projection); - if (status != MS_SUCCESS) { -@@ -284,7 +284,7 @@ PHP_METHOD(lineObj, point) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); - - if ( (index < 0) || (index >= php_line->line->numpoints)) { - mapscript_throw_exception("Point '%d' does not exist in this object." TSRMLS_CC, index); -@@ -314,14 +314,14 @@ PHP_METHOD(lineObj, set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_line = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zobj); - - if ( (index < 0) || (index >= php_line->line->numpoints)) { - mapscript_throw_exception("Point '%d' does not exist in this object." TSRMLS_CC, index); - return; - } - -- php_point = (php_point_object *) zend_object_store_get_object(zobj_point TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj_point); - - php_line->line->point[index].x = php_point->point->x; - php_line->line->point[index].y = php_point->point->y; -@@ -350,16 +350,86 @@ void mapscript_create_line(lineObj *line, parent_object parent, zval *return_val - { - php_line_object * php_line; - object_init_ex(return_value, mapscript_ce_line); -- php_line = (php_line_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, return_value); - php_line->line = line; - -- if (parent.val) -+ if (ZVAL_NOT_UNDEF(parent.val)) - php_line->is_ref = 1; - - php_line->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_line_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_line_object *php_line; -+ -+ php_line = ecalloc(1, sizeof(*php_line) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_line->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_line->zobj, ce); -+ -+ php_line->zobj.handlers = &mapscript_line_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_line->parent); -+ php_line->is_ref = 0; -+ -+ return &php_line->zobj; -+} -+ -+static void mapscript_line_free_object(zend_object *object) -+{ -+ php_line_object *php_line; -+ -+ php_line = (php_line_object *)((char *)object - XtOffsetOf(php_line_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_line->parent); -+ -+ if (php_line->line && !php_line->is_ref) { -+ lineObj_destroy(php_line->line); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_line_clone_object(zval *zobj) -+{ -+ php_line_object *php_line_old, *php_line_new; -+ zend_object* zobj_new; -+ -+ php_line_old = MAPSCRIPT_OBJ_P(php_line_object, zobj); -+ -+ zobj_new = mapscript_line_create_object(mapscript_ce_line); -+ php_line_new = (php_line_object *)((char *)zobj_new - XtOffsetOf(php_line_object, zobj)); -+ -+ zend_objects_clone_members(&php_line_new->zobj, &php_line_old->zobj); -+ -+ php_line_new->line = lineObj_clone(php_line_old->line); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(line) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "lineObj", line_functions); -+ mapscript_ce_line = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_line->create_object = mapscript_line_create_object; -+ mapscript_ce_line->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_line_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_line_object_handlers)); -+ mapscript_line_object_handlers.free_obj = mapscript_line_free_object; -+ mapscript_line_object_handlers.clone_obj = mapscript_line_clone_object; -+ mapscript_line_object_handlers.offset = XtOffsetOf(php_line_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_line_object_destroy(void *object TSRMLS_DC) - { - php_line_object *php_line = (php_line_object *)object; -@@ -405,7 +475,7 @@ static zend_object_value mapscript_line_object_clone(zval *zobj TSRMLS_DC) - php_line_object *php_line_old, *php_line_new; - zend_object_value new_ov; - -- php_line_old = (php_line_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_line_old = MAPSCRIPT_OBJ_P(php_line_object, zobj); - - new_ov = mapscript_line_object_new_ex(mapscript_ce_line, &php_line_new TSRMLS_CC); - zend_objects_clone_members(&php_line_new->std, new_ov, &php_line_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -432,3 +502,4 @@ PHP_MINIT_FUNCTION(line) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/map.c b/mapscript/php/map.c -index aa477375a..b8fcfda86 100644 ---- a/mapscript/php/map.c -+++ b/mapscript/php/map.c -@@ -312,9 +312,11 @@ ZEND_BEGIN_ARG_INFO_EX(map_removeLayer_args, 0, 0, 1) - ZEND_ARG_INFO(0, index) - ZEND_END_ARG_INFO() - -+#ifdef disabled - ZEND_BEGIN_ARG_INFO_EX(map_getLabel_args, 0, 0, 1) - ZEND_ARG_INFO(0, index) - ZEND_END_ARG_INFO() -+#endif - - /* {{{ proto void __construct(string mapFileName, newMapPath) - Create a new mapObj instance. */ -@@ -337,7 +339,7 @@ PHP_METHOD(mapObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *)zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - map = mapObj_new(filename, path); - -@@ -365,7 +367,7 @@ PHP_METHOD(mapObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - IF_GET_LONG("numlayers", php_map->map->numlayers) - else IF_GET_STRING("name", php_map->map->name) -@@ -424,7 +426,7 @@ PHP_METHOD(mapObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - IF_SET_STRING("name", php_map->map->name, value) - else IF_SET_LONG("status", php_map->map->status, value) -@@ -487,7 +489,7 @@ PHP_METHOD(mapObj, getSymbolByName) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - symbolId = mapObj_getSymbolByName(php_map->map, symbolName); - -@@ -514,7 +516,7 @@ PHP_METHOD(mapObj, getSymbolObjectById) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if ( symbolId < 0 || symbolId >= php_map->map->symbolset.numsymbols) { - mapscript_throw_exception("Invalid symbol index." TSRMLS_CC); -@@ -543,7 +545,7 @@ PHP_METHOD(mapObj, prepareQuery) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - mapObj_prepareQuery(php_map->map); - } -@@ -564,7 +566,7 @@ PHP_METHOD(mapObj, prepareImage) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - image = mapObj_prepareImage(php_map->map); - if (image == NULL) { -@@ -593,7 +595,7 @@ PHP_METHOD(mapObj, draw) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - image = mapObj_draw(php_map->map); - if (image == NULL) { -@@ -620,7 +622,7 @@ PHP_METHOD(mapObj, drawQuery) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - image = mapObj_drawQuery(php_map->map); - if (image == NULL) { -@@ -647,7 +649,7 @@ PHP_METHOD(mapObj, drawLegend) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - image = mapObj_drawLegend(php_map->map); - if (image == NULL) { -@@ -675,7 +677,7 @@ PHP_METHOD(mapObj, drawReferenceMap) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - image = mapObj_drawReferenceMap(php_map->map); - if (image == NULL) { -@@ -703,7 +705,7 @@ PHP_METHOD(mapObj, drawScaleBar) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - image = mapObj_drawScalebar(php_map->map); - if (image == NULL) { -@@ -734,8 +736,8 @@ PHP_METHOD(mapObj, embedLegend) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - retval = mapObj_embedLegend(php_map->map, php_image->image); - if ( (retval == MS_FAILURE) || (retval == -1) ) { -@@ -766,8 +768,8 @@ PHP_METHOD(mapObj, embedScaleBar) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - retval = mapObj_embedScalebar(php_map->map, php_image->image); - if ( (retval == MS_FAILURE) || (retval == -1) ) { -@@ -798,8 +800,8 @@ PHP_METHOD(mapObj, drawLabelCache) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - retval = mapObj_drawLabelCache(php_map->map, php_image->image); - if ( (retval == MS_FAILURE) || (retval == -1) ) { -@@ -830,7 +832,7 @@ PHP_METHOD(mapObj, getLayer) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - layer = mapObj_getLayer(php_map->map, index); - if (layer == NULL) { -@@ -864,7 +866,7 @@ PHP_METHOD(mapObj, getLayerByName) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - layer = mapObj_getLayerByName(php_map->map, layerName); - if (layer == NULL) { -@@ -898,7 +900,7 @@ PHP_METHOD(mapObj, getColorByIndex) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - palette = php_map->map->palette; - -@@ -934,7 +936,7 @@ PHP_METHOD(mapObj, setExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = msMapSetExtent( php_map->map, - minx, miny, -@@ -967,8 +969,8 @@ PHP_METHOD(mapObj, setCenter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - - status = mapObj_setCenter(php_map->map, php_point->point); - if (status != MS_SUCCESS) { -@@ -996,7 +998,7 @@ PHP_METHOD(mapObj, offsetExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_offsetExtent(php_map->map, x, y); - if (status != MS_SUCCESS) { -@@ -1025,7 +1027,7 @@ PHP_METHOD(mapObj, scaleExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_scaleExtent(php_map->map, zoomFactor, minScaleDenom, maxScaleDenom); - if (status != MS_SUCCESS) { -@@ -1056,7 +1058,7 @@ PHP_METHOD(mapObj, setRotation) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_setRotation(php_map->map, angle); - if (status != MS_SUCCESS) { -@@ -1086,7 +1088,7 @@ PHP_METHOD(mapObj, setSize) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = msMapSetSize(php_map->map, width, height); - if (status != MS_SUCCESS) { -@@ -1126,11 +1128,11 @@ PHP_METHOD(mapObj, zoomPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_pixelPosition = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -- php_geoRefExtent = (php_rect_object *) zend_object_store_get_object(zgeoRefExtent TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_pixelPosition = MAPSCRIPT_OBJ_P(php_point_object, zpoint); -+ php_geoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExtent); - if (zmaxGeoRefExtent) -- php_maxGeoRefExtent = (php_rect_object *) zend_object_store_get_object(zmaxGeoRefExtent TSRMLS_CC); -+ php_maxGeoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zmaxGeoRefExtent); - - /* -------------------------------------------------------------------- */ - /* check the validity of the parameters. */ -@@ -1345,11 +1347,11 @@ PHP_METHOD(mapObj, zoomRectangle) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_pixelExtent = (php_rect_object *) zend_object_store_get_object(zpixelExtent TSRMLS_CC); -- php_geoRefExtent = (php_rect_object *) zend_object_store_get_object(zgeoRefExtent TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_pixelExtent = MAPSCRIPT_OBJ_P(php_rect_object, zpixelExtent); -+ php_geoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExtent); - if (zmaxGeoRefExtent) -- php_maxGeoRefExtent = (php_rect_object *) zend_object_store_get_object(zmaxGeoRefExtent TSRMLS_CC); -+ php_maxGeoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zmaxGeoRefExtent); - - - /* -------------------------------------------------------------------- */ -@@ -1540,11 +1542,11 @@ PHP_METHOD(mapObj, zoomScale) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_pixelPosition = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -- php_geoRefExtent = (php_rect_object *) zend_object_store_get_object(zgeoRefExtent TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_pixelPosition = MAPSCRIPT_OBJ_P(php_point_object, zpoint); -+ php_geoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExtent); - if (zmaxGeoRefExtent) -- php_maxGeoRefExtent = (php_rect_object *) zend_object_store_get_object(zmaxGeoRefExtent TSRMLS_CC); -+ php_maxGeoRefExtent = MAPSCRIPT_OBJ_P(php_rect_object, zmaxGeoRefExtent); - - /* -------------------------------------------------------------------- */ - /* check the validity of the parameters. */ -@@ -1771,8 +1773,8 @@ PHP_METHOD(mapObj, queryByPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - - status = mapObj_queryByPoint(php_map->map, php_point->point, mode, buffer); - if (status != MS_SUCCESS) { -@@ -1800,8 +1802,8 @@ PHP_METHOD(mapObj, queryByRect) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_rect = (php_rect_object *) zend_object_store_get_object(zrect TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zrect); - - status = mapObj_queryByRect(php_map->map, *(php_rect->rect)); - if (status != MS_SUCCESS) { -@@ -1836,8 +1838,8 @@ PHP_METHOD(mapObj, queryByShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - status = mapObj_queryByShape(php_map->map, php_shape->shape); - if (status != MS_SUCCESS) { -@@ -1864,7 +1866,7 @@ PHP_METHOD(mapObj, queryByFeatures) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_queryByFeatures(php_map->map, slayer); - if (status != MS_SUCCESS) { -@@ -1902,7 +1904,7 @@ PHP_METHOD(mapObj, queryByIndex) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_queryByIndex(php_map->map, layerIndex, - tileIndex, -@@ -1933,7 +1935,7 @@ PHP_METHOD(mapObj, queryByFilter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_queryByFilter(php_map->map, string); - if (status != MS_SUCCESS) { -@@ -1963,7 +1965,7 @@ PHP_METHOD(mapObj, saveQuery) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_saveQuery(php_map->map, filename, results); - -@@ -1991,7 +1993,7 @@ PHP_METHOD(mapObj, saveQueryAsGML) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = msGMLWriteQuery(php_map->map, filename, namespace); - -@@ -2017,7 +2019,7 @@ PHP_METHOD(mapObj, loadQuery) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_loadQuery(php_map->map, filename); - -@@ -2042,7 +2044,7 @@ PHP_METHOD(mapObj, freeQuery) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - mapObj_freeQuery(php_map->map, qlayer); - -@@ -2068,7 +2070,7 @@ PHP_METHOD(mapObj, save) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_save(php_map->map, filename); - if (status != MS_SUCCESS) { -@@ -2100,7 +2102,7 @@ PHP_METHOD(mapObj, setProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapscript_map_setProjection(MS_FALSE, php_map, - projection, setUnitsAndExtents TSRMLS_CC); -@@ -2123,14 +2125,14 @@ PHP_METHOD(mapObj, getProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - projection = mapObj_getProjection(php_map->map); - if (projection == NULL) { - RETURN_NULL(); - } - -- RETVAL_STRING(projection, 1); -+ MAPSCRIPT_RETVAL_STRING(projection, 1); - free(projection); - } - /* }}} */ -@@ -2154,7 +2156,7 @@ PHP_METHOD(mapObj, setWKTProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapscript_map_setProjection(MS_TRUE, php_map, - projection, setUnitsAndExtents TSRMLS_CC); -@@ -2169,7 +2171,7 @@ PHP_METHOD(mapObj, getMetaData) - zval *zname; - zval *zobj = getThis(); - php_map_object *php_map; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", -@@ -2179,12 +2181,16 @@ PHP_METHOD(mapObj, getMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata); - - MAPSCRIPT_CALL_METHOD_1(php_map->metadata, "get", retval, zname); - -+#if PHP_VERSION_ID < 70000 - RETURN_STRING(Z_STRVAL_P(retval),1); -+#else -+ RETURN_STRING(Z_STRVAL(retval)); -+#endif - } - /* }}} */ - -@@ -2195,7 +2201,7 @@ PHP_METHOD(mapObj, setMetaData) - zval *zname, *zvalue; - zval *zobj = getThis(); - php_map_object *php_map; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "zz", -@@ -2205,12 +2211,16 @@ PHP_METHOD(mapObj, setMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata); - - MAPSCRIPT_CALL_METHOD_2(php_map->metadata, "set", retval, zname, zvalue); - -+#if PHP_VERSION_ID < 70000 - RETURN_LONG(Z_LVAL_P(retval)); -+#else -+ RETURN_LONG(Z_LVAL(retval)); -+#endif - } - /* }}} */ - -@@ -2221,7 +2231,7 @@ PHP_METHOD(mapObj, removeMetaData) - zval *zname; - zval *zobj = getThis(); - php_map_object *php_map; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - - PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); - if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "z", -@@ -2231,12 +2241,16 @@ PHP_METHOD(mapObj, removeMetaData) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - CHECK_OBJECT(mapscript_ce_hashtable, php_map->metadata, &php_map->map->web.metadata); - - MAPSCRIPT_CALL_METHOD_1(php_map->metadata, "remove", retval, zname); - -+#if PHP_VERSION_ID < 70000 - RETURN_LONG(Z_LVAL_P(retval)); -+#else -+ RETURN_LONG(Z_LVAL(retval)); -+#endif - } - /* }}} */ - -@@ -2260,7 +2274,7 @@ PHP_METHOD(mapObj, getLayersIndexByGroup) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - array_init(return_value); - indexes = mapObj_getLayersIndexByGroup(php_map->map, groupName, &count); -@@ -2290,7 +2304,7 @@ PHP_METHOD(mapObj, getAllGroupNames) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - array_init(return_value); - if (php_map->map->numlayers > 0) { -@@ -2298,7 +2312,11 @@ PHP_METHOD(mapObj, getAllGroupNames) - - for (i=0; imap->numlayers; - for (i=0; imap->layers[i]->name, 1); -+#else -+ add_next_index_string(return_value, php_map->map->layers[i]->name); -+#endif - } - } - /* }}} */ -@@ -2349,7 +2371,7 @@ PHP_METHOD(mapObj, moveLayerUp) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_moveLayerup(php_map->map, index); - -@@ -2374,7 +2396,7 @@ PHP_METHOD(mapObj, moveLayerDown) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_moveLayerdown(php_map->map, index); - -@@ -2400,7 +2422,7 @@ PHP_METHOD(mapObj, getLayersDrawingOrder) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - array_init(return_value); - -@@ -2436,7 +2458,8 @@ PHP_METHOD(mapObj, getLayersDrawingOrder) - PHP_METHOD(mapObj, setLayersDrawingOrder) - { - zval *zobj = getThis(); -- zval *zindexes, **ppzval; -+ zval *zindexes; -+ MAPSCRIPT_ZVAL_P ppzval; - HashTable *indexes_hash = NULL; - int *indexes = NULL; - int numElements = 0; -@@ -2451,7 +2474,7 @@ PHP_METHOD(mapObj, setLayersDrawingOrder) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - indexes_hash = Z_ARRVAL_P(zindexes); - - numElements = zend_hash_num_elements(indexes_hash); -@@ -2468,7 +2491,11 @@ PHP_METHOD(mapObj, setLayersDrawingOrder) - for(zend_hash_internal_pointer_reset(indexes_hash); - zend_hash_has_more_elements(indexes_hash) == SUCCESS; - zend_hash_move_forward(indexes_hash), ++i) { -+#if PHP_VERSION_ID < 70000 - zend_hash_get_current_data(indexes_hash, (void **)&ppzval); -+#else -+ ppzval = zend_hash_get_current_data(indexes_hash); -+#endif - indexes[i] = Z_LVAL_PP(ppzval); - } - -@@ -2506,7 +2533,7 @@ PHP_METHOD(mapObj, processTemplate) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - indexes_hash = Z_ARRVAL_P(zindexes); - - /** -@@ -2534,7 +2561,7 @@ PHP_METHOD(mapObj, processTemplate) - } else { - // Failed for some reason - mapscript_report_php_error(E_WARNING, "processTemplate: failed reading array" TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - efree(papszNameValue); - -@@ -2545,11 +2572,11 @@ PHP_METHOD(mapObj, processTemplate) - msFree(papszValue); - - if (buffer) { -- RETVAL_STRING(buffer, 1); -+ MAPSCRIPT_RETVAL_STRING(buffer, 1); - free(buffer); - } else { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - } - /* }}} */ -@@ -2578,7 +2605,7 @@ PHP_METHOD(mapObj, processQueryTemplate) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - indexes_hash = Z_ARRVAL_P(zindexes); - - /** -@@ -2607,7 +2634,7 @@ PHP_METHOD(mapObj, processQueryTemplate) - } else { - // Failed for some reason - mapscript_report_php_error(E_WARNING, "processQueryTemplate: failed reading array" TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - efree(papszNameValue); - -@@ -2619,11 +2646,11 @@ PHP_METHOD(mapObj, processQueryTemplate) - msFree(papszValue); - - if (buffer) { -- RETVAL_STRING(buffer, 1); -+ MAPSCRIPT_RETVAL_STRING(buffer, 1); - free(buffer); - } else { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - } - /* }}} */ -@@ -2651,7 +2678,7 @@ PHP_METHOD(mapObj, processLegendTemplate) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - indexes_hash = Z_ARRVAL_P(zindexes); - - /** -@@ -2680,7 +2707,7 @@ PHP_METHOD(mapObj, processLegendTemplate) - } else { - // Failed for some reason - mapscript_report_php_error(E_WARNING, "processLegendTemplate: failed reading array" TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - efree(papszNameValue); - -@@ -2692,11 +2719,11 @@ PHP_METHOD(mapObj, processLegendTemplate) - msFree(papszValue); - - if (buffer) { -- RETVAL_STRING(buffer, 1); -+ MAPSCRIPT_RETVAL_STRING(buffer, 1); - free(buffer); - } else { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - } - /* }}} */ -@@ -2718,7 +2745,7 @@ PHP_METHOD(mapObj, setSymbolSet) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if(filename_len > 0) { - if ((status = mapObj_setSymbolSet(php_map->map, -@@ -2748,7 +2775,7 @@ PHP_METHOD(mapObj, getNumSymbols) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - RETURN_LONG(php_map->map->symbolset.numsymbols); - } -@@ -2771,7 +2798,7 @@ PHP_METHOD(mapObj, setFontSet) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if(filename_len > 0) { - if ((status = mapObj_setFontSet(php_map->map, -@@ -2805,9 +2832,9 @@ PHP_METHOD(mapObj, selectOutputFormat) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- if (php_map->outputformat) -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(php_map->outputformat TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ if (ZVAL_NOT_UNDEF(php_map->outputformat)) -+ php_outputformat = MAPSCRIPT_OBJ(php_outputformat_object, php_map->outputformat); - - if ((status = mapObj_selectOutputFormat(php_map->map, - type)) != MS_SUCCESS) -@@ -2815,7 +2842,7 @@ PHP_METHOD(mapObj, selectOutputFormat) - { - mapscript_report_php_error(E_WARNING, "Unable to set output format to '%s'" TSRMLS_CC, - type); -- } else if (php_map->outputformat) { -+ } else if (ZVAL_NOT_UNDEF(php_map->outputformat)) { - php_outputformat->outputformat = php_map->map->outputformat; - } - -@@ -2841,8 +2868,8 @@ PHP_METHOD(mapObj, appendOutputFormat) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zoutputformat TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zoutputformat); - - retval = msAppendOutputFormat(php_map->map, php_outputformat->outputformat); - -@@ -2868,7 +2895,7 @@ PHP_METHOD(mapObj, removeOutputFormat) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if ((status = msRemoveOutputFormat(php_map->map, name)) != MS_SUCCESS) - -@@ -2898,7 +2925,7 @@ PHP_METHOD(mapObj, getOutputFormat) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if (index < 0 || index >= php_map->map->numoutputformats) { - mapscript_throw_mapserver_exception("Invalid outputformat index." TSRMLS_CC); -@@ -2928,7 +2955,7 @@ PHP_METHOD(mapObj, saveMapContext) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if(filename_len > 0) { - if ((status = mapObj_saveMapContext(php_map->map, filename)) != MS_SUCCESS) { -@@ -2961,7 +2988,7 @@ PHP_METHOD(mapObj, loadMapContext) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if(filename_len > 0) { - if ((status = mapObj_loadMapContext(php_map->map, filename, unique)) != MS_SUCCESS) { -@@ -2994,7 +3021,7 @@ PHP_METHOD(mapObj, applySLD) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_applySLD(php_map->map, sldxml); - -@@ -3021,7 +3048,7 @@ PHP_METHOD(mapObj, applySLDURL) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - status = mapObj_applySLDURL(php_map->map, sldurl); - -@@ -3044,16 +3071,16 @@ PHP_METHOD(mapObj, generateSLD) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - buffer = mapObj_generateSLD(php_map->map); - - if (buffer) { -- RETVAL_STRING(buffer, 1); -+ MAPSCRIPT_RETVAL_STRING(buffer, 1); - free(buffer); - } else { - mapscript_report_mapserver_error(E_WARNING TSRMLS_CC); -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - } - /* }}} */ -@@ -3078,12 +3105,12 @@ PHP_METHOD(mapObj, getConfigOption) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if ((value = (char *)msGetConfigOption(php_map->map, key)) == NULL) { -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } else { -- RETURN_STRING(value, 1); -+ MAPSCRIPT_RETURN_STRING(value, 1); - } - } - /* }}} */ -@@ -3107,7 +3134,7 @@ PHP_METHOD(mapObj, setConfigOption) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - msSetConfigOption(php_map->map, key,value); - -@@ -3129,7 +3156,7 @@ PHP_METHOD(mapObj, applyConfigOptions) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - msApplyMapConfigOptions(php_map->map); - RETURN_LONG(MS_SUCCESS); -@@ -3158,8 +3185,8 @@ PHP_METHOD(mapObj, loadOwsParameters) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_request = (php_owsrequest_object *) zend_object_store_get_object(zrequest TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_request = MAPSCRIPT_OBJ_P(php_owsrequest_object, zrequest); - - if (!version) { - version = strdup("1.1.1"); -@@ -3193,8 +3220,8 @@ PHP_METHOD(mapObj, owsDispatch) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_request = (php_owsrequest_object *) zend_object_store_get_object(zrequest TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_request = MAPSCRIPT_OBJ_P(php_owsrequest_object, zrequest); - - status = mapObj_OWSDispatch(php_map->map, php_request->cgirequest); - -@@ -3221,8 +3248,8 @@ PHP_METHOD(mapObj, insertLayer) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - - - if ((retval = mapObj_insertLayer(php_map->map, php_layer->layer, index)) < 0) { -@@ -3254,7 +3281,7 @@ PHP_METHOD(mapObj, removeLayer) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - if ((layer = mapObj_removeLayer(php_map->map, index)) == NULL) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -3287,7 +3314,7 @@ PHP_METHOD(mapObj, getLabel) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - labelCacheMember=mapObj_getLabel(php_map->map, index); - -@@ -3316,14 +3343,14 @@ PHP_METHOD(mapObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - value = mapObj_convertToString(php_map->map); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -3352,7 +3379,7 @@ PHP_METHOD(mapObj, getLatLongExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - geoRefExt.minx = php_map->map->extent.minx; - geoRefExt.miny = php_map->map->extent.miny; -@@ -3389,7 +3416,7 @@ PHP_METHOD(mapObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - MAPSCRIPT_DELREF(php_map->outputformat); - MAPSCRIPT_DELREF(php_map->extent); -@@ -3505,10 +3532,10 @@ static int mapscript_map_setProjection(int isWKTProj, php_map_object *php_map, - php_projection_object *php_projection = NULL; - php_rect_object *php_extent = NULL; - -- if (php_map->projection) -- php_projection = (php_projection_object *) zend_object_store_get_object(php_map->projection TSRMLS_CC); -- if (php_map->extent) -- php_extent = (php_rect_object *) zend_object_store_get_object(php_map->extent TSRMLS_CC); -+ if (ZVAL_NOT_UNDEF(php_map->projection)) -+ php_projection = MAPSCRIPT_OBJ(php_projection_object, php_map->projection); -+ if (ZVAL_NOT_UNDEF(php_map->extent)) -+ php_extent = MAPSCRIPT_OBJ(php_rect_object, php_map->extent); - - in = php_map->map->projection; - msInitProjection(&out); -@@ -3535,7 +3562,7 @@ static int mapscript_map_setProjection(int isWKTProj, php_map_object *php_map, - if (status == -1) { - mapscript_report_php_error(E_WARNING, "setProjection failed" TSRMLS_CC); - return MS_FAILURE; -- } else if (php_map->projection) { -+ } else if (ZVAL_NOT_UNDEF(php_map->projection)) { - php_projection->projection = &(php_map->map->projection); - } - -@@ -3554,7 +3581,7 @@ static int mapscript_map_setProjection(int isWKTProj, php_map_object *php_map, - msCalculateScale(php_map->map->extent, php_map->map->units, php_map->map->width, php_map->map->height, - php_map->map->resolution, &(php_map->map->scaledenom)); - -- if (php_map->extent) -+ if (ZVAL_NOT_UNDEF(php_map->extent)) - php_extent->rect = &(php_map->map->extent); - } - } -@@ -3570,10 +3597,103 @@ void mapscript_create_map(mapObj *map, zval *return_value TSRMLS_DC) - { - php_map_object * php_map; - object_init_ex(return_value, mapscript_ce_map); -- php_map = (php_map_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, return_value); - php_map->map = map; - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_map_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_map_object *php_map; -+ -+ php_map = ecalloc(1, sizeof(*php_map) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_map->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_map->zobj, ce); -+ -+ php_map->zobj.handlers = &mapscript_map_object_handlers; -+ -+ ZVAL_UNDEF(&php_map->outputformat); -+ ZVAL_UNDEF(&php_map->extent); -+ ZVAL_UNDEF(&php_map->web); -+ ZVAL_UNDEF(&php_map->reference); -+ ZVAL_UNDEF(&php_map->imagecolor); -+ ZVAL_UNDEF(&php_map->scalebar); -+ ZVAL_UNDEF(&php_map->legend); -+ ZVAL_UNDEF(&php_map->querymap); -+#ifdef disabled -+ ZVAL_UNDEF(&php_map->labelcache); -+#endif -+ ZVAL_UNDEF(&php_map->projection); -+ ZVAL_UNDEF(&php_map->metadata); -+ ZVAL_UNDEF(&php_map->configoptions); -+ -+ return &php_map->zobj; -+} -+ -+static void mapscript_map_free_object(zend_object *object) -+{ -+ php_map_object *php_map; -+ -+ php_map = (php_map_object *)((char *)object - XtOffsetOf(php_map_object, zobj)); -+ -+ MAPSCRIPT_DELREF(php_map->outputformat); -+ MAPSCRIPT_DELREF(php_map->extent); -+ MAPSCRIPT_DELREF(php_map->web); -+ MAPSCRIPT_DELREF(php_map->reference); -+ MAPSCRIPT_DELREF(php_map->imagecolor); -+ MAPSCRIPT_DELREF(php_map->scalebar); -+ MAPSCRIPT_DELREF(php_map->legend); -+ MAPSCRIPT_DELREF(php_map->querymap); -+#ifdef disabled -+ MAPSCRIPT_DELREF(php_map->labelcache); -+#endif -+ MAPSCRIPT_DELREF(php_map->projection); -+ MAPSCRIPT_DELREF(php_map->metadata); -+ MAPSCRIPT_DELREF(php_map->configoptions); -+ -+ mapObj_destroy(php_map->map); -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_map_clone_object(zval *zobj) -+{ -+ php_map_object *php_map_old, *php_map_new; -+ zend_object* zobj_new; -+ -+ php_map_old = MAPSCRIPT_OBJ_P(php_map_object, zobj); -+ -+ zobj_new = mapscript_map_create_object(mapscript_ce_map); -+ php_map_new = (php_map_object *)((char *)zobj_new - XtOffsetOf(php_map_object, zobj)); -+ -+ zend_objects_clone_members(&php_map_new->zobj, &php_map_old->zobj); -+ -+ php_map_new->map = mapObj_clone(php_map_old->map); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(map) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "mapObj", map_functions); -+ mapscript_ce_map = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_map->create_object = mapscript_map_create_object; -+ mapscript_ce_map->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_map_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_map_object_handlers)); -+ mapscript_map_object_handlers.free_obj = mapscript_map_free_object; -+ mapscript_map_object_handlers.clone_obj = mapscript_map_clone_object; -+ mapscript_map_object_handlers.offset = XtOffsetOf(php_map_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_map_object_destroy(void *object TSRMLS_DC) - { - php_map_object *php_map = (php_map_object *)object; -@@ -3641,7 +3761,7 @@ static zend_object_value mapscript_map_object_clone(zval *zobj TSRMLS_DC) - php_map_object *php_map_old, *php_map_new; - zend_object_value new_ov; - -- php_map_old = (php_map_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_map_old = MAPSCRIPT_OBJ_P(php_map_object, zobj); - - new_ov = mapscript_map_object_new_ex(mapscript_ce_map, &php_map_new TSRMLS_CC); - zend_objects_clone_members(&php_map_new->std, new_ov, &php_map_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -3667,4 +3787,4 @@ PHP_MINIT_FUNCTION(map) - - return SUCCESS; - } -- -+#endif -diff --git a/mapscript/php/mapscript_error.c b/mapscript/php/mapscript_error.c -index e2bef8ae5..dccf066d6 100644 ---- a/mapscript/php/mapscript_error.c -+++ b/mapscript/php/mapscript_error.c -@@ -39,7 +39,11 @@ - - zend_class_entry *mapscript_ce_mapscriptexception; - -+#if PHP_VERSION_ID >= 70000 -+zend_object* mapscript_throw_exception(char *format TSRMLS_DC, ...) -+#else - zval* mapscript_throw_exception(char *format TSRMLS_DC, ...) -+#endif - { - va_list args; - char message[MAX_EXCEPTION_MSG]; -@@ -53,7 +57,11 @@ zval* mapscript_throw_exception(char *format TSRMLS_DC, ...) - return zend_throw_exception(mapscript_ce_mapscriptexception, message, 0 TSRMLS_CC); - } - -+#if PHP_VERSION_ID >= 70000 -+zend_object* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...) -+#else - zval* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...) -+#endif - { - va_list args; - char message[MAX_EXCEPTION_MSG]; -@@ -111,7 +119,12 @@ PHP_MINIT_FUNCTION(mapscript_error) - zend_class_entry ce; - - INIT_CLASS_ENTRY(ce, "MapScriptException", NULL); -+ -+#if PHP_VERSION_ID >= 70000 -+ mapscript_ce_mapscriptexception = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C)); -+#else - mapscript_ce_mapscriptexception = zend_register_internal_class_ex(&ce, zend_exception_get_default(TSRMLS_C), "Exception" TSRMLS_CC); -+#endif - - return SUCCESS; - } -diff --git a/mapscript/php/outputformat.c b/mapscript/php/outputformat.c -index a6dca9435..887a2de07 100644 ---- a/mapscript/php/outputformat.c -+++ b/mapscript/php/outputformat.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_outputformat; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_outputformat_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(outputformat___construct_args, 0, 0, 1) - ZEND_ARG_INFO(0, driver) -@@ -79,7 +82,7 @@ PHP_METHOD(outputFormatObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *)zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - if ((php_outputformat->outputformat = outputFormatObj_new(driver, name)) == NULL) { - mapscript_throw_exception("Unable to construct outputFormatObj." TSRMLS_CC); -@@ -103,7 +106,7 @@ PHP_METHOD(outputFormatObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - - IF_GET_STRING("name", php_outputformat->outputformat->name) -@@ -136,7 +139,7 @@ PHP_METHOD(outputFormatObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - IF_SET_STRING("name", php_outputformat->outputformat->name, value) - else IF_SET_STRING("mimetype", php_outputformat->outputformat->mimetype, value) -@@ -174,7 +177,7 @@ PHP_METHOD(outputFormatObj, setOption) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - msSetOutputFormatOption(php_outputformat->outputformat, property, value); - -@@ -201,11 +204,11 @@ PHP_METHOD(outputFormatObj, getOption) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - value = msGetOutputFormatOption(php_outputformat->outputformat, property, ""); - -- RETURN_STRING((char*)value,1); -+ MAPSCRIPT_RETURN_STRING((char*)value,1); - } - /* }}} */ - -@@ -226,7 +229,7 @@ PHP_METHOD(outputFormatObj, validate) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - status = msOutputFormatValidate(php_outputformat->outputformat, MS_TRUE); - if (status != MS_TRUE) { -@@ -253,19 +256,19 @@ PHP_METHOD(outputFormatObj, getOptionByIndex) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_outputformat = (php_outputformat_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zobj); - - if (index < 0 || index >= php_outputformat->outputformat->numformatoptions) { - mapscript_throw_mapserver_exception("Invalid format option index." TSRMLS_CC); - return; - } - -- RETURN_STRING(php_outputformat->outputformat->formatoptions[index],1); -+ MAPSCRIPT_RETURN_STRING(php_outputformat->outputformat->formatoptions[index],1); - } - /* }}} */ - - zend_function_entry outputformat_functions[] = { -- PHP_ME(outputFormatObj, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) -+ PHP_ME(outputFormatObj, __construct, outputformat___construct_args, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) - PHP_ME(outputFormatObj, __get, outputformat___get_args, ZEND_ACC_PUBLIC) - PHP_ME(outputFormatObj, __set, outputformat___set_args, ZEND_ACC_PUBLIC) - PHP_MALIAS(outputFormatObj, set, __set, NULL, ZEND_ACC_PUBLIC) -@@ -281,16 +284,69 @@ void mapscript_create_outputformat(outputFormatObj *outputformat, parent_object - { - php_outputformat_object * php_outputformat; - object_init_ex(return_value, mapscript_ce_outputformat); -- php_outputformat = (php_outputformat_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, return_value); - php_outputformat->outputformat = outputformat; - -- if (parent.val) -+ if(ZVAL_NOT_UNDEF(parent.val)) - php_outputformat->is_ref = 1; - - php_outputformat->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_outputformat_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_outputformat_object *php_outputformat; -+ -+ php_outputformat = ecalloc(1, sizeof(*php_outputformat) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_outputformat->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_outputformat->zobj, ce); -+ -+ php_outputformat->zobj.handlers = &mapscript_outputformat_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_outputformat->parent); -+ php_outputformat->is_ref = 0; -+ -+ return &php_outputformat->zobj; -+} -+ -+static void mapscript_outputformat_free_object(zend_object *object) -+{ -+ php_outputformat_object *php_outputformat; -+ -+ php_outputformat = (php_outputformat_object *)((char *)object - XtOffsetOf(php_outputformat_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_outputformat->parent); -+ -+ if (php_outputformat->outputformat && !php_outputformat->is_ref) { -+ outputFormatObj_destroy(php_outputformat->outputformat); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(outputformat) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "outputFormatObj", outputformat_functions); -+ mapscript_ce_outputformat = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_outputformat->create_object = mapscript_outputformat_create_object; -+ mapscript_ce_outputformat->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_outputformat_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_outputformat_object_handlers)); -+ mapscript_outputformat_object_handlers.free_obj = mapscript_outputformat_free_object; -+ mapscript_outputformat_object_handlers.offset = XtOffsetOf(php_outputformat_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ -+ - static void mapscript_outputformat_object_destroy(void *object TSRMLS_DC) - { - php_outputformat_object *php_outputformat = (php_outputformat_object *)object; -@@ -335,3 +391,4 @@ PHP_MINIT_FUNCTION(outputformat) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/owsrequest.c b/mapscript/php/owsrequest.c -index 11d999609..ce4a05362 100644 ---- a/mapscript/php/owsrequest.c -+++ b/mapscript/php/owsrequest.c -@@ -39,6 +39,9 @@ - char *owsrequest_getenv(const char *name, void *thread_context); - - zend_class_entry *mapscript_ce_owsrequest; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_owsrequest_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(owsrequest___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -86,7 +89,7 @@ PHP_METHOD(OWSRequestObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - if ((request = cgirequestObj_new()) == NULL) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -112,7 +115,7 @@ PHP_METHOD(OWSRequestObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - - IF_GET_LONG("numparams", php_owsrequest->cgirequest->NumParams) -@@ -157,24 +160,24 @@ PHP_METHOD(OWSRequestObj, __set) - PHP_METHOD(OWSRequestObj, loadParams) - { - zval *zobj = getThis(); -- zval **val; -+ MAPSCRIPT_ZVAL_P val; - php_owsrequest_object *php_owsrequest; - void *thread_context; - -+ PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); -+ if (zend_parse_parameters_none() == FAILURE) { -+ PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); -+ return; -+ } -+ PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); -+ - #ifdef ZTS - thread_context = (void*)TSRMLS_C; - #else - thread_context = NULL; - #endif - -- //PHP_MAPSCRIPT_ERROR_HANDLING(TRUE); -- if (zend_parse_parameters_none() == FAILURE) { -- //PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); -- return; -- } -- //PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); -- -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - if ( (STRING_EQUAL(sapi_module.name,"cli")) || - (STRING_EQUAL(sapi_module.name,"cgi")) || -@@ -184,6 +187,15 @@ PHP_METHOD(OWSRequestObj, loadParams) - // check if we have input data for GET method - if (SG(request_info).request_method && - STRING_EQUAL(SG(request_info).request_method, "GET")) { -+#if PHP_VERSION_ID >= 70000 -+ zend_is_auto_global_str("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC); -+ if ( !Z_ISUNDEF(PG(http_globals)[TRACK_VARS_SERVER]) && -+ ((val = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), "QUERY_STRING", sizeof("QUERY_STRING")-1)) != NULL) && -+ (Z_TYPE_P(val) == IS_STRING) && -+ (Z_STRLEN_P(val) > 0) ) { -+ cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, NULL, 0, thread_context); -+ } -+#else - zend_is_auto_global("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC); - if ( PG(http_globals)[TRACK_VARS_SERVER] && - (zend_hash_find(PG(http_globals)[TRACK_VARS_SERVER]->value.ht, "QUERY_STRING", sizeof("QUERY_STRING"), (void **) &val) == SUCCESS) && -@@ -191,24 +203,40 @@ PHP_METHOD(OWSRequestObj, loadParams) - (Z_STRLEN_PP(val) > 0) ) { - cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, NULL, 0, thread_context); - } -+#endif - } else { - #if PHP_VERSION_ID >= 50600 - php_stream *s = php_stream_temp_new(); - php_stream *input = php_stream_open_wrapper("php://input", "r", 0, NULL); -+#if PHP_VERSION_ID >= 70000 -+ zend_string *raw_post_data = NULL; -+#else - char *raw_post_data = NULL; - long raw_post_data_length = 0; -+#endif - - /* php://input does not support stat */ - php_stream_copy_to_stream_ex(input, s, -1, NULL); - php_stream_close(input); - - php_stream_rewind(s); -+ - -- raw_post_data_length = php_stream_copy_to_mem(s, raw_post_data, -1, 0); -+#if PHP_VERSION_ID >= 70000 -+ raw_post_data = php_stream_copy_to_mem(s, -1, 0); -+ -+ cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, -+ ZSTR_VAL(raw_post_data), -+ ZSTR_LEN(raw_post_data), thread_context); -+ -+ if(raw_post_data) zend_string_free(raw_post_data); -+#else -+ raw_post_data_length = php_stream_copy_to_mem(s, raw_post_data, -1, 0); - - cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, - raw_post_data, - raw_post_data_length, thread_context); -+#endif - #else - cgirequestObj_loadParams(php_owsrequest->cgirequest, owsrequest_getenv, - SG(request_info).raw_post_data, -@@ -240,7 +268,7 @@ PHP_METHOD(OWSRequestObj, setParameter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - cgirequestObj_setParameter(php_owsrequest->cgirequest, name, value); - -@@ -267,7 +295,7 @@ PHP_METHOD(OWSRequestObj, addParameter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - cgirequestObj_addParameter(php_owsrequest->cgirequest, name, value); - -@@ -276,7 +304,7 @@ PHP_METHOD(OWSRequestObj, addParameter) - /* }}} */ - - /* {{{ proto string owsrequest.getName(int index) -- Return the name of the parameter at index in the request’s array of parameter names. */ -+ Return the name of the parameter at index in the request's array of parameter names. */ - PHP_METHOD(OWSRequestObj, getName) - { - long index; -@@ -292,13 +320,13 @@ PHP_METHOD(OWSRequestObj, getName) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - value = cgirequestObj_getName(php_owsrequest->cgirequest, index); - if (!value) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETURN_STRING(value,1); -+ MAPSCRIPT_RETURN_STRING(value,1); - } - /* }}} */ - -@@ -319,13 +347,13 @@ PHP_METHOD(OWSRequestObj, getValue) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - value = cgirequestObj_getValue(php_owsrequest->cgirequest, index); - if (!value) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETURN_STRING(value,1); -+ MAPSCRIPT_RETURN_STRING(value,1); - } - /* }}} */ - -@@ -347,13 +375,13 @@ PHP_METHOD(OWSRequestObj, getValueByName) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_owsrequest = (php_owsrequest_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, zobj); - - value = cgirequestObj_getValueByName(php_owsrequest->cgirequest, name); - if (!value) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETURN_STRING(value,1); -+ MAPSCRIPT_RETURN_STRING(value,1); - } - /* }}} */ - -@@ -371,6 +399,7 @@ zend_function_entry owsrequest_functions[] = { - } - }; - -+#if PHP_VERSION_ID < 70000 - char *owsrequest_getenv(const char *name, void *thread_context) - { - zval **val, **ppzval; -@@ -410,15 +439,108 @@ char *owsrequest_getenv(const char *name, void *thread_context) - - return NULL; - } -+#else -+/* PHP7 - Modification by Bjoern Boldt */ -+char *owsrequest_getenv(const char *name, void *thread_context) -+{ -+ zval *val, *ppzval; -+ zval cookie_result; -+ HashTable *cookies; -+ zend_string *string_key; -+ zend_string *result = NULL; -+ zend_ulong num_key; -+ size_t len, sum = 0; -+ int i = 0; -+ TSRMLS_FETCH_FROM_CTX(thread_context); -+ -+ if (STRING_EQUAL(name, "HTTP_COOKIE")) { -+ cookies = Z_ARRVAL(PG(http_globals)[TRACK_VARS_COOKIE]); -+ for(zend_hash_internal_pointer_reset(cookies); -+ zend_hash_has_more_elements(cookies) == SUCCESS; -+ zend_hash_move_forward(cookies), ++i) { -+ ppzval = zend_hash_get_current_data(cookies); -+ zend_hash_get_current_key(cookies, &string_key, &num_key); -+ len = (ZSTR_LEN(string_key)+Z_STRLEN_P(ppzval)+2) * sizeof(char); -+ if(!result) -+ result = zend_string_alloc(len, 1); -+ else -+ result = zend_string_extend(result, sum + len, 1); -+ sprintf(&result->val[sum], "%s=%s;",ZSTR_VAL(string_key),Z_STRVAL_P(ppzval)); -+ sum += len; -+ } -+ if (result){ -+ ZVAL_STRINGL(&cookie_result, ZSTR_VAL(result), ZSTR_LEN(result)); -+ zend_string_free(result); -+ return Z_STRVAL(cookie_result); /* this string will stay in memory until php-script exit */ -+ } -+ else -+ return ""; -+ } else { -+ zend_is_auto_global_str("_SERVER", sizeof("_SERVER")-1 TSRMLS_CC); -+ if ( (!Z_ISUNDEF(PG(http_globals)[TRACK_VARS_SERVER])) && -+ ((val = zend_hash_str_find(Z_ARRVAL(PG(http_globals)[TRACK_VARS_SERVER]), name, strlen(name))) != NULL) && -+ (Z_TYPE_P(val) == IS_STRING)) { -+ return Z_STRVAL_P(val); -+ } -+ } -+ -+ return NULL; -+} -+#endif - - void mapscript_create_owsrequest(cgiRequestObj *cgirequest, zval *return_value TSRMLS_DC) - { - php_owsrequest_object * php_owsrequest; - object_init_ex(return_value, mapscript_ce_owsrequest); -- php_owsrequest = (php_owsrequest_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_owsrequest = MAPSCRIPT_OBJ_P(php_owsrequest_object, return_value); - php_owsrequest->cgirequest = cgirequest; - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_owsrequest_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_owsrequest_object *php_owsrequest; -+ -+ php_owsrequest = ecalloc(1, sizeof(*php_owsrequest) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_owsrequest->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_owsrequest->zobj, ce); -+ -+ php_owsrequest->zobj.handlers = &mapscript_owsrequest_object_handlers; -+ -+ return &php_owsrequest->zobj; -+} -+ -+static void mapscript_owsrequest_free_object(zend_object *object) -+{ -+ php_owsrequest_object *php_owsrequest; -+ -+ php_owsrequest = (php_owsrequest_object *)((char *)object - XtOffsetOf(php_owsrequest_object, zobj)); -+ -+ cgirequestObj_destroy(php_owsrequest->cgirequest); -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(owsrequest) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "OWSRequestObj", owsrequest_functions); -+ mapscript_ce_owsrequest = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_owsrequest->create_object = mapscript_owsrequest_create_object; -+ mapscript_ce_owsrequest->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_owsrequest_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_owsrequest_object_handlers)); -+ mapscript_owsrequest_object_handlers.free_obj = mapscript_owsrequest_free_object; -+ mapscript_owsrequest_object_handlers.offset = XtOffsetOf(php_owsrequest_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_owsrequest_object_destroy(void *object TSRMLS_DC) - { - php_owsrequest_object *php_owsrequest = (php_owsrequest_object *)object; -@@ -455,4 +577,4 @@ PHP_MINIT_FUNCTION(owsrequest) - - return SUCCESS; - } -- -+#endif -diff --git a/mapscript/php/php_mapscript.c b/mapscript/php/php_mapscript.c -index 5ef38461f..37aa1ddea 100644 ---- a/mapscript/php/php_mapscript.c -+++ b/mapscript/php/php_mapscript.c -@@ -197,9 +197,9 @@ PHP_FUNCTION(ms_newLayerObj) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); - if (zlayer) -- php_layer = (php_layer_object *)zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - - if ((layer = layerObj_new(php_map->map)) == NULL) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -260,7 +260,7 @@ PHP_FUNCTION(ms_newRectObj) - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - - object_init_ex(return_value, mapscript_ce_rect); -- php_rect = (php_rect_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, return_value); - - if ((php_rect->rect = rectObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct rectObj." TSRMLS_CC); -@@ -314,7 +314,7 @@ PHP_FUNCTION(ms_newLineObj) - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - - object_init_ex(return_value, mapscript_ce_line); -- php_line = (php_line_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, return_value); - - if ((php_line->line = lineObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct lineObj." TSRMLS_CC); -@@ -342,9 +342,9 @@ PHP_FUNCTION(ms_newStyleObj) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_class = (php_class_object *)zend_object_store_get_object(zclass TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zclass); - if (zstyle) -- php_style = (php_style_object *)zend_object_store_get_object(zstyle TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zstyle); - - if ((style = styleObj_new(php_class->class, (zstyle ? php_style->style : NULL))) == NULL) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -375,9 +375,9 @@ PHP_FUNCTION(ms_newClassObj) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - if (zclass) -- php_class = (php_class_object *) zend_object_store_get_object(zclass TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zclass); - - - if ((class = classObj_new(php_layer->layer, (zclass ? php_class->class:NULL))) == NULL) { -@@ -409,7 +409,7 @@ PHP_FUNCTION(ms_newSymbolObj) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); - - retval = msAddNewSymbol(php_map->map, symbolName); - -@@ -433,7 +433,7 @@ PHP_FUNCTION(ms_newShapeObj) - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - - object_init_ex(return_value, mapscript_ce_shape); -- php_shape = (php_shape_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, return_value); - - if ((php_shape->shape = shapeObj_new(type)) == NULL) { - mapscript_throw_exception("Unable to construct shapeObj." TSRMLS_CC); -@@ -441,7 +441,7 @@ PHP_FUNCTION(ms_newShapeObj) - } - - MAKE_STD_ZVAL(php_shape->values); -- array_init(php_shape->values); -+ mapscript_array_init(php_shape->values); - } - /* }}} */ - -@@ -462,7 +462,7 @@ PHP_FUNCTION(ms_shapeObjFromWkt) - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - - object_init_ex(return_value, mapscript_ce_shape); -- php_shape = (php_shape_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, return_value); - - if ((php_shape->shape = msShapeFromWKT(wkt)) == NULL) { - mapscript_throw_exception("Unable to construct shapeObj." TSRMLS_CC); -@@ -470,7 +470,7 @@ PHP_FUNCTION(ms_shapeObjFromWkt) - } - - MAKE_STD_ZVAL(php_shape->values); -- array_init(php_shape->values); -+ mapscript_array_init(php_shape->values); - } - /* }}} */ - -@@ -538,7 +538,7 @@ PHP_FUNCTION(ms_newGridObj) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - - php_layer->layer->connectiontype = MS_GRATICULE; - -@@ -550,19 +550,29 @@ PHP_FUNCTION(ms_newGridObj) - php_layer->layer->grid = (graticuleObj *)malloc( sizeof( graticuleObj ) ); - initGrid(php_layer->layer->grid); - -- if (php_layer->grid && (Z_TYPE_P(php_layer->grid) == IS_OBJECT)) { -- php_grid = (php_grid_object *) zend_object_store_get_object(php_layer->grid TSRMLS_CC); -+ if (ZVAL_NOT_UNDEF(php_layer->grid) && (MAPSCRIPT_TYPE(php_layer->grid) == IS_OBJECT)) { -+ php_grid = MAPSCRIPT_OBJ(php_grid_object, php_layer->grid); - php_grid->parent.child_ptr = NULL; -+#if PHP_VERSION_ID < 70000 - zend_objects_store_del_ref(php_layer->grid TSRMLS_CC); -+#else -+ MAPSCRIPT_DELREF(php_layer->grid); -+#endif - } - - MAKE_STD_ZVAL(php_layer->grid); - - MAPSCRIPT_MAKE_PARENT(zlayer, &php_layer->grid); -+#if PHP_VERSION_ID < 70000 - mapscript_create_grid((graticuleObj *)(php_layer->layer->grid), parent, php_layer->grid TSRMLS_CC); - zend_objects_store_add_ref(php_layer->grid TSRMLS_CC); - - *return_value = *(php_layer->grid); -+#else -+ mapscript_create_grid((graticuleObj *)(php_layer->layer->grid), parent, &php_layer->grid TSRMLS_CC); -+ -+ ZVAL_COPY_VALUE(return_value, &php_layer->grid); -+#endif - } - /* }}} */ - -@@ -616,7 +626,7 @@ PHP_FUNCTION(ms_GetVersion) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- RETURN_STRING(msGetVersion(), 1); -+ MAPSCRIPT_RETURN_STRING(msGetVersion(), 1); - } - - /************************************************************************/ -@@ -685,7 +695,7 @@ PHP_FUNCTION(ms_ioGetStdoutBufferString) - - buffer = (char *) (buf->data); - -- RETURN_STRINGL(buffer, buf->data_offset, 1); -+ MAPSCRIPT_RETURN_STRINGL(buffer, buf->data_offset, 1); - } - - -@@ -732,12 +742,35 @@ PHP_FUNCTION(ms_ioStripStdoutBufferContentType) - buf = msIO_stripStdoutBufferContentType(); - - if (buf) { -- RETURN_STRING((char *)buf, 1); -+ MAPSCRIPT_RETURN_STRING((char *)buf, 1); - } else { - RETURN_FALSE; - } - } - -+PHP_FUNCTION(ms_ioGetAndStripStdoutBufferMimeHeaders) -+{ -+ hashTableObj *hashtable; -+ char *value, *key = NULL; -+ -+ if((hashtable = msIO_getAndStripStdoutBufferMimeHeaders())) { -+ -+ array_init(return_value); -+ -+ while((key = hashTableObj_nextKey(hashtable, key))) { -+ value = (char *) hashTableObj_get(hashtable, key); -+#if PHP_VERSION_ID < 70000 -+ add_assoc_string(return_value, key, value, 1); -+#else -+ add_assoc_string(return_value, key, value); -+#endif -+ } -+ free(hashtable); -+ } -+ else -+ RETURN_FALSE; -+} -+ - PHP_FUNCTION(ms_ioStripStdoutBufferContentHeaders) - { - msIO_stripStdoutBufferContentHeaders(); -@@ -783,7 +816,7 @@ PHP_FUNCTION(ms_getCwd) - RETURN_FALSE; - } - -- RETURN_STRING(buffer, 1); -+ MAPSCRIPT_RETURN_STRING(buffer, 1); - } - - PHP_FUNCTION(ms_getPid) -@@ -824,7 +857,7 @@ PHP_FUNCTION(ms_getScale) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_geoRefExt = (php_rect_object *)zend_object_store_get_object(zgeoRefExt TSRMLS_CC); -+ php_geoRefExt = MAPSCRIPT_OBJ_P(php_rect_object, zgeoRefExt); - - if (msCalculateScale(*(php_geoRefExt->rect), unit, width, height, resolution, &dfScale) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -870,7 +903,11 @@ PHP_FUNCTION(ms_tokenizeMap) - } - - for (i=0; i= 70000 -+#define MAPSCRIPT_ZVAL zval -+#define MAPSCRIPT_ZVAL_P zval* -+ -+#define Z_DVAL_PP(zv) Z_DVAL_P(zv) -+#define Z_LVAL_PP(zv) Z_LVAL_P(zv) -+#define Z_STRVAL_PP(zv) Z_STRVAL_P(zv) -+ -+#define MAPSCRIPT_OBJ_P(t, o) (t *)((char *)(Z_OBJ_P(o)) - XtOffsetOf(t, zobj)) -+#define MAPSCRIPT_OBJ(t, o) (t *)((char *)(Z_OBJ(o)) - XtOffsetOf(t, zobj)) -+#define MAPSCRIPT_RETURN_STRINGL(a, b, c) RETURN_STRINGL(a, b) -+#define MAPSCRIPT_RETURN_STRING(a, b) RETURN_STRING(a) -+#define MAPSCRIPT_RETVAL_STRING(a, b) RETVAL_STRING(a) -+#define MAPSCRIPT_RETURN_STRINGL(a, b, c) RETURN_STRINGL(a, b) -+#define MAPSCRIPT_ZVAL_STRING(a, b, c) ZVAL_STRING(a, b) -+ -+#define mapscript_is_auto_global(s, l) zend_is_auto_global_str(s, l) -+#define mapscript_array_init(zv) array_init(&zv) -+#define mapscript_add_next_index_string(a, b, c) add_next_index_string(a, b) -+#define mapscript_add_assoc_string(zv, b, c, d) add_assoc_string(&zv, b, c) -+#define mapscript_hash_get_current_key(a, b, c, d) zend_hash_get_current_key(a, b, c) -+#define mapscript_hash_update(ht, keyname, data) \ -+ zend_hash_str_update(ht, keyname, strlen(keyname)+1, &data); -+ -+#define MAPSCRIPT_TYPE(zv) Z_TYPE(zv) -+#define MAPSCRIPT_OBJCE(zv) Z_OBJCE(zv) -+#define MAKE_STD_ZVAL(zv) ZVAL_UNDEF(&zv) -+#define ZVAL_NOT_UNDEF(zv) !(Z_ISUNDEF(zv)) -+#define ZVAL_IS_UNDEF(zv) (Z_ISUNDEF(zv)) -+#define ZVAL_SET_UNDEF(zv) ZVAL_UNDEF(&zv) -+#define INIT_ZVAL(zv) -+#define INIT_PZVAL(a) -+ -+#else -+ -+#define MAPSCRIPT_ZVAL zval* -+#define MAPSCRIPT_ZVAL_P zval** -+ -+#define MAPSCRIPT_OBJ_P(t, o) (t *) zend_object_store_get_object(o TSRMLS_CC) -+#define MAPSCRIPT_OBJ(t, o) (t *) zend_object_store_get_object(o TSRMLS_CC) -+#define MAPSCRIPT_RETURN_STRINGL(a, b, c) RETURN_STRINGL(a, b, c) -+#define MAPSCRIPT_RETURN_STRING(a, b) RETURN_STRING(a, b) -+#define MAPSCRIPT_RETVAL_STRING(a, b) RETVAL_STRING(a, b) -+#define MAPSCRIPT_RETVAL_STRINGL(a, b, c) RETURN_STRINGL(a, b, c) -+#define MAPSCRIPT_ZVAL_STRING(a, b, c) ZVAL_STRING(a, b, c) -+ -+#define mapscript_is_auto_global(s, l) zend_is_auto_global(s, l) -+#define mapscript_array_init(zv) array_init(zv) -+#define mapscript_add_next_index_string(a, b, c) add_next_index_string(a, b, c) -+#define mapscript_add_assoc_string(a, b, c, d) add_assoc_string(a, b, c, d) -+#define mapscript_hash_get_current_key(a, b, c, d) zend_hash_get_current_key(a, b, c, d) -+#define mapscript_hash_update(ht, key, data) \ -+ zend_hash_update(Z_ARRVAL_P(return_value), key, strlen(key)+1, &data, sizeof(data), NULL) -+ -+#define MAPSCRIPT_TYPE(zv) Z_TYPE_P(zv) -+#define MAPSCRIPT_OBJCE(zv) Z_OBJCE_P(zv) -+#define ZVAL_NOT_UNDEF(zv) (zv != NULL) -+#define ZVAL_IS_UNDEF(zv) (zv == NULL) -+#define ZVAL_SET_UNDEF(zv) zv = NULL -+ -+#endif -+ -+ - extern zend_module_entry mapscript_module_entry; - #define phpext_mapscript_ptr &mapscript_module_entry - -@@ -104,6 +169,252 @@ extern zend_module_entry mapscript_module_entry; - #endif - - /* MapScript objects */ -+#if PHP_VERSION_ID >= 70000 -+typedef struct _parent_object { -+ zval val; // the zval of the parent -+ zval *child_ptr; // a ptr to a parent property, which is the zval of the child object. -+ // should be set to NULL when the child is destroyed -+} parent_object; -+ -+typedef struct _php_color_object { -+ parent_object parent; -+ colorObj *color; -+ zend_object zobj; -+} php_color_object; -+ -+typedef struct _php_rect_object { -+ parent_object parent; -+ int is_ref; -+ rectObj *rect; -+ zend_object zobj; -+} php_rect_object; -+ -+typedef struct _php_hashtable_object { -+ parent_object parent; -+ hashTableObj *hashtable; -+ zend_object zobj; -+} php_hashtable_object; -+ -+typedef struct _php_symbol_object { -+ parent_object parent; -+ symbolObj *symbol; -+ zend_object zobj; -+} php_symbol_object; -+ -+typedef struct _php_class_object { -+ parent_object parent; //old layer -+ zval metadata; -+ zval leader; -+ classObj *class; -+ zend_object zobj; -+} php_class_object; -+ -+typedef struct _php_image_object { -+ imageObj *image; -+ zend_object zobj; -+} php_image_object; -+ -+typedef struct _php_web_object { -+ parent_object parent; -+ zval extent; -+ zval metadata; -+ zval validation; -+ webObj *web; -+ zend_object zobj; -+} php_web_object; -+ -+typedef struct _php_legend_object { -+ parent_object parent; -+ zval outlinecolor; -+ zval label; -+ zval imagecolor; -+ legendObj *legend; -+ zend_object zobj; -+} php_legend_object; -+ -+typedef struct _php_outputformat_object { -+ parent_object parent; -+ int is_ref; -+ outputFormatObj *outputformat; -+ zend_object zobj; -+} php_outputformat_object; -+ -+typedef struct _php_querymap_object { -+ parent_object parent; -+ zval color; -+ queryMapObj *querymap; -+ zend_object zobj; -+} php_querymap_object; -+ -+typedef struct _php_grid_object { -+ parent_object parent; -+ graticuleObj *grid; -+ zend_object zobj; -+} php_grid_object; -+ -+typedef struct _php_error_object { -+ errorObj *error; -+ zend_object zobj; -+} php_error_object; -+ -+typedef struct _php_referencemap_object { -+ parent_object parent; -+ zval extent; -+ zval color; -+ zval outlinecolor; -+ referenceMapObj *referencemap; -+ zend_object zobj; -+} php_referencemap_object; -+ -+typedef struct _php_label_object { -+ parent_object parent; -+ int is_ref; -+ zval color; -+ zval outlinecolor; -+ zval shadowcolor; -+ zval backgroundcolor; -+ zval backgroundshadowcolor; -+ zval leader; -+ labelObj *label; -+ zend_object zobj; -+} php_label_object; -+ -+typedef struct _php_style_object { -+ parent_object parent; -+ zval color; -+ zval outlinecolor; -+ zval backgroundcolor; -+ zval mincolor; -+ zval maxcolor; -+ styleObj *style; -+ zend_object zobj; -+} php_style_object; -+ -+typedef struct _php_projection_object { -+ parent_object parent; -+ int is_ref; -+ projectionObj *projection; -+ zend_object zobj; -+} php_projection_object; -+ -+typedef struct _php_point_object { -+ parent_object parent; -+ int is_ref; -+ pointObj *point; -+ zend_object zobj; -+} php_point_object; -+ -+typedef struct _php_line_object { -+ parent_object parent; -+ int is_ref; -+ lineObj *line; -+ zend_object zobj; -+} php_line_object; -+ -+typedef struct _php_shape_object { -+ parent_object parent; -+ zval bounds; -+ zval values; -+ int is_ref; -+ shapeObj *shape; -+ zend_object zobj; -+} php_shape_object; -+ -+typedef struct _php_shapefile_object { -+ zval bounds; -+ shapefileObj *shapefile; -+ zend_object zobj; -+} php_shapefile_object; -+ -+#ifdef disabled -+typedef struct _php_labelcache_object { -+ parent_object parent; -+ labelCacheObj *labelcache; -+ zend_object zobj; -+} php_labelcache_object; -+#endif -+ -+typedef struct _php_labelleader_object { -+ parent_object parent; -+ labelLeaderObj *labelleader; -+ zend_object zobj; -+} php_labelleader_object; -+ -+#ifdef disabled -+typedef struct _php_labelcachemember_object { -+ parent_object parent; -+ zval labels; /* should be immutable */ -+ zval point; /* should be immutable */ -+ zval styles; /* should be immutable */ -+ zval poly; /* should be immutable */ -+ labelCacheMemberObj *labelcachemember; -+ zend_object zobj; -+} php_labelcachemember_object; -+#endif -+ -+typedef struct _php_result_object { -+ parent_object parent; -+ resultObj *result; -+ zend_object zobj; -+} php_result_object; -+ -+typedef struct _php_scalebar_object { -+ parent_object parent; -+ zval color; -+ zval backgroundcolor; -+ zval outlinecolor; -+ zval label; -+ zval imagecolor; -+ scalebarObj *scalebar; -+ zend_object zobj; -+} php_scalebar_object; -+ -+typedef struct _php_owsrequest_object { -+ cgiRequestObj *cgirequest; -+ zend_object zobj; -+} php_owsrequest_object; -+ -+typedef struct _php_layer_object { -+ parent_object parent; //old map -+ zval offsite; -+ zval grid; -+ zval metadata; -+ zval bindvals; -+ zval projection; -+ zval cluster; -+ zval extent; -+ int is_ref; -+ layerObj *layer; -+ zend_object zobj; -+} php_layer_object; -+ -+typedef struct _php_map_object { -+ zval outputformat; -+ zval extent; -+ zval web; -+ zval reference; -+ zval imagecolor; -+ zval scalebar; -+ zval legend; -+ zval querymap; -+#ifdef disabled -+ zval labelcache; -+#endif -+ zval projection; -+ zval metadata; -+ zval configoptions; -+ mapObj *map; -+ zend_object zobj; -+} php_map_object; -+ -+typedef struct _php_cluster_object { -+ parent_object parent; -+ int is_ref; -+ clusterObj *cluster; -+ zend_object zobj; -+} php_cluster_object; -+#else -+/* PHP5 object structs */ - typedef struct _parent_object { - zval *val; // the zval of the parent - zval **child_ptr; // a ptr to a parent property, which point to the child object. -@@ -347,6 +658,7 @@ typedef struct _php_cluster_object { - int is_ref; - clusterObj *cluster; - } php_cluster_object; -+#endif - - /* Lifecyle functions*/ - PHP_MINIT_FUNCTION(mapscript); -@@ -403,6 +715,7 @@ PHP_FUNCTION(ms_ioGetStdoutBufferString); - PHP_FUNCTION(ms_ioResetHandlers); - PHP_FUNCTION(ms_ioStripStdoutBufferContentType); - PHP_FUNCTION(ms_ioStripStdoutBufferContentHeaders); -+PHP_FUNCTION(ms_ioGetAndStripStdoutBufferMimeHeaders); - PHP_FUNCTION(ms_ioGetStdoutBufferBytes); - - /* object constructors */ -@@ -457,14 +770,17 @@ extern zend_class_entry *mapscript_ce_layer; - extern zend_class_entry *mapscript_ce_map; - extern zend_class_entry *mapscript_ce_cluster; - -+#if PHP_VERSION_ID < 70000 - /* PHP Object constructors */ - extern zend_object_value mapscript_object_new(zend_object *zobj, zend_class_entry *ce, - void (*zend_objects_free_object) TSRMLS_DC); - extern zend_object_value mapscript_object_new_ex(zend_object *zobj, zend_class_entry *ce, - void (*zend_objects_free_object), - zend_object_handlers *object_handlers TSRMLS_DC); -+#endif /* PHP_VERSION_ID < 70000 */ -+ - extern void mapscript_fetch_object(zend_class_entry *ce, zval* zval_parent, php_layer_object* layer, -- void *internal_object, zval **php_object_storage TSRMLS_DC); -+ void *internal_object, MAPSCRIPT_ZVAL_P php_object_storage TSRMLS_DC); - extern void mapscript_create_color(colorObj *color, parent_object parent, zval *return_value TSRMLS_DC); - extern void mapscript_create_rect(rectObj *rect, parent_object php_parent, zval *return_value TSRMLS_DC); - extern void mapscript_create_hashtable(hashTableObj *hashtable, parent_object parent, zval *return_value TSRMLS_DC); -@@ -504,9 +820,17 @@ extern void mapscript_create_cluster(clusterObj *cluster, parent_object php_pare - - /* Exported functions for PHP Mapscript API */ - /* throw a MapScriptException */ -+#if PHP_VERSION_ID >= 70000 -+extern zend_object * mapscript_throw_exception(char *format TSRMLS_DC, ...); -+#else - extern zval * mapscript_throw_exception(char *format TSRMLS_DC, ...); -+#endif - /* print all MapServer errors (as Warning) and throw a MapScriptException */ -+#if PHP_VERSION_ID >= 70000 -+extern zend_object* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...); -+#else - extern zval* mapscript_throw_mapserver_exception(char *format TSRMLS_DC, ...); -+#endif - extern void mapscript_report_mapserver_error(int error_type TSRMLS_DC); - extern void mapscript_report_php_error(int error_type, char *format TSRMLS_DC, ...); - -diff --git a/mapscript/php/php_mapscript_util.c b/mapscript/php/php_mapscript_util.c -index fc681bd7e..eaa83b21a 100644 ---- a/mapscript/php/php_mapscript_util.c -+++ b/mapscript/php/php_mapscript_util.c -@@ -31,7 +31,7 @@ - #include "php_mapscript_util.h" - #include "../../maperror.h" - -- -+#if PHP_VERSION_ID < 70000 - zend_object_value mapscript_object_new(zend_object *zobj, - zend_class_entry *ce, - void (*zend_objects_free_object) TSRMLS_DC) -@@ -78,22 +78,37 @@ zend_object_value mapscript_object_new_ex(zend_object *zobj, - retval.handlers = object_handlers; - return retval; - } -+#endif /* PHP_VERSION_ID < 70000 */ - - int mapscript_extract_associative_array(HashTable *php, char **array) - { -- zval **value; -+ MAPSCRIPT_ZVAL_P value; -+#if PHP_VERSION_ID < 70000 - char *string_key = NULL; - ulong num_key; -+#else -+ zend_string *string_key = NULL; -+ zend_ulong num_key; -+#endif -+ - int i = 0; - - for(zend_hash_internal_pointer_reset(php); - zend_hash_has_more_elements(php) == SUCCESS; - zend_hash_move_forward(php)) { -+#if PHP_VERSION_ID < 70000 - zend_hash_get_current_data(php, (void **)&value); -+#else -+ value = zend_hash_get_current_data(php); -+#endif - -- switch (zend_hash_get_current_key(php, &string_key, &num_key, 1)) { -+ switch (mapscript_hash_get_current_key(php, &string_key, &num_key, 1)) { - case HASH_KEY_IS_STRING: -+#if PHP_VERSION_ID < 70000 - array[i++] = string_key; -+#else -+ array[i++] = ZSTR_VAL(string_key); -+#endif - array[i++] = Z_STRVAL_PP(value); - break; - } -@@ -107,64 +122,70 @@ int mapscript_extract_associative_array(HashTable *php, char **array) - otherwise it creates it */ - void mapscript_fetch_object(zend_class_entry *ce, zval* zval_parent, php_layer_object* layer, - void *internal_object, -- zval **php_object_storage TSRMLS_DC) -+ MAPSCRIPT_ZVAL_P php_object_storage TSRMLS_DC) - { - parent_object p; - - // create the parent struct -+#if PHP_VERSION_ID < 70000 - p.val = zval_parent; -+ #define mapscript_fetch_object_return_value *php_object_storage -+#else -+ p.val = *zval_parent; -+ #define mapscript_fetch_object_return_value php_object_storage -+#endif - p.child_ptr = &*php_object_storage; - MAKE_STD_ZVAL(*php_object_storage); - - if (ce == mapscript_ce_outputformat) -- mapscript_create_outputformat((outputFormatObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_outputformat((outputFormatObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_color) -- mapscript_create_color((colorObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_color((colorObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_rect) -- mapscript_create_rect((rectObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_rect((rectObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_class) -- mapscript_create_class((classObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_class((classObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_hashtable) -- mapscript_create_hashtable((hashTableObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_hashtable((hashTableObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_label) -- mapscript_create_label((labelObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_label((labelObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_style) -- mapscript_create_style((styleObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_style((styleObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_symbol) -- mapscript_create_symbol((symbolObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_symbol((symbolObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - #ifdef disabled - else if (ce == mapscript_ce_labelcachemember) -- mapscript_create_labelcachemember((labelCacheMemberObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_labelcachemember((labelCacheMemberObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_labelcache) -- mapscript_create_labelcache((labelCacheObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_labelcache((labelCacheObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - #endif - else if (ce == mapscript_ce_result) -- mapscript_create_result((resultObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_result((resultObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_scalebar) -- mapscript_create_scalebar((scalebarObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_scalebar((scalebarObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_web) -- mapscript_create_web((webObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_web((webObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_legend) -- mapscript_create_legend((legendObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_legend((legendObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_querymap) -- mapscript_create_querymap((queryMapObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_querymap((queryMapObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_grid) -- mapscript_create_grid((graticuleObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_grid((graticuleObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_referencemap) -- mapscript_create_referencemap((referenceMapObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_referencemap((referenceMapObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_point) -- mapscript_create_point((pointObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_point((pointObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_projection) -- mapscript_create_projection((projectionObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_projection((projectionObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_line) -- mapscript_create_line((lineObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_line((lineObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_shape) -- mapscript_create_shape((shapeObj*)internal_object, p, layer, *php_object_storage TSRMLS_CC); -+ mapscript_create_shape((shapeObj*)internal_object, p, layer, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_layer) -- mapscript_create_layer((layerObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_layer((layerObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_cluster) -- mapscript_create_cluster((clusterObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_cluster((clusterObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - else if (ce == mapscript_ce_labelleader) -- mapscript_create_labelleader((labelLeaderObj*)internal_object, p, *php_object_storage TSRMLS_CC); -+ mapscript_create_labelleader((labelLeaderObj*)internal_object, p, mapscript_fetch_object_return_value TSRMLS_CC); - } - -diff --git a/mapscript/php/php_mapscript_util.h b/mapscript/php/php_mapscript_util.h -index 73ae02df6..bccfd169b 100644 ---- a/mapscript/php/php_mapscript_util.h -+++ b/mapscript/php/php_mapscript_util.h -@@ -36,6 +36,8 @@ - #include "php_globals.h" - #include "php_mapscript.h" - -+#if PHP_VERSION_ID < 70000 -+ - #if ZEND_MODULE_API_NO < 20010901 - #define TSRMLS_D void - #define TSRMLS_DC -@@ -141,9 +143,30 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - #define MAPSCRIPT_FREE_OBJECT(zobj) \ - zend_hash_destroy(zobj->std.properties); \ - FREE_HASHTABLE(zobj->std.properties); -+#endif /* PHP_VERSION_ID < 70000 */ - -+#if PHP_VERSION_ID >= 70000 -+#define MAPSCRIPT_ADDREF(zv) if(!(Z_ISUNDEF(zv))) GC_REFCOUNT(Z_COUNTED(zv))++; -+#define MAPSCRIPT_ADDREF_P(zv) if(!(Z_ISUNDEF(*zv))) GC_REFCOUNT(Z_COUNTED_P(zv))++; -+#else - #define MAPSCRIPT_ADDREF(zobj) if (zobj) Z_ADDREF_P(zobj) -+#define MAPSCRIPT_ADDREF_P(zv) MAPSCRIPT_ADDREF(zv) -+#endif - -+#if PHP_VERSION_ID >= 70000 -+#ifndef _zval_dtor_func_for_ptr -+//use _zval_dtor_func in PHP7.1 instead -+#define _zval_dtor_func_for_ptr _zval_dtor_func -+#endif -+#define MAPSCRIPT_DELREF(zv) \ -+ if (!(Z_ISUNDEF(zv))) \ -+ { \ -+ zend_refcounted *_gc = Z_COUNTED_P(&zv); \ -+ if(--GC_REFCOUNT(_gc) == 0) \ -+ _zval_dtor_func_for_ptr(_gc); \ -+ ZVAL_UNDEF(&zv); \ -+ } -+#else - #define MAPSCRIPT_DELREF(zobj) \ - if (zobj) \ - { \ -@@ -155,11 +178,25 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - } \ - zobj = NULL; \ - } -+#endif -+ -+#if PHP_VERSION_ID >= 70000 -+#define MAPSCRIPT_FREE_PARENT(parent) \ -+ if (parent.child_ptr) \ -+ ZVAL_UNDEF(parent.child_ptr); \ -+ MAPSCRIPT_DELREF(parent.val); - -+#define MAPSCRIPT_MAKE_PARENT(zobj, ptr) \ -+ if(zobj == NULL) \ -+ ZVAL_UNDEF(&parent.val); \ -+ else \ -+ ZVAL_COPY_VALUE(&parent.val, zobj); \ -+ parent.child_ptr = ptr; - - #define MAPSCRIPT_INIT_PARENT(parent) \ -- parent.val = NULL; \ -+ ZVAL_UNDEF(&parent.val); \ - parent.child_ptr = NULL; -+#else - - #define MAPSCRIPT_FREE_PARENT(parent) \ - if (parent.child_ptr) \ -@@ -170,12 +207,35 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - parent.val = zobj; \ - parent.child_ptr = ptr; - -+#define MAPSCRIPT_INIT_PARENT(parent) \ -+ parent.val = NULL; \ -+ parent.child_ptr = NULL; -+#endif -+ -+#if PHP_VERSION_ID >= 70000 -+ -+#define MAPSCRIPT_CALL_METHOD_1(zobj, function_name, retval, arg1) \ -+ zend_call_method_with_1_params(&zobj, Z_OBJCE(zobj), NULL, function_name, &retval, arg1); -+ -+#define MAPSCRIPT_CALL_METHOD_2(zobj, function_name, retval, arg1, arg2) \ -+ zend_call_method_with_2_params(&zobj, Z_OBJCE(zobj), NULL, function_name, &retval, arg1, arg2); -+ -+#define MAPSCRIPT_CALL_METHOD_2_P(zobj, function_name, retval, arg1, arg2) \ -+ zend_call_method_with_2_params(zobj, Z_OBJCE_P(zobj), NULL, function_name, &retval, arg1, arg2); -+ -+#else -+ - #define MAPSCRIPT_CALL_METHOD_1(zobj, function_name, retval, arg1) \ - zend_call_method_with_1_params(&zobj, Z_OBJCE_P(zobj), NULL, function_name, &retval, arg1); - - #define MAPSCRIPT_CALL_METHOD_2(zobj, function_name, retval, arg1, arg2) \ - zend_call_method_with_2_params(&zobj, Z_OBJCE_P(zobj), NULL, function_name, &retval, arg1, arg2); - -+#define MAPSCRIPT_CALL_METHOD_2_P(zobj, function_name, retval, arg1, arg2) \ -+ MAPSCRIPT_CALL_METHOD_2(zobj, function_name, retval, arg1, arg2) -+ -+#endif /* PHP_VERSION_ID */ -+ - #define STRING_EQUAL(string1, string2) \ - strcmp(string1, string2) == 0 - -@@ -183,7 +243,7 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - #define IF_GET_STRING(property_name, value) \ - if (strcmp(property, property_name)==0) \ - { \ -- RETVAL_STRING( (value ? value:"") , 1); \ -+ MAPSCRIPT_RETVAL_STRING( (value ? value:"") , 1); \ - } \ - - #define IF_GET_LONG(property_name, value) \ -@@ -198,6 +258,17 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - RETVAL_DOUBLE(value); \ - } \ - -+#if PHP_VERSION_ID >= 70000 -+#define IF_GET_OBJECT(property_name, mapscript_ce, php_object_storage, internal_object) \ -+ if (strcmp(property, property_name)==0) \ -+ { \ -+ if (Z_ISUNDEF(php_object_storage)) { \ -+ mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \ -+ &php_object_storage TSRMLS_CC); \ -+ } \ -+ RETURN_ZVAL(&php_object_storage, 1, 0); \ -+ } -+#else - #define IF_GET_OBJECT(property_name, mapscript_ce, php_object_storage, internal_object) \ - if (strcmp(property, property_name)==0) \ - { \ -@@ -207,12 +278,21 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - } \ - RETURN_ZVAL(php_object_storage, 1, 0); \ - } -+#endif - -+#if PHP_VERSION_ID >= 70000 - #define CHECK_OBJECT(mapscript_ce, php_object_storage, internal_object) \ -- if (!php_object_storage) { \ -+ if (Z_ISUNDEF(php_object_storage)) { \ - mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \ - &php_object_storage TSRMLS_CC); \ - } -+#else -+#define CHECK_OBJECT(mapscript_ce, php_object_storage, internal_object) \ -+ if (!php_object_storage) { \ -+ mapscript_fetch_object(mapscript_ce, zobj, NULL, (void*)internal_object, \ -+ &php_object_storage TSRMLS_CC); \ -+ } -+#endif - - /* helpers for setters */ - #define IF_SET_STRING(property_name, internal, value) \ -@@ -257,10 +337,11 @@ static zend_always_inline zend_bool zval_set_isref_to_p(zval* pz, zend_bool isre - internal = Z_LVAL_P(value); \ - } - -- -+#if PHP_VERSION_ID < 70000 - zend_object_value mapscript_object_new(zend_object *zobj, - zend_class_entry *ce, - void (*zend_objects_free_object) TSRMLS_DC); -+#endif /* PHP_VERSION_ID < 70000 */ - - int mapscript_extract_associative_array(HashTable *php, char **array); - -diff --git a/mapscript/php/point.c b/mapscript/php/point.c -index 5e6299fa8..719ffd7ae 100644 ---- a/mapscript/php/point.c -+++ b/mapscript/php/point.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_point; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_point_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(point___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -94,7 +97,7 @@ PHP_METHOD(pointObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, getThis()); - - if ((php_point->point = pointObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct pointObj." TSRMLS_CC); -@@ -125,7 +128,7 @@ PHP_METHOD(pointObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); - - IF_GET_DOUBLE("x", php_point->point->x) - else IF_GET_DOUBLE("y", php_point->point->y) -@@ -154,7 +157,7 @@ PHP_METHOD(pointObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); - - IF_SET_DOUBLE("x", php_point->point->x, value) - else IF_SET_DOUBLE("y", php_point->point->y, value) -@@ -184,7 +187,7 @@ PHP_METHOD(pointObj, setXY) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); - - php_point->point->x = x; - php_point->point->y = y; -@@ -216,7 +219,7 @@ PHP_METHOD(pointObj, setXYZ) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); - - php_point->point->x = x; - php_point->point->y = y; -@@ -253,9 +256,9 @@ PHP_METHOD(pointObj, project) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC); -- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); -+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in); -+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out); - - status = pointObj_project(php_point->point, php_proj_in->projection, php_proj_out->projection); - if (status != MS_SUCCESS) { -@@ -283,8 +286,8 @@ PHP_METHOD(pointObj, distanceToPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point2 = (php_point_object *) zend_object_store_get_object(zobj_point2 TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); -+ php_point2 = MAPSCRIPT_OBJ_P(php_point_object, zobj_point2); - - distance = pointObj_distanceToPoint(php_point->point, php_point2->point); - -@@ -311,9 +314,9 @@ PHP_METHOD(pointObj, distanceToLine) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_line_point = (php_point_object *) zend_object_store_get_object(zobj_line_point TSRMLS_CC); -- php_line_point2 = (php_point_object *) zend_object_store_get_object(zobj_line_point2 TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); -+ php_line_point = MAPSCRIPT_OBJ_P(php_point_object, zobj_line_point); -+ php_line_point2 = MAPSCRIPT_OBJ_P(php_point_object, zobj_line_point2); - - distance = pointObj_distanceToLine(php_point->point, php_line_point->point, php_line_point2->point); - -@@ -339,8 +342,8 @@ PHP_METHOD(pointObj, distanceToShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - distance = pointObj_distanceToShape(php_point->point, php_shape->shape); - -@@ -374,10 +377,10 @@ PHP_METHOD(pointObj, draw) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_point = (php_point_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zobj); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - if ((status = pointObj_draw(php_point->point, php_map->map, php_layer->layer, php_image->image, - classIndex, text)) != MS_SUCCESS) { -@@ -410,16 +413,91 @@ void mapscript_create_point(pointObj *point, parent_object parent, zval *return_ - { - php_point_object * php_point; - object_init_ex(return_value, mapscript_ce_point); -- php_point = (php_point_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, return_value); - php_point->point = point; - -- if (parent.val) -+ if (ZVAL_NOT_UNDEF(parent.val)) - php_point->is_ref = 1; - - php_point->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_point_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_point_object *php_point; -+ -+ php_point = ecalloc(1, sizeof(*php_point) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_point->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_point->zobj, ce); -+ -+ php_point->zobj.handlers = &mapscript_point_object_handlers; -+ -+ php_point->is_ref = 0; -+ MAPSCRIPT_INIT_PARENT(php_point->parent); -+ -+ return &php_point->zobj; -+} -+ -+static void mapscript_point_free_object(zend_object *object) -+{ -+ php_point_object *php_point; -+ -+ php_point = (php_point_object *)((char *)object - XtOffsetOf(php_point_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_point->parent); -+ -+ if (php_point->point && !php_point->is_ref) { -+ pointObj_destroy(php_point->point); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_point_clone_object(zval *zobj) -+{ -+ php_point_object *php_point_old, *php_point_new; -+ zend_object* zobj_new; -+ -+ php_point_old = MAPSCRIPT_OBJ_P(php_point_object, zobj); -+ -+ zobj_new = mapscript_point_create_object(mapscript_ce_point); -+ php_point_new = (php_point_object *)((char *)zobj_new - XtOffsetOf(php_point_object, zobj)); -+ -+ zend_objects_clone_members(&php_point_new->zobj, &php_point_old->zobj); -+ -+ if ((php_point_new->point = pointObj_new()) == NULL) { -+ mapscript_throw_exception("Unable to construct pointObj." TSRMLS_CC); -+ return NULL; -+ } -+ memcpy(php_point_new->point, php_point_old->point, sizeof(pointObj)); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(point) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "pointObj", point_functions); -+ mapscript_ce_point = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_point->create_object = mapscript_point_create_object; -+ mapscript_ce_point->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_point_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_point_object_handlers)); -+ mapscript_point_object_handlers.free_obj = mapscript_point_free_object; -+ mapscript_point_object_handlers.clone_obj = mapscript_point_clone_object; -+ mapscript_point_object_handlers.offset = XtOffsetOf(php_point_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ -+ - static void mapscript_point_object_destroy(void *object TSRMLS_DC) - { - php_point_object *php_point = (php_point_object *)object; -@@ -464,3 +542,4 @@ PHP_MINIT_FUNCTION(point) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/projection.c b/mapscript/php/projection.c -index 46b74c165..d7e9c1633 100644 ---- a/mapscript/php/projection.c -+++ b/mapscript/php/projection.c -@@ -57,7 +57,7 @@ PHP_METHOD(projectionObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_projection = (php_projection_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, getThis()); - - if ((php_projection->projection = projectionObj_new(projString)) == NULL) { - mapscript_throw_mapserver_exception("Unable to construct projectionObj." TSRMLS_CC); -@@ -82,7 +82,7 @@ PHP_METHOD(projectionObj, setWKTProjection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_projection = (php_projection_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, getThis()); - - RETURN_LONG(msOGCWKT2ProjectionObj(wkt, php_projection->projection, MS_FALSE)); - } -@@ -101,7 +101,7 @@ PHP_METHOD(projectionObj, getUnits) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_projection = (php_projection_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, getThis()); - - RETURN_LONG(projectionObj_getUnits(php_projection->projection)); - } -@@ -120,16 +120,86 @@ void mapscript_create_projection(projectionObj *projection, parent_object parent - { - php_projection_object * php_projection; - object_init_ex(return_value, mapscript_ce_projection); -- php_projection = (php_projection_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_projection = MAPSCRIPT_OBJ_P(php_projection_object, return_value); - php_projection->projection = projection; - -- if (parent.val) -+ if (ZVAL_NOT_UNDEF(parent.val)) - php_projection->is_ref = 1; - - php_projection->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_projection_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_projection_object *php_projection; -+ -+ php_projection = ecalloc(1, sizeof(*php_projection) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_projection->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_projection->zobj, ce); -+ -+ php_projection->zobj.handlers = &mapscript_projection_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_projection->parent); -+ php_projection->is_ref = 0; -+ -+ return &php_projection->zobj; -+} -+ -+static void mapscript_projection_free_object(zend_object *object) -+{ -+ php_projection_object *php_projection; -+ -+ php_projection = (php_projection_object *)((char *)object - XtOffsetOf(php_projection_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_projection->parent); -+ -+ if (php_projection->projection && !php_projection->is_ref) { -+ projectionObj_destroy(php_projection->projection); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_projection_clone_object(zval *zobj) -+{ -+ php_projection_object *php_projection_old, *php_projection_new; -+ zend_object* zobj_new; -+ -+ php_projection_old = MAPSCRIPT_OBJ_P(php_projection_object, zobj); -+ -+ zobj_new = mapscript_projection_create_object(mapscript_ce_projection); -+ php_projection_new = (php_projection_object *)((char *)zobj_new - XtOffsetOf(php_projection_object, zobj)); -+ -+ zend_objects_clone_members(&php_projection_new->zobj, &php_projection_old->zobj); -+ -+ php_projection_new->projection = projectionObj_clone(php_projection_old->projection); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(projection) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "projectionObj", projection_functions); -+ mapscript_ce_projection = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_projection->create_object = mapscript_projection_create_object; -+ mapscript_ce_projection->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_projection_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_projection_object_handlers)); -+ mapscript_projection_object_handlers.free_obj = mapscript_projection_free_object; -+ mapscript_projection_object_handlers.clone_obj = mapscript_projection_clone_object; -+ mapscript_projection_object_handlers.offset = XtOffsetOf(php_projection_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_projection_object_destroy(void *object TSRMLS_DC) - { - php_projection_object *php_projection = (php_projection_object *)object; -@@ -175,7 +245,7 @@ static zend_object_value mapscript_projection_object_clone(zval *zobj TSRMLS_DC) - php_projection_object *php_projection_old, *php_projection_new; - zend_object_value new_ov; - -- php_projection_old = (php_projection_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_projection_old = MAPSCRIPT_OBJ_P(php_projection_object, zobj); - - new_ov = mapscript_projection_object_new_ex(mapscript_ce_projection, &php_projection_new TSRMLS_CC); - zend_objects_clone_members(&php_projection_new->std, new_ov, &php_projection_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -201,3 +271,4 @@ PHP_MINIT_FUNCTION(projection) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/querymap.c b/mapscript/php/querymap.c -index a76962b98..bd29d2a8c 100644 ---- a/mapscript/php/querymap.c -+++ b/mapscript/php/querymap.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_querymap; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_querymap_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(querymap___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -69,7 +72,7 @@ PHP_METHOD(queryMapObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj); - - IF_GET_LONG("width", php_querymap->querymap->width) - else IF_GET_LONG("height", php_querymap->querymap->height) -@@ -97,7 +100,7 @@ PHP_METHOD(queryMapObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj); - - IF_SET_LONG("width", php_querymap->querymap->width, value) - else IF_SET_LONG("height", php_querymap->querymap->height, value) -@@ -128,7 +131,7 @@ PHP_METHOD(queryMapObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj); - - status = queryMapObj_updateFromString(php_querymap->querymap, snippet); - -@@ -156,14 +159,14 @@ PHP_METHOD(queryMapObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj); - - value = queryMapObj_convertToString(php_querymap->querymap); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -182,7 +185,7 @@ PHP_METHOD(queryMapObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_querymap = (php_querymap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, zobj); - - MAPSCRIPT_DELREF(php_querymap->color); - } -@@ -204,7 +207,7 @@ void mapscript_create_querymap(queryMapObj *querymap, parent_object parent, zval - { - php_querymap_object * php_querymap; - object_init_ex(return_value, mapscript_ce_querymap); -- php_querymap = (php_querymap_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_querymap = MAPSCRIPT_OBJ_P(php_querymap_object, return_value); - php_querymap->querymap = querymap; - - php_querymap->parent = parent; -@@ -212,6 +215,59 @@ void mapscript_create_querymap(queryMapObj *querymap, parent_object parent, zval - - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_querymap_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_querymap_object *php_querymap; -+ -+ php_querymap = ecalloc(1, sizeof(*php_querymap) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_querymap->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_querymap->zobj, ce); -+ -+ php_querymap->zobj.handlers = &mapscript_querymap_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_querymap->parent); -+ ZVAL_UNDEF(&php_querymap->color); -+ -+ return &php_querymap->zobj; -+} -+ -+static void mapscript_querymap_free_object(zend_object *object) -+{ -+ php_querymap_object *php_querymap; -+ -+ php_querymap = (php_querymap_object *)((char *)object - XtOffsetOf(php_querymap_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_querymap->parent); -+ -+ MAPSCRIPT_FREE_PARENT(php_querymap->parent); -+ MAPSCRIPT_DELREF(php_querymap->color); -+ -+ /* We don't need to free the queryMapObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(querymap) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "queryMapObj", querymap_functions); -+ mapscript_ce_querymap = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_querymap->create_object = mapscript_querymap_create_object; -+ mapscript_ce_querymap->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_querymap_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_querymap_object_handlers)); -+ mapscript_querymap_object_handlers.free_obj = mapscript_querymap_free_object; -+ mapscript_querymap_object_handlers.offset = XtOffsetOf(php_querymap_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_querymap_object_destroy(void *object TSRMLS_DC) - { - php_querymap_object *php_querymap = (php_querymap_object *)object; -@@ -255,3 +311,4 @@ PHP_MINIT_FUNCTION(querymap) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/rect.c b/mapscript/php/rect.c -index abf44dcfc..e72a86a89 100644 ---- a/mapscript/php/rect.c -+++ b/mapscript/php/rect.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_rect; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_rect_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(rect___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -80,7 +83,7 @@ PHP_METHOD(rectObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, getThis()); - - if ((php_rect->rect = rectObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct rectObj." TSRMLS_CC); -@@ -104,7 +107,7 @@ PHP_METHOD(rectObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj); - - IF_GET_DOUBLE("minx", php_rect->rect->minx) - else IF_GET_DOUBLE("miny", php_rect->rect->miny) -@@ -141,10 +144,10 @@ PHP_METHOD(rectObj, draw) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - if ((status = rectObj_draw(php_rect->rect, php_map->map, php_layer->layer, php_image->image, - classIndex, text)) != MS_SUCCESS) { -@@ -172,7 +175,7 @@ PHP_METHOD(rectObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj); - - IF_SET_DOUBLE("minx", php_rect->rect->minx, value) - else IF_SET_DOUBLE("miny", php_rect->rect->miny, value) -@@ -202,9 +205,9 @@ PHP_METHOD(rectObj, project) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC); -- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj); -+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in); -+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out); - - status = rectObj_project(php_rect->rect, php_proj_in->projection, php_proj_out->projection); - if (status != MS_SUCCESS) { -@@ -231,7 +234,7 @@ PHP_METHOD(rectObj, setExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj); - - php_rect->rect->minx = minx; - php_rect->rect->miny = miny; -@@ -259,7 +262,7 @@ PHP_METHOD(rectObj, fit) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, zobj); - - retval = rectObj_fit(php_rect->rect, width, height); - -@@ -282,7 +285,7 @@ PHP_METHOD(rectObj, getCenter) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_rect = (php_rect_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, getThis()); - - center = (pointObj *)calloc(1, sizeof(pointObj)); - if (!center) { -@@ -318,16 +321,90 @@ void mapscript_create_rect(rectObj *rect, parent_object parent, zval *return_val - { - php_rect_object * php_rect; - object_init_ex(return_value, mapscript_ce_rect); -- php_rect = (php_rect_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_rect = MAPSCRIPT_OBJ_P(php_rect_object, return_value); - php_rect->rect = rect; - -- if (parent.val) -+ if(ZVAL_NOT_UNDEF(parent.val)) - php_rect->is_ref = 1; - - php_rect->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_rect_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_rect_object *php_rect; -+ -+ php_rect = ecalloc(1, sizeof(*php_rect) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_rect->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_rect->zobj, ce); -+ -+ php_rect->zobj.handlers = &mapscript_rect_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_rect->parent); -+ php_rect->is_ref = 0; -+ -+ return &php_rect->zobj; -+} -+ -+static void mapscript_rect_free_object(zend_object *object) -+{ -+ php_rect_object *php_rect; -+ -+ php_rect = (php_rect_object *)((char *)object - XtOffsetOf(php_rect_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_rect->parent); -+ -+ if (php_rect->rect && !php_rect->is_ref) { -+ rectObj_destroy(php_rect->rect); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_rect_clone_object(zval *zobj) -+{ -+ php_rect_object *php_rect_old, *php_rect_new; -+ zend_object* zobj_new; -+ -+ php_rect_old = MAPSCRIPT_OBJ_P(php_rect_object, zobj); -+ -+ zobj_new = mapscript_rect_create_object(mapscript_ce_rect); -+ php_rect_new = (php_rect_object *)((char *)zobj_new - XtOffsetOf(php_rect_object, zobj)); -+ -+ zend_objects_clone_members(&php_rect_new->zobj, &php_rect_old->zobj); -+ -+ if ((php_rect_new->rect = rectObj_new()) == NULL) { -+ mapscript_throw_exception("Unable to construct rectObj." TSRMLS_CC); -+ return NULL; -+ } -+ memcpy(php_rect_new->rect, php_rect_old->rect, sizeof(rectObj)); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(rect) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "rectObj", rect_functions); -+ mapscript_ce_rect = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_rect->create_object = mapscript_rect_create_object; -+ mapscript_ce_rect->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_rect_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_rect_object_handlers)); -+ mapscript_rect_object_handlers.free_obj = mapscript_rect_free_object; -+ mapscript_rect_object_handlers.clone_obj = mapscript_rect_clone_object; -+ mapscript_rect_object_handlers.offset = XtOffsetOf(php_rect_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_rect_object_destroy(void *object TSRMLS_DC) - { - php_rect_object *php_rect = (php_rect_object *)object; -@@ -372,3 +449,4 @@ PHP_MINIT_FUNCTION(rect) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/referencemap.c b/mapscript/php/referencemap.c -index bb0b7074b..86d0afebe 100644 ---- a/mapscript/php/referencemap.c -+++ b/mapscript/php/referencemap.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_referencemap; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_referencemap_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(referenceMap___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -69,7 +72,7 @@ PHP_METHOD(referenceMapObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj); - - IF_GET_STRING("image", php_referencemap->referencemap->image) - else IF_GET_LONG("width", php_referencemap->referencemap->width) -@@ -104,7 +107,7 @@ PHP_METHOD(referenceMapObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj); - - IF_SET_STRING("image", php_referencemap->referencemap->image, value) - else IF_SET_LONG("width", php_referencemap->referencemap->width, value) -@@ -142,7 +145,7 @@ PHP_METHOD(referenceMapObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj); - - status = referenceMapObj_updateFromString(php_referencemap->referencemap, snippet); - -@@ -170,14 +173,14 @@ PHP_METHOD(referenceMapObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj); - - value = referenceMapObj_convertToString(php_referencemap->referencemap); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -196,7 +199,7 @@ PHP_METHOD(referenceMapObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_referencemap = (php_referencemap_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, zobj); - - MAPSCRIPT_DELREF(php_referencemap->extent); - MAPSCRIPT_DELREF(php_referencemap->color); -@@ -220,13 +223,68 @@ void mapscript_create_referencemap(referenceMapObj *referencemap, parent_object - { - php_referencemap_object * php_referencemap; - object_init_ex(return_value, mapscript_ce_referencemap); -- php_referencemap = (php_referencemap_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_referencemap = MAPSCRIPT_OBJ_P(php_referencemap_object, return_value); - php_referencemap->referencemap = referencemap; - - php_referencemap->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_referencemap_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_referencemap_object *php_referencemap; -+ -+ php_referencemap = ecalloc(1, sizeof(*php_referencemap) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_referencemap->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_referencemap->zobj, ce); -+ -+ php_referencemap->zobj.handlers = &mapscript_referencemap_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_referencemap->parent); -+ ZVAL_UNDEF(&php_referencemap->extent); -+ ZVAL_UNDEF(&php_referencemap->color); -+ ZVAL_UNDEF(&php_referencemap->outlinecolor); -+ -+ return &php_referencemap->zobj; -+} -+ -+static void mapscript_referencemap_free_object(zend_object *object) -+{ -+ php_referencemap_object *php_referencemap; -+ -+ php_referencemap = (php_referencemap_object *)((char *)object - XtOffsetOf(php_referencemap_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_referencemap->parent); -+ MAPSCRIPT_DELREF(php_referencemap->extent); -+ MAPSCRIPT_DELREF(php_referencemap->color); -+ MAPSCRIPT_DELREF(php_referencemap->outlinecolor); -+ -+ /* We don't need to free the referenceMapObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(referencemap) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "referenceMapObj", referencemap_functions); -+ mapscript_ce_referencemap = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_referencemap->create_object = mapscript_referencemap_create_object; -+ mapscript_ce_referencemap->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_referencemap_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_referencemap_object_handlers)); -+ mapscript_referencemap_object_handlers.free_obj = mapscript_referencemap_free_object; -+ mapscript_referencemap_object_handlers.offset = XtOffsetOf(php_referencemap_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_referencemap_object_destroy(void *object TSRMLS_DC) - { - php_referencemap_object *php_referencemap = (php_referencemap_object *)object; -@@ -274,3 +332,4 @@ PHP_MINIT_FUNCTION(referencemap) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/result.c b/mapscript/php/result.c -index 994b0596d..a0748b786 100644 ---- a/mapscript/php/result.c -+++ b/mapscript/php/result.c -@@ -30,6 +30,9 @@ - **********************************************************************/ - - #include "php_mapscript.h" -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_result_object_handlers; -+#endif - - zend_class_entry *mapscript_ce_result; - -@@ -62,7 +65,7 @@ PHP_METHOD(resultObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_result = (php_result_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -+ php_result = MAPSCRIPT_OBJ_P(php_result_object, getThis()); - - if ((php_result->result = resultObj_new()) == NULL) { - mapscript_throw_exception("Unable to construct resultObj." TSRMLS_CC); -@@ -88,7 +91,7 @@ PHP_METHOD(resultObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_result = (php_result_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_result = MAPSCRIPT_OBJ_P(php_result_object, zobj); - - IF_GET_LONG("shapeindex", php_result->result->shapeindex) - else IF_GET_LONG("tileindex", php_result->result->tileindex) -@@ -136,13 +139,62 @@ void mapscript_create_result(resultObj *result, parent_object parent, - { - php_result_object * php_result; - object_init_ex(return_value, mapscript_ce_result); -- php_result = (php_result_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_result = MAPSCRIPT_OBJ_P(php_result_object, return_value); - php_result->result = result; - - php_result->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_result_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_result_object *php_result; -+ -+ php_result = ecalloc(1, sizeof(*php_result) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_result->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_result->zobj, ce); -+ -+ php_result->zobj.handlers = &mapscript_result_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_result->parent); -+ -+ return &php_result->zobj; -+} -+ -+static void mapscript_result_free_object(zend_object *object) -+{ -+ php_result_object *php_result; -+ -+ php_result = (php_result_object *)((char *)object - XtOffsetOf(php_result_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_result->parent); -+ -+ /* We don't need to free the resultObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(result) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "resultObj", result_functions); -+ mapscript_ce_result = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_result->create_object = mapscript_result_create_object; -+ mapscript_ce_result->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_result_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_result_object_handlers)); -+ mapscript_result_object_handlers.free_obj = mapscript_result_free_object; -+ mapscript_result_object_handlers.offset = XtOffsetOf(php_result_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_result_object_destroy(void *object TSRMLS_DC) - { - php_result_object *php_result = (php_result_object *)object; -@@ -184,3 +236,4 @@ PHP_MINIT_FUNCTION(result) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/scalebar.c b/mapscript/php/scalebar.c -index 21b04664d..cb879266d 100644 ---- a/mapscript/php/scalebar.c -+++ b/mapscript/php/scalebar.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_scalebar; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_scalebar_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(scalebar___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -75,7 +78,7 @@ PHP_METHOD(scalebarObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj); - - IF_GET_LONG("height", php_scalebar->scalebar->height) - else IF_GET_LONG("width", php_scalebar->scalebar->width) -@@ -112,7 +115,7 @@ PHP_METHOD(scalebarObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj); - - IF_SET_LONG("height", php_scalebar->scalebar->height, value) - else IF_SET_LONG("width", php_scalebar->scalebar->width, value) -@@ -152,7 +155,7 @@ PHP_METHOD(scalebarObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj); - - status = scalebarObj_updateFromString(php_scalebar->scalebar, snippet); - -@@ -180,14 +183,14 @@ PHP_METHOD(scalebarObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj); - - value = scalebarObj_convertToString(php_scalebar->scalebar); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -208,7 +211,7 @@ PHP_METHOD(scalebarObj, setImageColor) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj); - - if (red < 0 || red > 255 || green < 0 || green > 255 || blue < 0 || blue > 255) - RETURN_LONG(MS_FAILURE); -@@ -235,7 +238,7 @@ PHP_METHOD(scalebarObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_scalebar = (php_scalebar_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, zobj); - - MAPSCRIPT_DELREF(php_scalebar->color); - MAPSCRIPT_DELREF(php_scalebar->backgroundcolor); -@@ -262,13 +265,72 @@ void mapscript_create_scalebar(scalebarObj *scalebar, parent_object parent, zval - { - php_scalebar_object * php_scalebar; - object_init_ex(return_value, mapscript_ce_scalebar); -- php_scalebar = (php_scalebar_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_scalebar = MAPSCRIPT_OBJ_P(php_scalebar_object, return_value); - php_scalebar->scalebar = scalebar; - - php_scalebar->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_scalebar_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_scalebar_object *php_scalebar; -+ -+ php_scalebar = ecalloc(1, sizeof(*php_scalebar) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_scalebar->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_scalebar->zobj, ce); -+ -+ php_scalebar->zobj.handlers = &mapscript_scalebar_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_scalebar->parent); -+ ZVAL_UNDEF(&php_scalebar->color); -+ ZVAL_UNDEF(&php_scalebar->backgroundcolor); -+ ZVAL_UNDEF(&php_scalebar->outlinecolor); -+ ZVAL_UNDEF(&php_scalebar->imagecolor); -+ ZVAL_UNDEF(&php_scalebar->label); -+ -+ return &php_scalebar->zobj; -+} -+ -+static void mapscript_scalebar_free_object(zend_object *object) -+{ -+ php_scalebar_object *php_scalebar; -+ -+ php_scalebar = (php_scalebar_object *)((char *)object - XtOffsetOf(php_scalebar_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_scalebar->parent); -+ MAPSCRIPT_DELREF(php_scalebar->color); -+ MAPSCRIPT_DELREF(php_scalebar->backgroundcolor); -+ MAPSCRIPT_DELREF(php_scalebar->outlinecolor); -+ MAPSCRIPT_DELREF(php_scalebar->imagecolor); -+ MAPSCRIPT_DELREF(php_scalebar->label); -+ -+ /* We don't need to free the scalebarObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(scalebar) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "scalebarObj", scalebar_functions); -+ mapscript_ce_scalebar = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_scalebar->create_object = mapscript_scalebar_create_object; -+ mapscript_ce_scalebar->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_scalebar_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_scalebar_object_handlers)); -+ mapscript_scalebar_object_handlers.free_obj = mapscript_scalebar_free_object; -+ mapscript_scalebar_object_handlers.offset = XtOffsetOf(php_scalebar_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_scalebar_object_destroy(void *object TSRMLS_DC) - { - php_scalebar_object *php_scalebar = (php_scalebar_object *)object; -@@ -320,3 +382,4 @@ PHP_MINIT_FUNCTION(scalebar) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/shape.c b/mapscript/php/shape.c -index 7bf474bad..a2be5f94e 100644 ---- a/mapscript/php/shape.c -+++ b/mapscript/php/shape.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_shape; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_shape_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(shape___construct_args, 0, 0, 1) - ZEND_ARG_INFO(0, type) -@@ -166,7 +169,7 @@ PHP_METHOD(shapeObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *)zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - if ((php_shape->shape = shapeObj_new(type)) == NULL) { - mapscript_throw_exception("Unable to construct shapeObj." TSRMLS_CC); -@@ -174,7 +177,7 @@ PHP_METHOD(shapeObj, __construct) - } - - MAKE_STD_ZVAL(php_shape->values); -- array_init(php_shape->values); -+ mapscript_array_init(php_shape->values); - } - /* }}} */ - -@@ -193,7 +196,7 @@ PHP_METHOD(shapeObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - IF_GET_STRING("text", php_shape->shape->text) - else IF_GET_LONG("classindex", php_shape->shape->classindex) -@@ -226,7 +229,7 @@ PHP_METHOD(shapeObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - IF_SET_STRING("text", php_shape->shape->text, value) - else IF_SET_LONG("classindex", php_shape->shape->classindex, value) -@@ -262,8 +265,8 @@ PHP_METHOD(shapeObj, add) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_line = (php_line_object *) zend_object_store_get_object(zline TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_line = MAPSCRIPT_OBJ_P(php_line_object, zline); - - retval = shapeObj_add(php_shape->shape, php_line->line); - -@@ -288,7 +291,7 @@ PHP_METHOD(shapeObj, line) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - - if (index < 0 || index >= php_shape->shape->numlines) { -@@ -318,8 +321,8 @@ PHP_METHOD(shapeObj, contains) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - - if (!shapeObj_contains(php_shape->shape, php_point->point)) - RETURN_FALSE; -@@ -344,8 +347,8 @@ PHP_METHOD(shapeObj, intersects) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (!shapeObj_intersects(php_shape->shape, php_shape2->shape)) - RETURN_FALSE; -@@ -373,9 +376,9 @@ PHP_METHOD(shapeObj, project) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_proj_in = (php_projection_object *) zend_object_store_get_object(zobj_proj_in TSRMLS_CC); -- php_proj_out = (php_projection_object *) zend_object_store_get_object(zobj_proj_out TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_proj_in = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_in); -+ php_proj_out = MAPSCRIPT_OBJ_P(php_projection_object, zobj_proj_out); - - status = shapeObj_project(php_shape->shape, php_proj_in->projection, php_proj_out->projection); - if (status != MS_SUCCESS) { -@@ -405,7 +408,7 @@ PHP_METHOD(shapeObj, getPointUsingMeasure) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - point = shapeObj_getpointusingmeasure(php_shape->shape, measure); - if (point == NULL) -@@ -437,8 +440,8 @@ PHP_METHOD(shapeObj, getMeasureUsingPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - - intersection = shapeObj_getmeasureusingpoint(php_shape->shape, php_point->point); - if (intersection == NULL) -@@ -470,15 +473,15 @@ PHP_METHOD(shapeObj, getValue) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); - - if (php_shape->shape->numvalues != php_layer->layer->numitems) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - - for(i=0; ilayer->numitems; i++) { - if (strcasecmp(php_layer->layer->items[i], fieldName)==0) { -- RETURN_STRING(php_shape->shape->values[i], 1); -+ MAPSCRIPT_RETURN_STRING(php_shape->shape->values[i], 1); - } - } - } -@@ -503,7 +506,7 @@ PHP_METHOD(shapeObj, buffer) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - shape = shapeObj_buffer(php_shape->shape, width); - if (shape == NULL) -@@ -531,7 +534,7 @@ PHP_METHOD(shapeObj, convexhull) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - shape = shapeObj_convexHull(php_shape->shape); - if (shape == NULL) -@@ -559,7 +562,7 @@ PHP_METHOD(shapeObj, boundary) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - shape = shapeObj_boundary(php_shape->shape); - if (shape == NULL) -@@ -587,8 +590,8 @@ PHP_METHOD(shapeObj, containsShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_contains_geos(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -617,8 +620,8 @@ PHP_METHOD(shapeObj, union) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - shape = shapeObj_Union(php_shape->shape, php_shape2->shape); - -@@ -649,8 +652,8 @@ PHP_METHOD(shapeObj, intersection) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - shape = shapeObj_intersection(php_shape->shape, php_shape2->shape); - -@@ -681,8 +684,8 @@ PHP_METHOD(shapeObj, difference) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - shape = shapeObj_difference(php_shape->shape, php_shape2->shape); - -@@ -713,8 +716,8 @@ PHP_METHOD(shapeObj, symdifference) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - shape = shapeObj_symdifference(php_shape->shape, php_shape2->shape); - -@@ -743,8 +746,8 @@ PHP_METHOD(shapeObj, overlaps) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_overlaps(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -770,8 +773,8 @@ PHP_METHOD(shapeObj, within) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_within(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -798,8 +801,8 @@ PHP_METHOD(shapeObj, crosses) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_crosses(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -825,8 +828,8 @@ PHP_METHOD(shapeObj, touches) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_touches(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -852,8 +855,8 @@ PHP_METHOD(shapeObj, equals) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_equals(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -879,8 +882,8 @@ PHP_METHOD(shapeObj, disjoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - if (shapeObj_disjoint(php_shape->shape, php_shape2->shape)) { - RETURN_TRUE; -@@ -905,7 +908,7 @@ PHP_METHOD(shapeObj, getCentroid) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - point = shapeObj_getcentroid(php_shape->shape); - -@@ -932,7 +935,7 @@ PHP_METHOD(shapeObj, getArea) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - area = shapeObj_getarea(php_shape->shape); - -@@ -955,7 +958,7 @@ PHP_METHOD(shapeObj, getLength) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - length = shapeObj_getlength(php_shape->shape); - -@@ -979,7 +982,7 @@ PHP_METHOD(shapeObj, getLabelPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - point = shapeObj_getLabelPoint(php_shape->shape); - -@@ -1006,16 +1009,16 @@ PHP_METHOD(shapeObj, toWkt) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - wkt = msShapeToWKT(php_shape->shape); - if (wkt) { -- RETVAL_STRING(wkt, 1); -+ MAPSCRIPT_RETVAL_STRING(wkt, 1); - msFree(wkt); - return; - } - -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - } - /* }}} */ - -@@ -1035,7 +1038,7 @@ PHP_METHOD(shapeObj, setBounds) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - shapeObj_setBounds(php_shape->shape); - -@@ -1062,7 +1065,7 @@ PHP_METHOD(shapeObj, simplify) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - shape = shapeObj_simplify(php_shape->shape, tolerance); - if (shape == NULL) -@@ -1092,7 +1095,7 @@ PHP_METHOD(shapeObj, topologyPreservingSimplify) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - shape = shapeObj_topologypreservingsimplify(php_shape->shape, tolerance); - if (shape == NULL) -@@ -1125,10 +1128,10 @@ PHP_METHOD(shapeObj, draw) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC); -- php_layer = (php_layer_object *) zend_object_store_get_object(zlayer TSRMLS_CC); -- php_image = (php_image_object *) zend_object_store_get_object(zimage TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); -+ php_layer = MAPSCRIPT_OBJ_P(php_layer_object, zlayer); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - if ((status = shapeObj_draw(php_shape->shape, php_map->map, php_layer->layer, - php_image->image)) != MS_SUCCESS) { -@@ -1154,7 +1157,7 @@ PHP_METHOD(shapeObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); - - MAPSCRIPT_DELREF(php_shape->bounds); - } -@@ -1177,8 +1180,8 @@ PHP_METHOD(shapeObj, distanceToPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - - RETURN_DOUBLE(msDistancePointToShape(php_point->point, php_shape->shape)); - } -@@ -1201,8 +1204,8 @@ PHP_METHOD(shapeObj, distanceToShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shape = (php_shape_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape2 = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zobj); -+ php_shape2 = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - RETURN_DOUBLE(msGEOSDistance(php_shape->shape, php_shape2->shape)); - } -@@ -1259,17 +1262,17 @@ void mapscript_create_shape(shapeObj *shape, parent_object parent, php_layer_obj - int i; - - object_init_ex(return_value, mapscript_ce_shape); -- php_shape = (php_shape_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, return_value); - php_shape->shape = shape; - - MAKE_STD_ZVAL(php_shape->values); -- array_init(php_shape->values); -+ mapscript_array_init(php_shape->values); - - if (php_layer) { - if ((php_shape->shape->numvalues == php_layer->layer->numitems) || - (php_shape->shape->numvalues == 0 && php_layer->layer->numitems == -1)) { - for(i=0; ishape->numvalues; i++) { -- add_assoc_string(php_shape->values, php_layer->layer->items[i], php_shape->shape->values[i], 1); -+ mapscript_add_assoc_string(php_shape->values, php_layer->layer->items[i], php_shape->shape->values[i], 1); - } - } else { - mapscript_throw_exception("Assertion failed, Could not set shape values: %d, %d" TSRMLS_CC, -@@ -1278,13 +1281,70 @@ void mapscript_create_shape(shapeObj *shape, parent_object parent, php_layer_obj - } - } - -- if (parent.val) -+ if (ZVAL_NOT_UNDEF(parent.val)) - php_shape->is_ref = 1; - - php_shape->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_shape_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_shape_object *php_shape; -+ -+ php_shape = ecalloc(1, sizeof(*php_shape) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_shape->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_shape->zobj, ce); -+ -+ php_shape->zobj.handlers = &mapscript_shape_object_handlers; -+ -+ php_shape->is_ref = 0; -+ MAPSCRIPT_INIT_PARENT(php_shape->parent); -+ ZVAL_UNDEF(&php_shape->bounds); -+ ZVAL_UNDEF(&php_shape->values); -+ -+ -+ return &php_shape->zobj; -+} -+ -+static void mapscript_shape_free_object(zend_object *object) -+{ -+ php_shape_object *php_shape; -+ -+ php_shape = (php_shape_object *)((char *)object - XtOffsetOf(php_shape_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_shape->parent); -+ MAPSCRIPT_DELREF(php_shape->bounds); -+ MAPSCRIPT_DELREF(php_shape->values); -+ -+ if (php_shape->shape && !php_shape->is_ref) { -+ shapeObj_destroy(php_shape->shape); -+ } -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(shape) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "shapeObj", shape_functions); -+ mapscript_ce_shape = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_shape->create_object = mapscript_shape_create_object; -+ mapscript_ce_shape->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_shape_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_shape_object_handlers)); -+ mapscript_shape_object_handlers.free_obj = mapscript_shape_free_object; -+ mapscript_shape_object_handlers.offset = XtOffsetOf(php_shape_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_shape_object_destroy(void *object TSRMLS_DC) - { - php_shape_object *php_shape = (php_shape_object *)object; -@@ -1333,3 +1393,4 @@ PHP_MINIT_FUNCTION(shape) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/shapefile.c b/mapscript/php/shapefile.c -index 89aceff2a..233809840 100644 ---- a/mapscript/php/shapefile.c -+++ b/mapscript/php/shapefile.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_shapefile; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_shapefile_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(shapefile___construct_args, 0, 0, 2) - ZEND_ARG_INFO(0, filename) -@@ -90,7 +93,7 @@ PHP_METHOD(shapeFileObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *)zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); - - php_shapefile->shapefile = shapefileObj_new(filename, type); - -@@ -116,7 +119,7 @@ PHP_METHOD(shapeFileObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); - - IF_GET_LONG("numshapes", php_shapefile->shapefile->numshapes) - else IF_GET_LONG("type", php_shapefile->shapefile->type) -@@ -173,7 +176,7 @@ PHP_METHOD(shapeFileObj, getShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); - - /* Create a new shapeObj to hold the result - * Note that the type used to create the shape (MS_NULL) does not matter -@@ -213,7 +216,7 @@ PHP_METHOD(shapeFileObj, getPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); - - /* Create a new shapeObj to hold the result - * Note that the type used to create the shape (MS_NULL) does not matter -@@ -256,7 +259,7 @@ PHP_METHOD(shapeFileObj, getExtent) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); - - /* Create a new rectObj to hold the result */ - if ((rect = rectObj_new()) == NULL) { -@@ -293,8 +296,8 @@ PHP_METHOD(shapeFileObj, addShape) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_shape = (php_shape_object *) zend_object_store_get_object(zshape TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); -+ php_shape = MAPSCRIPT_OBJ_P(php_shape_object, zshape); - - retval = shapefileObj_add(php_shapefile->shapefile, php_shape->shape); - -@@ -320,8 +323,8 @@ PHP_METHOD(shapeFileObj, addPoint) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_point = (php_point_object *) zend_object_store_get_object(zpoint TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); -+ php_point = MAPSCRIPT_OBJ_P(php_point_object, zpoint); - - retval = shapefileObj_addPoint(php_shapefile->shapefile, php_point->point); - -@@ -349,8 +352,8 @@ PHP_METHOD(shapeFileObj, getTransformed) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -- php_map = (php_map_object *) zend_object_store_get_object(zmap TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); - - /* Create a new shapeObj to hold the result - * Note that the type used to create the shape (MS_NULL) does not matter -@@ -389,7 +392,7 @@ PHP_METHOD(shapeFileObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_shapefile = (php_shapefile_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, zobj); - - MAPSCRIPT_DELREF(php_shapefile->bounds); - } -@@ -416,10 +419,59 @@ void mapscript_create_shapefile(shapefileObj *shapefile, zval *return_value TSRM - php_shapefile_object * php_shapefile; - - object_init_ex(return_value, mapscript_ce_shapefile); -- php_shapefile = (php_shapefile_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_shapefile = MAPSCRIPT_OBJ_P(php_shapefile_object, return_value); - php_shapefile->shapefile = shapefile; - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_shapefile_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_shapefile_object *php_shapefile; -+ -+ php_shapefile = ecalloc(1, sizeof(*php_shapefile) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_shapefile->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_shapefile->zobj, ce); -+ -+ php_shapefile->zobj.handlers = &mapscript_shapefile_object_handlers; -+ -+ ZVAL_UNDEF(&php_shapefile->bounds); -+ -+ return &php_shapefile->zobj; -+} -+ -+static void mapscript_shapefile_free_object(zend_object *object) -+{ -+ php_shapefile_object *php_shapefile; -+ -+ php_shapefile = (php_shapefile_object *)((char *)object - XtOffsetOf(php_shapefile_object, zobj)); -+ -+ MAPSCRIPT_DELREF(php_shapefile->bounds); -+ -+ shapefileObj_destroy(php_shapefile->shapefile); -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(shapefile) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "shapefileObj", shapefile_functions); -+ mapscript_ce_shapefile = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_shapefile->create_object = mapscript_shapefile_create_object; -+ mapscript_ce_shapefile->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_shapefile_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_shapefile_object_handlers)); -+ mapscript_shapefile_object_handlers.free_obj = mapscript_shapefile_free_object; -+ mapscript_shapefile_object_handlers.offset = XtOffsetOf(php_shapefile_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_shapefile_object_destroy(void *object TSRMLS_DC) - { - php_shapefile_object *php_shapefile = (php_shapefile_object *)object; -@@ -461,3 +513,4 @@ PHP_MINIT_FUNCTION(shapefile) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/style.c b/mapscript/php/style.c -index b5a53f179..963718b9e 100644 ---- a/mapscript/php/style.c -+++ b/mapscript/php/style.c -@@ -94,19 +94,19 @@ PHP_METHOD(styleObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *)zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - if (Z_TYPE_P(zparent) == IS_OBJECT && Z_OBJCE_P(zparent) == mapscript_ce_class) -- php_class = (php_class_object *)zend_object_store_get_object(zparent TSRMLS_CC); -+ php_class = MAPSCRIPT_OBJ_P(php_class_object, zparent); - else if (Z_TYPE_P(zparent) == IS_OBJECT && Z_OBJCE_P(zparent) == mapscript_ce_label) -- php_label = (php_label_object *)zend_object_store_get_object(zparent TSRMLS_CC); -+ php_label = MAPSCRIPT_OBJ_P(php_label_object, zparent); - else { - mapscript_throw_mapserver_exception("Invalid argument 1: should be a classObj or labelObj" TSRMLS_CC); - return; - } - - if (zstyle) -- php_style2 = (php_style_object *)zend_object_store_get_object(zstyle TSRMLS_CC); -+ php_style2 = MAPSCRIPT_OBJ_P(php_style_object, zstyle); - - if (php_class) { - if ((style = styleObj_new(php_class->class, (zstyle ? php_style2->style : NULL))) == NULL) { -@@ -124,7 +124,7 @@ PHP_METHOD(styleObj, __construct) - - MAPSCRIPT_MAKE_PARENT(zparent, NULL); - php_style->parent = parent; -- MAPSCRIPT_ADDREF(zparent); -+ MAPSCRIPT_ADDREF_P(zparent); - } - /* }}} */ - -@@ -143,7 +143,7 @@ PHP_METHOD(styleObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - IF_GET_LONG("symbol", php_style->style->symbol) - else IF_GET_STRING("symbolname", php_style->style->symbolname) -@@ -207,7 +207,7 @@ PHP_METHOD(styleObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - IF_SET_LONG("symbol", php_style->style->symbol, value) - else IF_SET_DOUBLE("size", php_style->style->size, value) -@@ -259,24 +259,24 @@ PHP_METHOD(styleObj, __set) - php_style->style->symbolname = strdup(Z_STRVAL_P(value)); - - /* The parent can be a classObj or a labelCacheMemberObj */ -- if (Z_OBJCE_P(php_style->parent.val) == mapscript_ce_class) { -- php_class = (php_class_object *) zend_object_store_get_object(php_style->parent.val TSRMLS_CC); -+ if (MAPSCRIPT_OBJCE(php_style->parent.val) == mapscript_ce_class) { -+ php_class = MAPSCRIPT_OBJ(php_class_object, php_style->parent.val); - /* Can a class have no layer object ? */ -- php_layer = (php_layer_object *) zend_object_store_get_object(php_class->parent.val TSRMLS_CC); -- if (!php_layer->parent.val) { -+ php_layer = MAPSCRIPT_OBJ(php_layer_object, php_class->parent.val); -+ if (ZVAL_IS_UNDEF(php_layer->parent.val)) { - mapscript_throw_exception("No map object associated with this style object." TSRMLS_CC); - return; - } -- php_map = (php_map_object *) zend_object_store_get_object(php_layer->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_layer->parent.val); - #ifdef disabled -- } else if (Z_OBJCE_P(php_style->parent.val) == mapscript_ce_labelcachemember) { -+ } else if (MAPSCRIPT_OBJCE(php_style->parent.val) == mapscript_ce_labelcachemember) { - /* The parent is always a map */ -- php_labelcachemember = (php_labelcachemember_object *) zend_object_store_get_object(php_style->parent.val TSRMLS_CC); -- if (!php_labelcachemember->parent.val) { -+ php_labelcachemember = MAPSCRIPT_OBJ(php_labelcachemember_object, php_style->parent.val); -+ if (ZVAL_NOT_UNDEF(php_labelcachemember->parent.val)) { - mapscript_throw_exception("No map object associated with this style object." TSRMLS_CC); - return; - } -- php_map = (php_map_object *) zend_object_store_get_object(php_labelcachemember->parent.val TSRMLS_CC); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_labelcachemember->parent.val); - #endif - } - -@@ -308,7 +308,7 @@ PHP_METHOD(styleObj, updateFromString) - char *snippet; - long snippet_len = 0; - int status = MS_FAILURE; -- zval *retval; -+ MAPSCRIPT_ZVAL retval; - zval property_name, value; - php_style_object *php_style; - -@@ -320,7 +320,7 @@ PHP_METHOD(styleObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - if ((status = styleObj_updateFromString(php_style->style, snippet)) != MS_SUCCESS) { - mapscript_throw_mapserver_exception("" TSRMLS_CC); -@@ -331,9 +331,9 @@ PHP_METHOD(styleObj, updateFromString) - if (php_style->style->symbolname) { - INIT_ZVAL(property_name); - INIT_ZVAL(value); -- ZVAL_STRING(&property_name, "symbolname", 1); -- ZVAL_STRING(&value, php_style->style->symbolname, 1); -- MAPSCRIPT_CALL_METHOD_2(zobj, "__set", retval, &property_name, &value); -+ MAPSCRIPT_ZVAL_STRING(&property_name, "symbolname", 1); -+ MAPSCRIPT_ZVAL_STRING(&value, php_style->style->symbolname, 1); -+ MAPSCRIPT_CALL_METHOD_2_P(zobj, "__set", retval, &property_name, &value); - } - - RETURN_LONG(status); -@@ -355,14 +355,14 @@ PHP_METHOD(styleObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - value = styleObj_convertToString(php_style->style); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -385,7 +385,7 @@ PHP_METHOD(styleObj, setBinding) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - if (bindingId < 0 || bindingId > MS_STYLE_BINDING_LENGTH) { - mapscript_throw_exception("Invalid binding id." TSRMLS_CC); -@@ -428,7 +428,7 @@ PHP_METHOD(styleObj, getBinding) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - if (bindingId < 0 || bindingId > MS_STYLE_BINDING_LENGTH) { - mapscript_throw_exception("Invalid binding id." TSRMLS_CC); -@@ -436,7 +436,7 @@ PHP_METHOD(styleObj, getBinding) - } - - if( (value = php_style->style->bindings[bindingId].item) != NULL) { -- RETURN_STRING(value, 1); -+ MAPSCRIPT_RETURN_STRING(value, 1); - } - - RETURN_NULL(); -@@ -460,7 +460,7 @@ PHP_METHOD(styleObj, removeBinding) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - if (bindingId < 0 || bindingId > MS_STYLE_BINDING_LENGTH) { - mapscript_throw_exception("Invalid binding id." TSRMLS_CC); -@@ -494,7 +494,7 @@ PHP_METHOD(styleObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - MAPSCRIPT_DELREF(php_style->color); - MAPSCRIPT_DELREF(php_style->outlinecolor); -@@ -516,13 +516,13 @@ PHP_METHOD(styleObj, getGeomTransform) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - if (php_style->style->_geomtransform.type == MS_GEOMTRANSFORM_NONE || - !php_style->style->_geomtransform.string) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETURN_STRING(php_style->style->_geomtransform.string, 1); -+ MAPSCRIPT_RETURN_STRING(php_style->style->_geomtransform.string, 1); - } - /* }}} */ - -@@ -543,7 +543,7 @@ PHP_METHOD(styleObj, setGeomTransform) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - styleObj_setGeomTransform(php_style->style, transform); - } -@@ -553,7 +553,8 @@ PHP_METHOD(styleObj, setGeomTransform) - Set the pattern of the style ) */ - PHP_METHOD(styleObj, setPattern) - { -- zval *zpattern, **ppzval; -+ zval *zpattern; -+ MAPSCRIPT_ZVAL_P ppzval; - HashTable *pattern_hash = NULL; - zval *zobj = getThis(); - int index = 0, numelements = 0; -@@ -567,7 +568,7 @@ PHP_METHOD(styleObj, setPattern) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - pattern_hash = Z_ARRVAL_P(zpattern); - - numelements = zend_hash_num_elements(pattern_hash); -@@ -581,9 +582,15 @@ PHP_METHOD(styleObj, setPattern) - zend_hash_has_more_elements(pattern_hash) == SUCCESS; - zend_hash_move_forward(pattern_hash)) { - -+#if PHP_VERSION_ID < 70000 - zend_hash_get_current_data(pattern_hash, (void **)&ppzval); - if (Z_TYPE_PP(ppzval) != IS_LONG) - convert_to_long(*ppzval); -+#else -+ ppzval = zend_hash_get_current_data(pattern_hash); -+ if (Z_TYPE_P(ppzval) != IS_DOUBLE) -+ convert_to_double(ppzval); -+#endif - - php_style->style->pattern[index] = Z_LVAL_PP(ppzval); - index++; -@@ -610,7 +617,7 @@ PHP_METHOD(styleObj, getPatternArray) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_style = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - array_init(return_value); - -@@ -646,7 +653,7 @@ void mapscript_create_style(styleObj *style, parent_object parent, zval *return_ - { - php_style_object * php_style; - object_init_ex(return_value, mapscript_ce_style); -- php_style = (php_style_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_style = MAPSCRIPT_OBJ_P(php_style_object, return_value); - php_style->style = style; - - php_style->parent = parent; -@@ -654,6 +661,79 @@ void mapscript_create_style(styleObj *style, parent_object parent, zval *return_ - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_style_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_style_object *php_style; -+ -+ php_style = ecalloc(1, sizeof(*php_style) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_style->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_style->zobj, ce); -+ -+ php_style->zobj.handlers = &mapscript_style_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_style->parent); -+ ZVAL_UNDEF(&php_style->color); -+ ZVAL_UNDEF(&php_style->outlinecolor); -+ ZVAL_UNDEF(&php_style->backgroundcolor); -+ -+ return &php_style->zobj; -+} -+ -+static void mapscript_style_free_object(zend_object *object) -+{ -+ php_style_object *php_style; -+ -+ php_style = (php_style_object *)((char *)object - XtOffsetOf(php_style_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_style->parent); -+ MAPSCRIPT_DELREF(php_style->color); -+ MAPSCRIPT_DELREF(php_style->outlinecolor); -+ MAPSCRIPT_DELREF(php_style->backgroundcolor); -+ -+ /* We don't need to free the styleObj, the mapObj will do it */ -+ -+ zend_object_std_dtor(object); -+} -+ -+static zend_object* mapscript_style_clone_object(zval *zobj) -+{ -+ php_style_object *php_style_old, *php_style_new; -+ zend_object* zobj_new; -+ -+ php_style_old = MAPSCRIPT_OBJ_P(php_style_object, zobj); -+ -+ zobj_new = mapscript_style_create_object(mapscript_ce_style); -+ php_style_new = (php_style_object *)((char *)zobj_new - XtOffsetOf(php_style_object, zobj)); -+ -+ zend_objects_clone_members(&php_style_new->zobj, &php_style_old->zobj); -+ -+ php_style_new->style = styleObj_clone(php_style_old->style); -+ -+ return zobj_new; -+} -+ -+PHP_MINIT_FUNCTION(style) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "styleObj", style_functions); -+ mapscript_ce_style = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_style->create_object = mapscript_style_create_object; -+ mapscript_ce_style->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_style_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_style_object_handlers)); -+ mapscript_style_object_handlers.free_obj = mapscript_style_free_object; -+ mapscript_style_object_handlers.clone_obj = mapscript_style_clone_object; -+ mapscript_style_object_handlers.offset = XtOffsetOf(php_style_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_style_object_destroy(void *object TSRMLS_DC) - { - php_style_object *php_style = (php_style_object *)object; -@@ -701,7 +781,7 @@ static zend_object_value mapscript_style_object_clone(zval *zobj TSRMLS_DC) - php_style_object *php_style_old, *php_style_new; - zend_object_value new_ov; - -- php_style_old = (php_style_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_style_old = MAPSCRIPT_OBJ_P(php_style_object, zobj); - - new_ov = mapscript_style_object_new_ex(mapscript_ce_style, &php_style_new TSRMLS_CC); - zend_objects_clone_members(&php_style_new->std, new_ov, &php_style_old->std, Z_OBJ_HANDLE_P(zobj) TSRMLS_CC); -@@ -727,4 +807,4 @@ PHP_MINIT_FUNCTION(style) - - return SUCCESS; - } -- -+#endif -diff --git a/mapscript/php/symbol.c b/mapscript/php/symbol.c -index 8b53ec9b5..6928e1168 100644 ---- a/mapscript/php/symbol.c -+++ b/mapscript/php/symbol.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_symbol; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_symbol_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(symbol___construct_args, 0, 0, 2) - ZEND_ARG_OBJ_INFO(0, map, mapObj, 0) -@@ -84,8 +87,8 @@ PHP_METHOD(symbolObj, __construct) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -- php_map = (php_map_object *)zend_object_store_get_object(zmap TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, getThis()); -+ php_map = MAPSCRIPT_OBJ_P(php_map_object, zmap); - - symbolId = msAddNewSymbol(php_map->map, symbolName); - -@@ -98,7 +101,7 @@ PHP_METHOD(symbolObj, __construct) - - MAPSCRIPT_MAKE_PARENT(zmap, NULL); - php_symbol->parent = parent; -- MAPSCRIPT_ADDREF(zmap); -+ MAPSCRIPT_ADDREF_P(zmap); - } - /* }}} */ - -@@ -117,7 +120,7 @@ PHP_METHOD(symbolObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj); - - IF_GET_STRING("name", php_symbol->symbol->name) - else IF_GET_LONG("type", php_symbol->symbol->type) -@@ -158,7 +161,7 @@ PHP_METHOD(symbolObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj); - - IF_SET_STRING("name", php_symbol->symbol->name, value) - else IF_SET_LONG("type", php_symbol->symbol->type, value) -@@ -188,7 +191,8 @@ PHP_METHOD(symbolObj, __set) - Set the points of the symbol ) */ - PHP_METHOD(symbolObj, setPoints) - { -- zval *zpoints, **ppzval; -+ zval *zpoints; -+ MAPSCRIPT_ZVAL_P ppzval; - HashTable *points_hash = NULL; - zval *zobj = getThis(); - int index = 0, flag = 0, numelements = 0; -@@ -202,7 +206,7 @@ PHP_METHOD(symbolObj, setPoints) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj); - points_hash = Z_ARRVAL_P(zpoints); - - numelements = zend_hash_num_elements(points_hash); -@@ -217,9 +221,15 @@ PHP_METHOD(symbolObj, setPoints) - zend_hash_has_more_elements(points_hash) == SUCCESS; - zend_hash_move_forward(points_hash)) { - -+#if PHP_VERSION_ID < 70000 - zend_hash_get_current_data(points_hash, (void **)&ppzval); - if (Z_TYPE_PP(ppzval) != IS_DOUBLE) - convert_to_double(*ppzval); -+#else -+ ppzval = zend_hash_get_current_data(points_hash); -+ if (Z_TYPE_P(ppzval) != IS_DOUBLE) -+ convert_to_double(ppzval); -+#endif - - if (!flag) { - php_symbol->symbol->points[index].x = Z_DVAL_PP(ppzval); -@@ -254,7 +264,7 @@ PHP_METHOD(symbolObj, getPointsArray) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj); - - array_init(return_value); - -@@ -287,7 +297,7 @@ PHP_METHOD(symbolObj, setImagePath) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, zobj); - - status = msLoadImageSymbol(php_symbol->symbol, filename); - -@@ -316,8 +326,8 @@ PHP_METHOD(symbolObj, setImage) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -- php_image = (php_image_object *)zend_object_store_get_object(zimage TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, getThis()); -+ php_image = MAPSCRIPT_OBJ_P(php_image_object, zimage); - - RETURN_LONG(symbolObj_setImage(php_symbol->symbol, php_image->image)); - } -@@ -341,9 +351,9 @@ PHP_METHOD(symbolObj, getImage) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_symbol = (php_symbol_object *)zend_object_store_get_object(getThis() TSRMLS_CC); -- php_map = (php_map_object *) zend_object_store_get_object(php_symbol->parent.val TSRMLS_CC); -- php_outputformat = (php_outputformat_object *)zend_object_store_get_object(zoutputformat TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, getThis()); -+ php_map = MAPSCRIPT_OBJ(php_map_object, php_symbol->parent.val); -+ php_outputformat = MAPSCRIPT_OBJ_P(php_outputformat_object, zoutputformat); - - image = symbolObj_getImage(php_symbol->symbol, php_outputformat->outputformat); - if (image == NULL) { -@@ -360,7 +370,7 @@ PHP_METHOD(symbolObj, getImage) - } /* }}} */ - - zend_function_entry symbol_functions[] = { -- PHP_ME(symbolObj, __construct, NULL, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) -+ PHP_ME(symbolObj, __construct, symbol___construct_args, ZEND_ACC_PUBLIC|ZEND_ACC_CTOR) - PHP_ME(symbolObj, __get, symbol___get_args, ZEND_ACC_PUBLIC) - PHP_ME(symbolObj, __set, symbol___set_args, ZEND_ACC_PUBLIC) - PHP_MALIAS(symbolObj, set, __set, NULL, ZEND_ACC_PUBLIC) -@@ -377,7 +387,7 @@ void mapscript_create_symbol(symbolObj *symbol, parent_object parent, zval *retu - { - php_symbol_object * php_symbol; - object_init_ex(return_value, mapscript_ce_symbol); -- php_symbol = (php_symbol_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_symbol = MAPSCRIPT_OBJ_P(php_symbol_object, return_value); - php_symbol->symbol = symbol; - - php_symbol->parent = parent; -@@ -385,6 +395,55 @@ void mapscript_create_symbol(symbolObj *symbol, parent_object parent, zval *retu - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_symbol_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_symbol_object *php_symbol; -+ -+ php_symbol = ecalloc(1, sizeof(*php_symbol) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_symbol->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_symbol->zobj, ce); -+ -+ php_symbol->zobj.handlers = &mapscript_symbol_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_symbol->parent); -+ -+ return &php_symbol->zobj; -+} -+ -+static void mapscript_symbol_free_object(zend_object *object) -+{ -+ php_symbol_object *php_symbol; -+ -+ php_symbol = (php_symbol_object *)((char *)object - XtOffsetOf(php_symbol_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_symbol->parent); -+ -+ /* We don't need to free the symbolObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(symbol) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "symbolObj", symbol_functions); -+ mapscript_ce_symbol = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_symbol->create_object = mapscript_symbol_create_object; -+ mapscript_ce_symbol->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_symbol_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_symbol_object_handlers)); -+ mapscript_symbol_object_handlers.free_obj = mapscript_symbol_free_object; -+ mapscript_symbol_object_handlers.offset = XtOffsetOf(php_symbol_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_symbol_object_destroy(void *object TSRMLS_DC) - { - php_symbol_object *php_symbol = (php_symbol_object *)object; -@@ -426,3 +485,4 @@ PHP_MINIT_FUNCTION(symbol) - - return SUCCESS; - } -+#endif -diff --git a/mapscript/php/web.c b/mapscript/php/web.c -index 51ec72f36..41f7c7cff 100644 ---- a/mapscript/php/web.c -+++ b/mapscript/php/web.c -@@ -32,6 +32,9 @@ - #include "php_mapscript.h" - - zend_class_entry *mapscript_ce_web; -+#if PHP_VERSION_ID >= 70000 -+zend_object_handlers mapscript_web_object_handlers; -+#endif - - ZEND_BEGIN_ARG_INFO_EX(web___get_args, 0, 0, 1) - ZEND_ARG_INFO(0, property) -@@ -69,7 +72,7 @@ PHP_METHOD(webObj, __get) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj); - - IF_GET_STRING("log", php_web->web->log) - else IF_GET_STRING("imagepath", php_web->web->imagepath) -@@ -111,7 +114,7 @@ PHP_METHOD(webObj, __set) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj); - - IF_SET_STRING("log", php_web->web->log, value) - else IF_SET_STRING("imagepath", php_web->web->imagepath, value) -@@ -157,7 +160,7 @@ PHP_METHOD(webObj, updateFromString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj); - - status = webObj_updateFromString(php_web->web, snippet); - -@@ -185,14 +188,14 @@ PHP_METHOD(webObj, convertToString) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj); - - value = webObj_convertToString(php_web->web); - - if (value == NULL) -- RETURN_STRING("", 1); -+ MAPSCRIPT_RETURN_STRING("", 1); - -- RETVAL_STRING(value, 1); -+ MAPSCRIPT_RETVAL_STRING(value, 1); - free(value); - } - /* }}} */ -@@ -211,7 +214,7 @@ PHP_METHOD(webObj, free) - } - PHP_MAPSCRIPT_RESTORE_ERRORS(TRUE); - -- php_web = (php_web_object *) zend_object_store_get_object(zobj TSRMLS_CC); -+ php_web = MAPSCRIPT_OBJ_P(php_web_object, zobj); - - MAPSCRIPT_DELREF(php_web->extent); - MAPSCRIPT_DELREF(php_web->metadata); -@@ -235,13 +238,68 @@ void mapscript_create_web(webObj *web, parent_object parent, zval *return_value - { - php_web_object * php_web; - object_init_ex(return_value, mapscript_ce_web); -- php_web = (php_web_object *)zend_object_store_get_object(return_value TSRMLS_CC); -+ php_web = MAPSCRIPT_OBJ_P(php_web_object, return_value); - php_web->web = web; - - php_web->parent = parent; - MAPSCRIPT_ADDREF(parent.val); - } - -+#if PHP_VERSION_ID >= 70000 -+/* PHP7 - Modification by Bjoern Boldt */ -+static zend_object *mapscript_web_create_object(zend_class_entry *ce TSRMLS_DC) -+{ -+ php_web_object *php_web; -+ -+ php_web = ecalloc(1, sizeof(*php_web) + zend_object_properties_size(ce)); -+ -+ zend_object_std_init(&php_web->zobj, ce TSRMLS_CC); -+ object_properties_init(&php_web->zobj, ce); -+ -+ php_web->zobj.handlers = &mapscript_web_object_handlers; -+ -+ MAPSCRIPT_INIT_PARENT(php_web->parent); -+ ZVAL_UNDEF(&php_web->extent); -+ ZVAL_UNDEF(&php_web->metadata); -+ ZVAL_UNDEF(&php_web->validation); -+ -+ return &php_web->zobj; -+} -+ -+static void mapscript_web_free_object(zend_object *object) -+{ -+ php_web_object *php_web; -+ -+ php_web = (php_web_object *)((char *)object - XtOffsetOf(php_web_object, zobj)); -+ -+ MAPSCRIPT_FREE_PARENT(php_web->parent); -+ MAPSCRIPT_DELREF(php_web->extent); -+ MAPSCRIPT_DELREF(php_web->metadata); -+ MAPSCRIPT_DELREF(php_web->validation); -+ -+ /* We don't need to free the webObj */ -+ -+ zend_object_std_dtor(object); -+} -+ -+PHP_MINIT_FUNCTION(web) -+{ -+ zend_class_entry ce; -+ -+ INIT_CLASS_ENTRY(ce, "webObj", web_functions); -+ mapscript_ce_web = zend_register_internal_class(&ce TSRMLS_CC); -+ -+ mapscript_ce_web->create_object = mapscript_web_create_object; -+ mapscript_ce_web->ce_flags |= ZEND_ACC_FINAL; -+ -+ memcpy(&mapscript_web_object_handlers, &mapscript_std_object_handlers, sizeof(mapscript_web_object_handlers)); -+ mapscript_web_object_handlers.free_obj = mapscript_web_free_object; -+ mapscript_web_object_handlers.offset = XtOffsetOf(php_web_object, zobj); -+ -+ return SUCCESS; -+} -+#else -+/* PHP5 */ - static void mapscript_web_object_destroy(void *object TSRMLS_DC) - { - php_web_object *php_web = (php_web_object *)object; -@@ -289,3 +347,4 @@ PHP_MINIT_FUNCTION(web) - - return SUCCESS; - } -+#endif - -From f54ce3a08f9a735b32b648b8be7dabd848965c88 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= -Date: Fri, 10 Nov 2017 14:43:20 +0100 -Subject: [PATCH 2/5] Fix bug in msQueryByFilter() - -Mapserver crashes in msQueryByFilter() if an error occurs (e.g. filteritem name is not a column name of the shape). We have to restore lp->filteritem and lp->filter. Why was this commented out? ---- - mapquery.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/mapquery.c b/mapquery.c -index a0766911d..3ff0ff6e1 100644 ---- a/mapquery.c -+++ b/mapquery.c -@@ -864,10 +864,10 @@ int msQueryByFilter(mapObj *map) - - query_error: - // msFree(lp->filteritem); -- // lp->filteritem = old_filteritem; -- // msCopyExpression(&lp->filter, &old_filter); /* restore old filter */ -- // msFreeExpression(&old_filter); -- // msLayerClose(lp); -+ lp->filteritem = old_filteritem; -+ msCopyExpression(&lp->filter, &old_filter); /* restore old filter */ -+ msFreeExpression(&old_filter); -+ msLayerClose(lp); - return MS_FAILURE; - } - - -From a5049b7ba8b2ab4c278cca1993566b3ef1b4cb9b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= -Date: Fri, 10 Nov 2017 15:16:14 +0100 -Subject: [PATCH 3/5] Update mapquery.c - ---- - mapquery.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/mapquery.c b/mapquery.c -index 3ff0ff6e1..34b483221 100644 ---- a/mapquery.c -+++ b/mapquery.c -@@ -736,7 +736,7 @@ int msQueryByFilter(mapObj *map) - paging = msLayerGetPaging(lp); - msLayerClose(lp); /* reset */ - status = msLayerOpen(lp); -- if(status != MS_SUCCESS) goto query_error; -+ if(status != MS_SUCCESS) return MS_FAILURE; - msLayerEnablePaging(lp, paging); - - /* disable driver paging */ - -From 54256aa1611a6c21e1a7e50ceaaaf9735bdbb7a3 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= -Date: Tue, 27 Mar 2018 10:07:21 +0200 -Subject: [PATCH 4/5] Moving function mapscript_create_legend - -Fixing error "undefined symbol: mapscript_create_legend" in PHP7 ---- - mapscript/php/legend.c | 22 +++++++++++----------- - 1 file changed, 11 insertions(+), 11 deletions(-) - -diff --git a/mapscript/php/legend.c b/mapscript/php/legend.c -index 29e080df7..742cc0c00 100644 ---- a/mapscript/php/legend.c -+++ b/mapscript/php/legend.c -@@ -220,6 +220,17 @@ zend_function_entry legend_functions[] = { - } - }; - -+void mapscript_create_legend(legendObj *legend, parent_object parent, zval *return_value TSRMLS_DC) -+{ -+ php_legend_object * php_legend; -+ object_init_ex(return_value, mapscript_ce_legend); -+ php_legend = MAPSCRIPT_OBJ_P(php_legend_object, return_value); -+ php_legend->legend = legend; -+ -+ php_legend->parent = parent; -+ MAPSCRIPT_ADDREF(parent.val); -+} -+ - - #if PHP_VERSION_ID >= 70000 - /* PHP7 - Modification by Bjoern Boldt */ -@@ -276,17 +287,6 @@ PHP_MINIT_FUNCTION(legend) - } - #else - /* PHP5 */ --void mapscript_create_legend(legendObj *legend, parent_object parent, zval *return_value TSRMLS_DC) --{ -- php_legend_object * php_legend; -- object_init_ex(return_value, mapscript_ce_legend); -- php_legend = MAPSCRIPT_OBJ_P(php_legend_object, return_value); -- php_legend->legend = legend; -- -- php_legend->parent = parent; -- MAPSCRIPT_ADDREF(parent.val); --} -- - static void mapscript_legend_object_destroy(void *object TSRMLS_DC) - { - php_legend_object *php_legend = (php_legend_object *)object; - -From fd3cbf6cb23c7a558893e7e11cde419049ea4fdf Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Bj=C3=B6rn=20Boldt?= -Date: Tue, 27 Mar 2018 15:24:51 +0200 -Subject: [PATCH 5/5] Moving function void mapscript_create_grid - ---- - mapscript/php/grid.c | 24 ++++++++++++------------ - 1 file changed, 12 insertions(+), 12 deletions(-) - -diff --git a/mapscript/php/grid.c b/mapscript/php/grid.c -index c13f54bc3..f57e91fe5 100644 ---- a/mapscript/php/grid.c -+++ b/mapscript/php/grid.c -@@ -176,6 +176,17 @@ zend_function_entry grid_functions[] = { - } - }; - -+void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC) -+{ -+ php_grid_object * php_grid; -+ object_init_ex(return_value, mapscript_ce_grid); -+ php_grid = MAPSCRIPT_OBJ_P(php_grid_object, return_value); -+ php_grid->grid = grid; -+ -+ php_grid->parent = parent; -+ MAPSCRIPT_ADDREF(parent.val); -+} -+ - #if PHP_VERSION_ID >= 70000 - /* PHP7 - Modification by Bjoern Boldt */ - static zend_object *mapscript_grid_create_object(zend_class_entry *ce TSRMLS_DC) -@@ -225,17 +236,6 @@ PHP_MINIT_FUNCTION(grid) - } - #else - /* PHP5 */ --void mapscript_create_grid(graticuleObj *grid, parent_object parent, zval *return_value TSRMLS_DC) --{ -- php_grid_object * php_grid; -- object_init_ex(return_value, mapscript_ce_grid); -- php_grid = MAPSCRIPT_OBJ_P(php_grid_object, return_value); -- php_grid->grid = grid; -- -- php_grid->parent = parent; -- MAPSCRIPT_ADDREF(parent.val); --} -- - static void mapscript_grid_object_destroy(void *object TSRMLS_DC) - { - php_grid_object *php_grid = (php_grid_object *)object; -@@ -277,4 +277,4 @@ PHP_MINIT_FUNCTION(grid) - - return SUCCESS; - } --#endif -\ No newline at end of file -+#endif diff --git a/cmake-3.12.patch b/cmake-3.12.patch deleted file mode 100644 index 687198d..0000000 --- a/cmake-3.12.patch +++ /dev/null @@ -1,73 +0,0 @@ -Description: Fix errors with CMake 3.12 for get_target_property commands. -Author: Bas Couwenberg -Bug: https://github.com/mapserver/mapserver/issues/5646 -Bug-Debian: https://bugs.debian.org/906605 - ---- a/mapscript/java/CMakeLists.txt -+++ b/mapscript/java/CMakeLists.txt -@@ -42,6 +42,14 @@ ADD_CUSTOM_COMMAND(TARGET javamapscript - COMMENT "Compiling java source files, creating mapscript.jar" - ) - -+# Workaround for CMake 3.12 error: -+# -+# The LOCATION property may not be read from target "foo". Use -+# the target name directly with add_custom_command, or use the generator -+# expression $, as appropriate. -+ -+cmake_policy(SET CMP0026 OLD) -+ - get_target_property(LOC_MAPSCRIPT_LIB ${SWIG_MODULE_javamapscript_REAL_NAME} LOCATION) - install(FILES ${LOC_MAPSCRIPT_LIB} DESTINATION lib/jni) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/mapscript.jar DESTINATION share/java) ---- a/mapscript/perl/CMakeLists.txt -+++ b/mapscript/perl/CMakeLists.txt -@@ -18,6 +18,14 @@ if(APPLE) - set_target_properties(perlmapscript PROPERTIES SUFFIX ".bundle") - endif(APPLE) - -+# Workaround for CMake 3.12 error: -+# -+# The LOCATION property may not be read from target "foo". Use -+# the target name directly with add_custom_command, or use the generator -+# expression $, as appropriate. -+ -+cmake_policy(SET CMP0026 OLD) -+ - get_target_property(LOC_MAPSCRIPT_LIB ${SWIG_MODULE_perlmapscript_REAL_NAME} LOCATION) - set(mapscript_files ${LOC_MAPSCRIPT_LIB} ${CMAKE_CURRENT_BINARY_DIR}/mapscript.pm) - install(FILES ${LOC_MAPSCRIPT_LIB} DESTINATION ${CUSTOM_PERL_VENDOR_ARCH_DIR}/auto/mapscript) ---- a/mapscript/python/CMakeLists.txt -+++ b/mapscript/python/CMakeLists.txt -@@ -39,6 +39,14 @@ set_target_properties(${SWIG_MODULE_pyth - - execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "from distutils.sysconfig import get_python_lib; print(get_python_lib(True))" OUTPUT_VARIABLE PYTHON_SITE_PACKAGES OUTPUT_STRIP_TRAILING_WHITESPACE) - -+# Workaround for CMake 3.12 error: -+# -+# The LOCATION property may not be read from target "foo". Use -+# the target name directly with add_custom_command, or use the generator -+# expression $, as appropriate. -+ -+cmake_policy(SET CMP0026 OLD) -+ - get_target_property(LOC_MAPSCRIPT_LIB ${SWIG_MODULE_pythonmapscript_REAL_NAME} LOCATION) - set(mapscript_files ${LOC_MAPSCRIPT_LIB} ${CMAKE_CURRENT_BINARY_DIR}/mapscript.py) - install(FILES ${mapscript_files} DESTINATION ${PYTHON_SITE_PACKAGES}) ---- a/mapscript/ruby/CMakeLists.txt -+++ b/mapscript/ruby/CMakeLists.txt -@@ -32,6 +32,14 @@ if(APPLE) - set_target_properties(${SWIG_MODULE_rubymapscript_REAL_NAME} PROPERTIES SUFFIX ".bundle") - endif(APPLE) - -+# Workaround for CMake 3.12 error: -+# -+# The LOCATION property may not be read from target "foo". Use -+# the target name directly with add_custom_command, or use the generator -+# expression $, as appropriate. -+ -+cmake_policy(SET CMP0026 OLD) -+ - get_target_property(LOC_MAPSCRIPT_LIB ${SWIG_MODULE_rubymapscript_REAL_NAME} LOCATION) - execute_process(COMMAND ${RUBY_EXECUTABLE} -r rbconfig -e "puts RbConfig::CONFIG['vendorarchdir']" OUTPUT_VARIABLE RUBY_VENDORARCHDIR OUTPUT_STRIP_TRAILING_WHITESPACE) - install(FILES ${LOC_MAPSCRIPT_LIB} DESTINATION ${RUBY_VENDORARCHDIR}) diff --git a/mapserver-7.2.0.tar.gz b/mapserver-7.2.0.tar.gz deleted file mode 100644 index dd29366..0000000 --- a/mapserver-7.2.0.tar.gz +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:806ee58421f1c6cceea65e4764524b68e9e3ff6d1ebfe6767b51718dbec43c73 -size 2676080 diff --git a/mapserver-7.4.0.tar.gz b/mapserver-7.4.0.tar.gz new file mode 100644 index 0000000..7f8757b --- /dev/null +++ b/mapserver-7.4.0.tar.gz @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:fc714f5836023fd39005296665c562022fa294348ecc244b93647b3ba1e361f5 +size 2686054 diff --git a/mapserver.changes b/mapserver.changes index d1d4653..06a7d38 100644 --- a/mapserver.changes +++ b/mapserver.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Fri May 17 09:05:04 UTC 2019 - Dirk Stoecker + +- update to version 7.4.0 + * MS RFC 117: PHP 7 MapScript Support Through SWIG + * native support for PHP 7 through mapscript (461f827) + * Fix potential cross-site scripting (XSS) security issue with + [layers] tag + * enhanced support for Python 3 mapscript through SWIG + * Allow compiling with PROJ 6, but full PROJ 6 support will be + included in the future MapServer 8 release (#5766) +- Drop 5461.patch and cmake-3.12.patch included upstream + ------------------------------------------------------------------- Thu Sep 13 09:28:34 UTC 2018 - Dirk Stoecker diff --git a/mapserver.spec b/mapserver.spec index 6211506..c82927a 100644 --- a/mapserver.spec +++ b/mapserver.spec @@ -28,18 +28,13 @@ %endif Name: mapserver -Version: 7.2.0 +Version: 7.4.0 Release: 0 Summary: Environment for building spatially-enabled internet applications License: MIT Group: Productivity/Networking/Web/Servers Url: https://www.mapserver.org/ Source: https://download.osgeo.org/mapserver/%{name}-%{version}.tar.gz -# PATCH-FIX-UPSTREAM Fix PHP7 support -# https://patch-diff.githubusercontent.com/raw/mapserver/mapserver/pull/5461.patch -Patch1: 5461.patch -# PATCH-FIX-UPSTREAM https://github.com/mapserver/mapserver/issues/5646 -Patch2: https://salsa.debian.org/debian-gis-team/mapserver/raw/a039ff238258e7c3b9206b4a55d5d46eb4289dbd/debian/patches/cmake-3.12.patch BuildRequires: FastCGI-devel BuildRequires: apache2-devel BuildRequires: autoconf @@ -200,7 +195,6 @@ against the C Mapserver library. %prep %setup -q -n %{name}-%{version} %global _default_patch_fuzz 5 -%autopatch -p1 %build mkdir build