]>
Commit | Line | Data |
---|---|---|
ccc0fb6d JB |
1 | --- geos-3.5.0/php/geos.c.orig 2015-08-14 20:23:15.000000000 +0200 |
2 | +++ geos-3.5.0/php/geos.c 2016-03-18 22:08:27.255515276 +0100 | |
3 | @@ -48,6 +48,21 @@ | |
4 | #define zend_function_entry function_entry | |
5 | #endif | |
6 | ||
7 | +#if PHP_MAJOR_VERSION >= 7 | |
8 | +#define zend_uint zend_ulong | |
9 | +#define PHP_RETURN_STRING(x, n) RETURN_STRING(x) | |
10 | +#define PHP_RETURN_STRINGL(x, l, n) RETURN_STRINGL(x, l) | |
11 | +#define php_zend_hash_get_current_key(s, k, i, n) zend_hash_get_current_key(s, k, i) | |
12 | +#define php_add_assoc_string(rv, res, resv, n) add_assoc_string(rv, res, resv) | |
13 | +#define PHP_KEY_VAL(key) ZSTR_VAL(key) | |
14 | +#else | |
15 | +#define PHP_RETURN_STRING(x, n) RETURN_STRING(x, n) | |
16 | +#define PHP_RETURN_STRINGL(x, l, n) RETURN_STRINGL(x, l, n) | |
17 | +#define php_zend_hash_get_current_key(s, k, i, n) zend_hash_get_current_key(s, k, i, n) | |
18 | +#define php_add_assoc_string(rv, res, resv, n) add_assoc_string(rv, res, resv, n) | |
19 | +#define PHP_KEY_VAL(key) (key) | |
20 | +#endif | |
21 | + | |
22 | static zend_function_entry geos_functions[] = { | |
23 | PHP_FE(GEOSVersion, NULL) | |
24 | PHP_FE(GEOSPolygonize, NULL) | |
25 | @@ -104,21 +119,34 @@ | |
26 | } | |
27 | ||
28 | typedef struct Proxy_t { | |
29 | +#if PHP_MAJOR_VERSION >= 7 | |
30 | + void* relay; | |
31 | + zend_object std; | |
32 | +#else | |
33 | zend_object std; | |
34 | void* relay; | |
35 | +#endif | |
36 | } Proxy; | |
37 | ||
38 | static void | |
39 | setRelay(zval* val, void* obj) { | |
40 | TSRMLS_FETCH(); | |
41 | +#if PHP_MAJOR_VERSION >= 7 | |
42 | + Proxy* proxy = (Proxy*)((char*)(Z_OBJ_P(val)) - XtOffsetOf(Proxy, std)); | |
43 | +#else | |
44 | Proxy* proxy = (Proxy*)zend_object_store_get_object(val TSRMLS_CC); | |
45 | +#endif | |
46 | proxy->relay = obj; | |
47 | } | |
48 | ||
49 | static inline void * | |
50 | getRelay(zval* val, zend_class_entry* ce) { | |
51 | TSRMLS_FETCH(); | |
52 | - Proxy *proxy = (Proxy*)zend_object_store_get_object(val TSRMLS_CC); | |
53 | +#if PHP_MAJOR_VERSION >= 7 | |
54 | + Proxy* proxy = (Proxy*)((char*)(Z_OBJ_P(val)) - XtOffsetOf(Proxy, std)); | |
55 | +#else | |
56 | + Proxy* proxy = (Proxy*)zend_object_store_get_object(val TSRMLS_CC); | |
57 | +#endif | |
58 | if ( proxy->std.ce != ce ) { | |
59 | php_error_docref(NULL TSRMLS_CC, E_ERROR, | |
60 | "Relay object is not an %s", ce->name); | |
61 | @@ -156,16 +184,29 @@ | |
62 | return ret; | |
63 | } | |
64 | ||
65 | +#if PHP_MAJOR_VERSION >= 7 | |
66 | +static zend_object * | |
67 | +#else | |
68 | static zend_object_value | |
69 | +#endif | |
70 | Gen_create_obj (zend_class_entry *type, | |
71 | - zend_objects_free_object_storage_t st, zend_object_handlers* handlers) | |
72 | +#if PHP_MAJOR_VERSION < 7 | |
73 | + zend_objects_free_object_storage_t st, | |
74 | +#endif | |
75 | + zend_object_handlers* handlers) | |
76 | { | |
77 | TSRMLS_FETCH(); | |
78 | +#if PHP_MAJOR_VERSION < 7 | |
79 | zend_object_value retval; | |
80 | +#endif | |
81 | ||
82 | - Proxy *obj = (Proxy *)emalloc(sizeof(Proxy)); | |
83 | - memset(obj, 0, sizeof(Proxy)); | |
84 | +#if PHP_MAJOR_VERSION >= 7 | |
85 | + Proxy *obj = (Proxy *)ecalloc(1, sizeof(Proxy) + zend_object_properties_size(type)); | |
86 | + zend_object_std_init(&obj->std, type); | |
87 | +#else | |
88 | + Proxy *obj = (Proxy *)ecalloc(1, sizeof(Proxy)); | |
89 | obj->std.ce = type; | |
90 | +#endif | |
91 | ||
92 | ALLOC_HASHTABLE(obj->std.properties); | |
93 | zend_hash_init(obj->std.properties, 0, NULL, ZVAL_PTR_DTOR, 0); | |
94 | @@ -176,10 +217,14 @@ | |
95 | object_properties_init(&(obj->std), type); | |
96 | #endif | |
97 | ||
98 | +#if PHP_MAJOR_VERSION >= 7 | |
99 | + return &obj->std; | |
100 | +#else | |
101 | retval.handle = zend_objects_store_put(obj, NULL, st, NULL TSRMLS_CC); | |
102 | retval.handlers = handlers; | |
103 | ||
104 | return retval; | |
105 | +#endif | |
106 | } | |
107 | ||
108 | ||
109 | @@ -364,9 +409,15 @@ | |
110 | ||
111 | /* Serializer function for GEOSGeometry */ | |
112 | ||
113 | +#if PHP_MAJOR_VERSION >= 7 | |
114 | +static int | |
115 | +Geometry_serialize(zval *object, unsigned char **buffer, size_t *buf_len, | |
116 | + zend_serialize_data *data TSRMLS_DC) | |
117 | +#else | |
118 | static int | |
119 | Geometry_serialize(zval *object, unsigned char **buffer, zend_uint *buf_len, | |
120 | zend_serialize_data *data TSRMLS_DC) | |
121 | +#endif | |
122 | { | |
123 | GEOSWKBWriter *serializer; | |
124 | GEOSGeometry *geom; | |
125 | @@ -390,9 +441,15 @@ | |
126 | return SUCCESS; | |
127 | } | |
128 | ||
129 | +#if PHP_MAJOR_VERSION >= 7 | |
130 | +static int | |
131 | +Geometry_deserialize(zval *object, zend_class_entry *ce, const unsigned char *buf, | |
132 | + size_t buf_len, zend_unserialize_data *data TSRMLS_DC) | |
133 | +#else | |
134 | static int | |
135 | Geometry_deserialize(zval **object, zend_class_entry *ce, const unsigned char *buf, | |
136 | zend_uint buf_len, zend_unserialize_data *data TSRMLS_DC) | |
137 | +#endif | |
138 | { | |
139 | GEOSWKBReader* deserializer; | |
140 | GEOSGeometry* geom; | |
141 | @@ -406,8 +463,13 @@ | |
142 | "Geometry_deserialize called with unexpected zend_class_entry"); | |
143 | return FAILURE; | |
144 | } | |
145 | +#if PHP_MAJOR_VERSION >= 7 | |
146 | + object_init_ex(object, ce); | |
147 | + setRelay(object, geom); | |
148 | +#else | |
149 | object_init_ex(*object, ce); | |
150 | setRelay(*object, geom); | |
151 | +#endif | |
152 | ||
153 | return SUCCESS; | |
154 | } | |
155 | @@ -432,7 +494,11 @@ | |
156 | ngeoms = GEOSGetNumGeometries(g); | |
157 | for (i=0; i<ngeoms; ++i) | |
158 | { | |
159 | +#if PHP_MAJOR_VERSION >= 7 | |
160 | + zval tmp; | |
161 | +#else | |
162 | zval *tmp; | |
163 | +#endif | |
164 | GEOSGeometry* cc; | |
165 | const GEOSGeometry* c = GEOSGetGeometryN(g, i); | |
166 | if ( ! c ) continue; /* should get an exception */ | |
167 | @@ -440,14 +506,30 @@ | |
168 | cc = GEOSGeom_clone(c); | |
169 | if ( ! cc ) continue; /* should get an exception */ | |
170 | ||
171 | +#if PHP_MAJOR_VERSION >= 7 | |
172 | + object_init_ex(&tmp, Geometry_ce_ptr); | |
173 | + setRelay(&tmp, cc); | |
174 | + add_next_index_zval(array, &tmp); | |
175 | +#else | |
176 | MAKE_STD_ZVAL(tmp); | |
177 | object_init_ex(tmp, Geometry_ce_ptr); | |
178 | setRelay(tmp, cc); | |
179 | add_next_index_zval(array, tmp); | |
180 | +#endif | |
181 | } | |
182 | } | |
183 | ||
184 | ||
185 | +#if PHP_MAJOR_VERSION >= 7 | |
186 | +static void | |
187 | +Geometry_dtor (zend_object *object TSRMLS_DC) | |
188 | +{ | |
189 | + Proxy *obj = (Proxy *)((char*)object - XtOffsetOf(Proxy, std)); | |
190 | + GEOSGeom_destroy((GEOSGeometry*)obj->relay); | |
191 | + | |
192 | + zend_object_std_dtor(object); | |
193 | +} | |
194 | +#else | |
195 | static void | |
196 | Geometry_dtor (void *object TSRMLS_DC) | |
197 | { | |
198 | @@ -459,13 +541,21 @@ | |
199 | ||
200 | efree(obj); | |
201 | } | |
202 | +#endif | |
203 | ||
204 | +#if PHP_MAJOR_VERSION >= 7 | |
205 | +static zend_object * | |
206 | +Geometry_create_obj (zend_class_entry *type TSRMLS_DC) | |
207 | +{ | |
208 | + return Gen_create_obj(type, &Geometry_object_handlers); | |
209 | +} | |
210 | +#else | |
211 | static zend_object_value | |
212 | Geometry_create_obj (zend_class_entry *type TSRMLS_DC) | |
213 | { | |
214 | return Gen_create_obj(type, Geometry_dtor, &Geometry_object_handlers); | |
215 | } | |
216 | - | |
217 | +#endif | |
218 | ||
219 | PHP_METHOD(Geometry, __construct) | |
220 | { | |
221 | @@ -500,7 +590,7 @@ | |
222 | ret = estrdup(wkt); | |
223 | GEOSFree(wkt); | |
224 | ||
225 | - RETURN_STRING(ret, 0); | |
226 | + PHP_RETURN_STRING(ret, 0); | |
227 | } | |
228 | ||
229 | PHP_METHOD(Geometry, project) | |
230 | @@ -595,10 +685,16 @@ | |
231 | double mitreLimit = default_mitreLimit; | |
232 | long singleSided = 0; | |
233 | zval *style_val = NULL; | |
234 | +#if PHP_MAJOR_VERSION >= 7 | |
235 | + zval *data; | |
236 | + zend_string *key; | |
237 | + zend_ulong index; | |
238 | +#else | |
239 | zval **data; | |
240 | - HashTable *style; | |
241 | char *key; | |
242 | ulong index; | |
243 | +#endif | |
244 | + HashTable *style; | |
245 | ||
246 | this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); | |
247 | ||
248 | @@ -612,37 +708,62 @@ | |
249 | if ( style_val ) | |
250 | { | |
251 | style = HASH_OF(style_val); | |
252 | - while(zend_hash_get_current_key(style, &key, &index, 0) | |
253 | + while(php_zend_hash_get_current_key(style, &key, &index, 0) | |
254 | == HASH_KEY_IS_STRING) | |
255 | { | |
256 | - if(!strcmp(key, "quad_segs")) | |
257 | + if(!strcmp(PHP_KEY_VAL(key), "quad_segs")) | |
258 | { | |
259 | +#if PHP_MAJOR_VERSION >= 7 | |
260 | + data = zend_hash_get_current_data(style); | |
261 | + quadSegs = getZvalAsLong(data); | |
262 | +#else | |
263 | zend_hash_get_current_data(style, (void**)&data); | |
264 | quadSegs = getZvalAsLong(*data); | |
265 | +#endif | |
266 | GEOSBufferParams_setQuadrantSegments(params, quadSegs); | |
267 | } | |
268 | - else if(!strcmp(key, "endcap")) | |
269 | + else if(!strcmp(PHP_KEY_VAL(key), "endcap")) | |
270 | { | |
271 | +#if PHP_MAJOR_VERSION >= 7 | |
272 | + data = zend_hash_get_current_data(style); | |
273 | + endCapStyle = getZvalAsLong(data); | |
274 | +#else | |
275 | zend_hash_get_current_data(style, (void**)&data); | |
276 | endCapStyle = getZvalAsLong(*data); | |
277 | +#endif | |
278 | GEOSBufferParams_setEndCapStyle(params, endCapStyle); | |
279 | } | |
280 | - else if(!strcmp(key, "join")) | |
281 | + else if(!strcmp(PHP_KEY_VAL(key), "join")) | |
282 | { | |
283 | +#if PHP_MAJOR_VERSION >= 7 | |
284 | + data = zend_hash_get_current_data(style); | |
285 | + joinStyle = getZvalAsLong(data); | |
286 | +#else | |
287 | zend_hash_get_current_data(style, (void**)&data); | |
288 | joinStyle = getZvalAsLong(*data); | |
289 | +#endif | |
290 | GEOSBufferParams_setJoinStyle(params, joinStyle); | |
291 | } | |
292 | - else if(!strcmp(key, "mitre_limit")) | |
293 | + else if(!strcmp(PHP_KEY_VAL(key), "mitre_limit")) | |
294 | { | |
295 | +#if PHP_MAJOR_VERSION >= 7 | |
296 | + data = zend_hash_get_current_data(style); | |
297 | + mitreLimit = getZvalAsDouble(data); | |
298 | +#else | |
299 | zend_hash_get_current_data(style, (void**)&data); | |
300 | mitreLimit = getZvalAsDouble(*data); | |
301 | +#endif | |
302 | GEOSBufferParams_setMitreLimit(params, mitreLimit); | |
303 | } | |
304 | - else if(!strcmp(key, "single_sided")) | |
305 | + else if(!strcmp(PHP_KEY_VAL(key), "single_sided")) | |
306 | { | |
307 | +#if PHP_MAJOR_VERSION >= 7 | |
308 | + data = zend_hash_get_current_data(style); | |
309 | + singleSided = getZvalAsLong(data); | |
310 | +#else | |
311 | zend_hash_get_current_data(style, (void**)&data); | |
312 | singleSided = getZvalAsLong(*data); | |
313 | +#endif | |
314 | GEOSBufferParams_setSingleSided(params, singleSided); | |
315 | } | |
316 | ||
317 | @@ -687,10 +808,16 @@ | |
318 | long int joinStyle = default_joinStyle; | |
319 | double mitreLimit = default_mitreLimit; | |
320 | zval *style_val = NULL; | |
321 | +#if PHP_MAJOR_VERSION >= 7 | |
322 | + zval *data; | |
323 | + zend_string *key; | |
324 | + zend_ulong index; | |
325 | +#else | |
326 | zval **data; | |
327 | - HashTable *style; | |
328 | char *key; | |
329 | ulong index; | |
330 | +#endif | |
331 | + HashTable *style; | |
332 | ||
333 | this = (GEOSGeometry*)getRelay(getThis(), Geometry_ce_ptr); | |
334 | ||
335 | @@ -702,23 +829,38 @@ | |
336 | if ( style_val ) | |
337 | { | |
338 | style = HASH_OF(style_val); | |
339 | - while(zend_hash_get_current_key(style, &key, &index, 0) | |
340 | + while(php_zend_hash_get_current_key(style, &key, &index, 0) | |
341 | == HASH_KEY_IS_STRING) | |
342 | { | |
343 | - if(!strcmp(key, "quad_segs")) | |
344 | + if(!strcmp(PHP_KEY_VAL(key), "quad_segs")) | |
345 | { | |
346 | +#if PHP_MAJOR_VERSION >= 7 | |
347 | + data = zend_hash_get_current_data(style); | |
348 | + quadSegs = getZvalAsLong(data); | |
349 | +#else | |
350 | zend_hash_get_current_data(style, (void**)&data); | |
351 | quadSegs = getZvalAsLong(*data); | |
352 | +#endif | |
353 | } | |
354 | - else if(!strcmp(key, "join")) | |
355 | + else if(!strcmp(PHP_KEY_VAL(key), "join")) | |
356 | { | |
357 | +#if PHP_MAJOR_VERSION >= 7 | |
358 | + data = zend_hash_get_current_data(style); | |
359 | + joinStyle = getZvalAsLong(data); | |
360 | +#else | |
361 | zend_hash_get_current_data(style, (void**)&data); | |
362 | joinStyle = getZvalAsLong(*data); | |
363 | +#endif | |
364 | } | |
365 | - else if(!strcmp(key, "mitre_limit")) | |
366 | + else if(!strcmp(PHP_KEY_VAL(key), "mitre_limit")) | |
367 | { | |
368 | +#if PHP_MAJOR_VERSION >= 7 | |
369 | + data = zend_hash_get_current_data(style); | |
370 | + mitreLimit = getZvalAsDouble(data); | |
371 | +#else | |
372 | zend_hash_get_current_data(style, (void**)&data); | |
373 | mitreLimit = getZvalAsDouble(*data); | |
374 | +#endif | |
375 | } | |
376 | ||
377 | zend_hash_move_forward(style); | |
378 | @@ -970,7 +1112,7 @@ | |
379 | if ( ! pat ) RETURN_NULL(); /* should get an exception first */ | |
380 | retStr = estrdup(pat); | |
381 | GEOSFree(pat); | |
382 | - RETURN_STRING(retStr, 0); | |
383 | + PHP_RETURN_STRING(retStr, 0); | |
384 | } else { | |
385 | retInt = GEOSRelatePattern(this, other, pat); | |
386 | if ( retInt == 2 ) RETURN_NULL(); /* should get an exception first */ | |
387 | @@ -1007,7 +1149,7 @@ | |
388 | if ( ! pat ) RETURN_NULL(); /* should get an exception first */ | |
389 | retStr = estrdup(pat); | |
390 | GEOSFree(pat); | |
391 | - RETURN_STRING(retStr, 0); | |
392 | + PHP_RETURN_STRING(retStr, 0); | |
393 | } | |
394 | ||
395 | /** | |
396 | @@ -1409,6 +1551,9 @@ | |
397 | char *reason = NULL; | |
398 | zend_bool retBool; | |
399 | char *reasonVal = NULL; | |
400 | +#if PHP_MAJOR_VERSION >= 7 | |
401 | + zval locationValS; | |
402 | +#endif | |
403 | zval *locationVal = NULL; | |
404 | long int flags = 0; | |
405 | ||
406 | @@ -1428,7 +1573,11 @@ | |
407 | } | |
408 | ||
409 | if ( location ) { | |
410 | +#if PHP_MAJOR_VERSION >= 7 | |
411 | + locationVal = &locationValS; | |
412 | +#else | |
413 | MAKE_STD_ZVAL(locationVal); | |
414 | +#endif | |
415 | object_init_ex(locationVal, Geometry_ce_ptr); | |
416 | setRelay(locationVal, location); | |
417 | } | |
418 | @@ -1438,7 +1587,7 @@ | |
419 | /* return value is an array */ | |
420 | array_init(return_value); | |
421 | add_assoc_bool(return_value, "valid", retBool); | |
422 | - if ( reasonVal ) add_assoc_string(return_value, "reason", reasonVal, 0); | |
423 | + if ( reasonVal ) php_add_assoc_string(return_value, "reason", reasonVal, 0); | |
424 | if ( locationVal ) add_assoc_zval(return_value, "location", locationVal); | |
425 | ||
426 | } | |
427 | @@ -1538,7 +1687,7 @@ | |
428 | typVal = estrdup(typ); | |
429 | GEOSFree(typ); | |
430 | ||
431 | - RETURN_STRING(typVal, 0); | |
432 | + PHP_RETURN_STRING(typVal, 0); | |
433 | } | |
434 | ||
435 | /** | |
436 | @@ -1999,6 +2148,16 @@ | |
437 | ||
438 | static zend_object_handlers WKTReader_object_handlers; | |
439 | ||
440 | +#if PHP_MAJOR_VERSION >= 7 | |
441 | +static void | |
442 | +WKTReader_dtor (zend_object *object TSRMLS_DC) | |
443 | +{ | |
444 | + Proxy *obj = (Proxy *)((char*)object - XtOffsetOf(Proxy, std)); | |
445 | + GEOSWKTReader_destroy((GEOSWKTReader*)obj->relay); | |
446 | + | |
447 | + zend_object_std_dtor(object); | |
448 | +} | |
449 | +#else | |
450 | static void | |
451 | WKTReader_dtor (void *object TSRMLS_DC) | |
452 | { | |
453 | @@ -2010,12 +2169,21 @@ | |
454 | ||
455 | efree(obj); | |
456 | } | |
457 | +#endif | |
458 | ||
459 | +#if PHP_MAJOR_VERSION >= 7 | |
460 | +static zend_object * | |
461 | +WKTReader_create_obj (zend_class_entry *type TSRMLS_DC) | |
462 | +{ | |
463 | + return Gen_create_obj(type, &WKTReader_object_handlers); | |
464 | +} | |
465 | +#else | |
466 | static zend_object_value | |
467 | WKTReader_create_obj (zend_class_entry *type TSRMLS_DC) | |
468 | { | |
469 | return Gen_create_obj(type, WKTReader_dtor, &WKTReader_object_handlers); | |
470 | } | |
471 | +#endif | |
472 | ||
473 | ||
474 | PHP_METHOD(WKTReader, __construct) | |
475 | @@ -2082,6 +2250,16 @@ | |
476 | ||
477 | static zend_object_handlers WKTWriter_object_handlers; | |
478 | ||
479 | +#if PHP_MAJOR_VERSION >= 7 | |
480 | +static void | |
481 | +WKTWriter_dtor (zend_object *object TSRMLS_DC) | |
482 | +{ | |
483 | + Proxy *obj = (Proxy *)((char*)object - XtOffsetOf(Proxy, std)); | |
484 | + GEOSWKTWriter_destroy((GEOSWKTWriter*)obj->relay); | |
485 | + | |
486 | + zend_object_std_dtor(object); | |
487 | +} | |
488 | +#else | |
489 | static void | |
490 | WKTWriter_dtor (void *object TSRMLS_DC) | |
491 | { | |
492 | @@ -2093,12 +2271,21 @@ | |
493 | ||
494 | efree(obj); | |
495 | } | |
496 | +#endif | |
497 | ||
498 | +#if PHP_MAJOR_VERSION >= 7 | |
499 | +static zend_object * | |
500 | +WKTWriter_create_obj (zend_class_entry *type TSRMLS_DC) | |
501 | +{ | |
502 | + return Gen_create_obj(type, &WKTWriter_object_handlers); | |
503 | +} | |
504 | +#else | |
505 | static zend_object_value | |
506 | WKTWriter_create_obj (zend_class_entry *type TSRMLS_DC) | |
507 | { | |
508 | return Gen_create_obj(type, WKTWriter_dtor, &WKTWriter_object_handlers); | |
509 | } | |
510 | +#endif | |
511 | ||
512 | PHP_METHOD(WKTWriter, __construct) | |
513 | { | |
514 | @@ -2139,7 +2326,7 @@ | |
515 | retstr = estrdup(wkt); | |
516 | GEOSFree(wkt); | |
517 | ||
518 | - RETURN_STRING(retstr, 0); | |
519 | + PHP_RETURN_STRING(retstr, 0); | |
520 | } | |
521 | ||
522 | PHP_METHOD(WKTWriter, setTrim) | |
523 | @@ -2257,6 +2444,16 @@ | |
524 | ||
525 | static zend_object_handlers WKBWriter_object_handlers; | |
526 | ||
527 | +#if PHP_MAJOR_VERSION >= 7 | |
528 | +static void | |
529 | +WKBWriter_dtor (zend_object *object TSRMLS_DC) | |
530 | +{ | |
531 | + Proxy *obj = (Proxy *)((char*)object - XtOffsetOf(Proxy, std)); | |
532 | + GEOSWKBWriter_destroy((GEOSWKBWriter*)obj->relay); | |
533 | + | |
534 | + zend_object_std_dtor(object); | |
535 | +} | |
536 | +#else | |
537 | static void | |
538 | WKBWriter_dtor (void *object TSRMLS_DC) | |
539 | { | |
540 | @@ -2268,12 +2465,21 @@ | |
541 | ||
542 | efree(obj); | |
543 | } | |
544 | +#endif | |
545 | ||
546 | +#if PHP_MAJOR_VERSION >= 7 | |
547 | +static zend_object * | |
548 | +WKBWriter_create_obj (zend_class_entry *type TSRMLS_DC) | |
549 | +{ | |
550 | + return Gen_create_obj(type, &WKBWriter_object_handlers); | |
551 | +} | |
552 | +#else | |
553 | static zend_object_value | |
554 | WKBWriter_create_obj (zend_class_entry *type TSRMLS_DC) | |
555 | { | |
556 | return Gen_create_obj(type, WKBWriter_dtor, &WKBWriter_object_handlers); | |
557 | } | |
558 | +#endif | |
559 | ||
560 | /** | |
561 | * GEOSWKBWriter w = new GEOSWKBWriter() | |
562 | @@ -2356,7 +2562,7 @@ | |
563 | retstr = estrndup(ret, retsize); | |
564 | GEOSFree(ret); | |
565 | ||
566 | - RETURN_STRINGL(retstr, retsize, 0); | |
567 | + PHP_RETURN_STRINGL(retstr, retsize, 0); | |
568 | } | |
569 | ||
570 | /** | |
571 | @@ -2388,7 +2594,7 @@ | |
572 | retstr = estrndup(ret, retsize); | |
573 | GEOSFree(ret); | |
574 | ||
575 | - RETURN_STRING(retstr, 0); | |
576 | + PHP_RETURN_STRING(retstr, 0); | |
577 | } | |
578 | ||
579 | /** | |
580 | @@ -2481,6 +2687,16 @@ | |
581 | ||
582 | static zend_object_handlers WKBReader_object_handlers; | |
583 | ||
584 | +#if PHP_MAJOR_VERSION >= 7 | |
585 | +static void | |
586 | +WKBReader_dtor (zend_object *object TSRMLS_DC) | |
587 | +{ | |
588 | + Proxy *obj = (Proxy *)((char*)object - XtOffsetOf(Proxy, std)); | |
589 | + GEOSWKBReader_destroy((GEOSWKBReader*)obj->relay); | |
590 | + | |
591 | + zend_object_std_dtor(object); | |
592 | +} | |
593 | +#else | |
594 | static void | |
595 | WKBReader_dtor (void *object TSRMLS_DC) | |
596 | { | |
597 | @@ -2492,12 +2708,21 @@ | |
598 | ||
599 | efree(obj); | |
600 | } | |
601 | +#endif | |
602 | ||
603 | +#if PHP_MAJOR_VERSION >= 7 | |
604 | +static zend_object * | |
605 | +WKBReader_create_obj (zend_class_entry *type TSRMLS_DC) | |
606 | +{ | |
607 | + return Gen_create_obj(type, &WKBReader_object_handlers); | |
608 | +} | |
609 | +#else | |
610 | static zend_object_value | |
611 | WKBReader_create_obj (zend_class_entry *type TSRMLS_DC) | |
612 | { | |
613 | return Gen_create_obj(type, WKBReader_dtor, &WKBReader_object_handlers); | |
614 | } | |
615 | +#endif | |
616 | ||
617 | ||
618 | PHP_METHOD(WKBReader, __construct) | |
619 | @@ -2575,7 +2800,7 @@ | |
620 | char *str; | |
621 | ||
622 | str = estrdup(GEOSversion()); | |
623 | - RETURN_STRING(str, 0); | |
624 | + PHP_RETURN_STRING(str, 0); | |
625 | } | |
626 | ||
627 | /** | |
628 | @@ -2608,7 +2833,11 @@ | |
629 | GEOSGeometry *cut_edges; | |
630 | GEOSGeometry *dangles; | |
631 | GEOSGeometry *invalid_rings; | |
632 | +#if PHP_MAJOR_VERSION >= 7 | |
633 | + zval array_elem; | |
634 | +#else | |
635 | zval *array_elem; | |
636 | +#endif | |
637 | zval *zobj; | |
638 | ||
639 | if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "o", &zobj) | |
640 | @@ -2624,11 +2853,36 @@ | |
641 | /* return value should be an array */ | |
642 | array_init(return_value); | |
643 | ||
644 | +#if PHP_MAJOR_VERSION >= 7 | |
645 | + ZVAL_NEW_ARR(&array_elem); | |
646 | + array_init(&array_elem); | |
647 | + dumpGeometry(rings, &array_elem); | |
648 | + GEOSGeom_destroy(rings); | |
649 | + add_assoc_zval(return_value, "rings", &array_elem); | |
650 | + | |
651 | + ZVAL_NEW_ARR(&array_elem); | |
652 | + array_init(&array_elem); | |
653 | + dumpGeometry(cut_edges, &array_elem); | |
654 | + GEOSGeom_destroy(cut_edges); | |
655 | + add_assoc_zval(return_value, "cut_edges", &array_elem); | |
656 | + | |
657 | + ZVAL_NEW_ARR(&array_elem); | |
658 | + array_init(&array_elem); | |
659 | + dumpGeometry(dangles, &array_elem); | |
660 | + GEOSGeom_destroy(dangles); | |
661 | + add_assoc_zval(return_value, "dangles", &array_elem); | |
662 | + | |
663 | + ZVAL_NEW_ARR(&array_elem); | |
664 | + array_init(&array_elem); | |
665 | + dumpGeometry(invalid_rings, &array_elem); | |
666 | + GEOSGeom_destroy(invalid_rings); | |
667 | + add_assoc_zval(return_value, "invalid_rings", &array_elem); | |
668 | +#else | |
669 | MAKE_STD_ZVAL(array_elem); | |
670 | array_init(array_elem); | |
671 | dumpGeometry(rings, array_elem); | |
672 | GEOSGeom_destroy(rings); | |
673 | - add_assoc_zval(return_value, "rings", array_elem); | |
674 | + add_assoc_zval(return_value, "rings", array_elem); | |
675 | ||
676 | MAKE_STD_ZVAL(array_elem); | |
677 | array_init(array_elem); | |
678 | @@ -2647,7 +2901,7 @@ | |
679 | dumpGeometry(invalid_rings, array_elem); | |
680 | GEOSGeom_destroy(invalid_rings); | |
681 | add_assoc_zval(return_value, "invalid_rings", array_elem); | |
682 | - | |
683 | +#endif | |
684 | } | |
685 | ||
686 | /** | |
687 | @@ -2813,6 +3067,9 @@ | |
688 | memcpy(&WKTReader_object_handlers, | |
689 | zend_get_std_object_handlers(), sizeof(zend_object_handlers)); | |
690 | WKTReader_object_handlers.clone_obj = NULL; | |
691 | +#if PHP_MAJOR_VERSION >= 7 | |
692 | + WKTReader_object_handlers.free_obj = &WKTReader_dtor; | |
693 | +#endif | |
694 | ||
695 | /* WKTWriter */ | |
696 | INIT_CLASS_ENTRY(ce, "GEOSWKTWriter", WKTWriter_methods); | |
697 | @@ -2821,6 +3078,9 @@ | |
698 | memcpy(&WKTWriter_object_handlers, | |
699 | zend_get_std_object_handlers(), sizeof(zend_object_handlers)); | |
700 | WKTWriter_object_handlers.clone_obj = NULL; | |
701 | +#if PHP_MAJOR_VERSION >= 7 | |
702 | + WKTWriter_object_handlers.free_obj = &WKTWriter_dtor; | |
703 | +#endif | |
704 | ||
705 | /* Geometry */ | |
706 | INIT_CLASS_ENTRY(ce, "GEOSGeometry", Geometry_methods); | |
707 | @@ -2829,6 +3089,9 @@ | |
708 | memcpy(&Geometry_object_handlers, | |
709 | zend_get_std_object_handlers(), sizeof(zend_object_handlers)); | |
710 | Geometry_object_handlers.clone_obj = NULL; | |
711 | +#if PHP_MAJOR_VERSION >= 7 | |
712 | + Geometry_object_handlers.free_obj = &Geometry_dtor; | |
713 | +#endif | |
714 | /* Geometry serialization */ | |
715 | Geometry_ce_ptr->serialize = Geometry_serialize; | |
716 | Geometry_ce_ptr->unserialize = Geometry_deserialize; | |
717 | @@ -2840,6 +3103,9 @@ | |
718 | memcpy(&WKBWriter_object_handlers, | |
719 | zend_get_std_object_handlers(), sizeof(zend_object_handlers)); | |
720 | WKBWriter_object_handlers.clone_obj = NULL; | |
721 | +#if PHP_MAJOR_VERSION >= 7 | |
722 | + WKBWriter_object_handlers.free_obj = &WKBWriter_dtor; | |
723 | +#endif | |
724 | ||
725 | /* WKBReader */ | |
726 | INIT_CLASS_ENTRY(ce, "GEOSWKBReader", WKBReader_methods); | |
727 | @@ -2848,6 +3114,9 @@ | |
728 | memcpy(&WKBReader_object_handlers, | |
729 | zend_get_std_object_handlers(), sizeof(zend_object_handlers)); | |
730 | WKBReader_object_handlers.clone_obj = NULL; | |
731 | +#if PHP_MAJOR_VERSION >= 7 | |
732 | + WKBReader_object_handlers.free_obj = &WKBReader_dtor; | |
733 | +#endif | |
734 | ||
735 | ||
736 | /* Constants */ |