Skip to content

Commit 3c73b4f

Browse files
authored
fix build on PHP 8.6+ (#580)
* fix session on PHP 8.6+ reference: php/php-src@71096cd * fix offsetof on PHP 8.6+ reference: php/php-src@7114314 * Fix zval_dtor on PHP 8.6+ reference: php/php-src@df8ce6d
1 parent 4ef6dce commit 3c73b4f

2 files changed

Lines changed: 17 additions & 11 deletions

File tree

php_memcached.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ typedef struct {
195195
} php_memc_result_callback_ctx_t;
196196

197197
static inline php_memc_object_t *php_memc_fetch_object(zend_object *obj) {
198-
return (php_memc_object_t *)((char *)obj - XtOffsetOf(php_memc_object_t, zo));
198+
return (php_memc_object_t *)((char *)obj - offsetof(php_memc_object_t, zo));
199199
}
200200
#define Z_MEMC_OBJ_P(zv) php_memc_fetch_object(Z_OBJ_P(zv));
201201

@@ -280,7 +280,7 @@ typedef struct {
280280
} php_memc_server_t;
281281

282282
static inline php_memc_server_t *php_memc_server_fetch_object(zend_object *obj) {
283-
return (php_memc_server_t *)((char *)obj - XtOffsetOf(php_memc_server_t, zo));
283+
return (php_memc_server_t *)((char *)obj - offsetof(php_memc_server_t, zo));
284284
}
285285
#define Z_MEMC_SERVER_P(zv) php_memc_server_fetch_object(Z_OBJ_P(zv))
286286

@@ -1689,7 +1689,7 @@ static void php_memc_getMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
16891689
}
16901690

16911691
if (!retval || EG(exception)) {
1692-
zval_dtor(return_value);
1692+
zval_ptr_dtor_nogc(return_value);
16931693
RETURN_FROM_GET;
16941694
}
16951695
}
@@ -1892,7 +1892,7 @@ PHP_METHOD(Memcached, fetchAll)
18921892
status = php_memc_result_apply(intern, s_fetch_all_apply, 0, return_value);
18931893

18941894
if (s_memc_status_handle_result_code(intern, status) == FAILURE) {
1895-
zval_dtor(return_value);
1895+
zval_ptr_dtor_nogc(return_value);
18961896
RETURN_FALSE;
18971897
}
18981898
}
@@ -2935,7 +2935,7 @@ PHP_METHOD(Memcached, getVersion)
29352935
array_init(return_value);
29362936
status = memcached_server_cursor(intern->memc, callbacks, return_value, 1);
29372937
if (s_memc_status_handle_result_code(intern, status) == FAILURE) {
2938-
zval_dtor(return_value);
2938+
zval_ptr_dtor_nogc(return_value);
29392939
RETURN_FALSE;
29402940
}
29412941
}
@@ -2977,7 +2977,7 @@ PHP_METHOD(Memcached, getAllKeys)
29772977
*/
29782978
if (rc != MEMCACHED_CLIENT_ERROR && rc != MEMCACHED_SERVER_ERROR
29792979
&& s_memc_status_handle_result_code(intern, rc) == FAILURE) {
2980-
zval_dtor(return_value);
2980+
zval_ptr_dtor_nogc(return_value);
29812981
RETURN_FALSE;
29822982
}
29832983
}
@@ -4404,7 +4404,7 @@ PHP_MINIT_FUNCTION(memcached)
44044404
zend_class_entry ce;
44054405

44064406
memcpy(&memcached_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
4407-
memcached_object_handlers.offset = XtOffsetOf(php_memc_object_t, zo);
4407+
memcached_object_handlers.offset = offsetof(php_memc_object_t, zo);
44084408
memcached_object_handlers.clone_obj = NULL;
44094409
memcached_object_handlers.free_obj = php_memc_object_free_storage;
44104410

@@ -4415,7 +4415,7 @@ PHP_MINIT_FUNCTION(memcached)
44154415

44164416
#ifdef HAVE_MEMCACHED_PROTOCOL
44174417
memcpy(&memcached_server_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers));
4418-
memcached_server_object_handlers.offset = XtOffsetOf(php_memc_server_t, zo);
4418+
memcached_server_object_handlers.offset = offsetof(php_memc_server_t, zo);
44194419
memcached_server_object_handlers.clone_obj = NULL;
44204420
memcached_server_object_handlers.free_obj = php_memc_server_free_storage;
44214421

php_memcached_session.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -324,15 +324,21 @@ PS_OPEN_FUNC(memcached)
324324

325325
memcached_server_list_st servers;
326326

327+
#if PHP_VERSION_ID >= 80600
328+
const char *save_path_str = ZSTR_VAL(save_path);
329+
#else
330+
const char *save_path_str = save_path;
331+
#endif
332+
327333
// Fail on incompatible PERSISTENT identifier (removed in php-memcached 3.0)
328-
if (strstr(save_path, "PERSISTENT=")) {
334+
if (strstr(save_path_str, "PERSISTENT=")) {
329335
php_error_docref(NULL, E_WARNING, "failed to parse session.save_path: PERSISTENT is replaced by memcached.sess_persistent = On");
330336
PS_SET_MOD_DATA(NULL);
331337
return FAILURE;
332338
}
333339

334340
// First parse servers
335-
servers = memcached_servers_parse(save_path);
341+
servers = memcached_servers_parse(save_path_str);
336342

337343
if (!servers) {
338344
php_error_docref(NULL, E_WARNING, "failed to parse session.save_path");
@@ -343,7 +349,7 @@ PS_OPEN_FUNC(memcached)
343349
if (MEMC_SESS_INI(persistent_enabled)) {
344350
zend_resource *le_p;
345351

346-
plist_key_len = spprintf(&plist_key, 0, "memc-session:%s", save_path);
352+
plist_key_len = spprintf(&plist_key, 0, "memc-session:%s", save_path_str);
347353

348354
if ((le_p = zend_hash_str_find_ptr(&EG(persistent_list), plist_key, plist_key_len)) != NULL) {
349355
if (le_p->type == s_memc_sess_list_entry()) {

0 commit comments

Comments
 (0)