diff options
author | Sunpoet Po-Chuan Hsieh <sunpoet@FreeBSD.org> | 2020-12-20 04:07:49 +0800 |
---|---|---|
committer | Sunpoet Po-Chuan Hsieh <sunpoet@FreeBSD.org> | 2020-12-20 04:07:49 +0800 |
commit | 33279903bfcbb2680509478cb3f3ddbc473cdec1 (patch) | |
tree | 77dff183f0f311724eac36ec18aac98c522a261c /databases | |
parent | 654ae39b3314e5da18c7f5070f7b1b0cbe3be0a1 (diff) | |
download | freebsd-ports-gnome-33279903bfcbb2680509478cb3f3ddbc473cdec1.tar.gz freebsd-ports-gnome-33279903bfcbb2680509478cb3f3ddbc473cdec1.tar.zst freebsd-ports-gnome-33279903bfcbb2680509478cb3f3ddbc473cdec1.zip |
Update to 8.0
Changes: https://pecl.php.net/package-changelog.php?package=memcache
https://github.com/websupport-sk/pecl-memcache/releases
Diffstat (limited to 'databases')
-rw-r--r-- | databases/pecl-memcache/Makefile | 6 | ||||
-rw-r--r-- | databases/pecl-memcache/distinfo | 6 | ||||
-rw-r--r-- | databases/pecl-memcache/files/patch-php80 | 938 |
3 files changed, 6 insertions, 944 deletions
diff --git a/databases/pecl-memcache/Makefile b/databases/pecl-memcache/Makefile index e08743ff9435..6f98a8de9ee0 100644 --- a/databases/pecl-memcache/Makefile +++ b/databases/pecl-memcache/Makefile @@ -2,7 +2,7 @@ # $FreeBSD$ PORTNAME= memcache -PORTVERSION= 4.0.5.2 +PORTVERSION= 8.0 CATEGORIES= databases MAINTAINER= sunpoet@FreeBSD.org @@ -11,14 +11,14 @@ COMMENT= Memcached extension LICENSE= PHP30 LICENSE_FILE= ${WRKSRC}/LICENSE -OPTIONS_DEFINE= EXAMPLES - USES= dos2unix php:pecl USE_PHP= session:build zlib:build CONFIGURE_ARGS= --with-zlib-dir=/usr USE_CSTD= gnu89 +OPTIONS_DEFINE= EXAMPLES + post-install-EXAMPLES-on: ${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/ ${INSTALL_DATA} ${WRKSRC}/example.php ${STAGEDIR}${EXAMPLESDIR}/ diff --git a/databases/pecl-memcache/distinfo b/databases/pecl-memcache/distinfo index 6eed123561b9..d7f2cef5534a 100644 --- a/databases/pecl-memcache/distinfo +++ b/databases/pecl-memcache/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1577523884 -SHA256 (PECL/memcache-4.0.5.2.tgz) = 7b7667813baea003671f174bbec849e43ff235a8ea4ab7e36c3a0380c2a9ed63 -SIZE (PECL/memcache-4.0.5.2.tgz) = 75061 +TIMESTAMP = 1608366120 +SHA256 (PECL/memcache-8.0.tgz) = defe33e6f7831d82b7283b95e14a531070531acbf21278f3f0d7050505cf3395 +SIZE (PECL/memcache-8.0.tgz) = 78448 diff --git a/databases/pecl-memcache/files/patch-php80 b/databases/pecl-memcache/files/patch-php80 deleted file mode 100644 index f0dd58db1d8b..000000000000 --- a/databases/pecl-memcache/files/patch-php80 +++ /dev/null @@ -1,938 +0,0 @@ -Obtained from: https://github.com/websupport-sk/pecl-memcache/commit/2a5de3c5d9c0bd0acbcf7e6e0b7570f15f89f55b - https://github.com/websupport-sk/pecl-memcache/commit/7889bd1d2359874d7c6c395589d8fee529976984 - https://github.com/websupport-sk/pecl-memcache/commit/e090f05a05e4b773f750025a7647f5d590aa4a6a - ---- php7/memcache.c.orig 2019-12-20 23:07:05.000000000 +0800 -+++ php7/memcache.c 2020-10-16 15:52:01.000000000 +0800 -@@ -38,80 +38,341 @@ - - /* {{{ memcache_functions[] - */ --ZEND_BEGIN_ARG_INFO(arginfo_memcache_get, 1) -- ZEND_ARG_PASS_INFO(0) -- ZEND_ARG_PASS_INFO(0) -- ZEND_ARG_PASS_INFO(1) -- ZEND_ARG_PASS_INFO(1) -+ -+#ifndef ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX -+#define ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(name, ref, num, type) \ -+ ZEND_BEGIN_ARG_INFO_EX(name, 0u, ref, num) -+#endif -+ -+#ifndef ZEND_ARG_TYPE_MASK -+#define ZEND_ARG_TYPE_MASK(ref, name, mask, def) \ -+ ZEND_ARG_INFO(ref, name) -+#endif -+ -+ZEND_BEGIN_ARG_INFO_EX(arginfo_memcache_connect, 0, 0, 1) -+ ZEND_ARG_INFO(0, host) -+ ZEND_ARG_INFO(0, port) -+ ZEND_ARG_INFO(0, timeout) -+ ZEND_ARG_INFO(0, unused4) -+ ZEND_ARG_INFO(0, unused5) -+ ZEND_ARG_INFO(0, unused6) -+ ZEND_ARG_INFO(0, unused7) -+ ZEND_ARG_INFO(0, unugsed8) - ZEND_END_ARG_INFO() - --ZEND_BEGIN_ARG_INFO(arginfo_memcache_object_get, 1) -- ZEND_ARG_PASS_INFO(0) -- ZEND_ARG_PASS_INFO(1) -- ZEND_ARG_PASS_INFO(1) -+#define arginfo_memcache_pconnect arginfo_memcache_connect -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_add_server, 0, 2, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_INFO(0, host) -+ ZEND_ARG_INFO(0, port) -+ ZEND_ARG_INFO(0, tcp_port) -+ ZEND_ARG_INFO(0, persistent) -+ ZEND_ARG_INFO(0, weight) -+ ZEND_ARG_INFO(0, timeout) -+ ZEND_ARG_INFO(0, retry_interval) -+ ZEND_ARG_INFO(0, status) -+ ZEND_ARG_INFO(0, failure_callback) - ZEND_END_ARG_INFO() - -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_set_server_params, 0, 2, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, tcp_port, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, timeout, IS_DOUBLE, 0) -+ ZEND_ARG_TYPE_INFO(0, retry_interval, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, status, _IS_BOOL, 0) -+ ZEND_ARG_INFO(0, failure_callback) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_set_failure_callback, 0, 2, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, failure_callback, IS_CALLABLE, 1) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_get_server_status, 0, 2, MAY_BE_BOOL|MAY_BE_LONG) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, tcp_port, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_get_version, 0, 1, MAY_BE_STRING|MAY_BE_BOOL) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_add, 0, 2, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_ARRAY, 0) -+#ifdef IS_MIXED -+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) -+#else -+ ZEND_ARG_INFO(0, value) -+#endif -+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, exptime, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, cas, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_set arginfo_memcache_add -+#define arginfo_memcache_replace arginfo_memcache_add -+#define arginfo_memcache_cas arginfo_memcache_add -+#define arginfo_memcache_append arginfo_memcache_add -+#define arginfo_memcache_prepend arginfo_memcache_add -+ -+#ifdef IS_MIXED -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_get, 0, 2, IS_MIXED, 0) -+#else -+ZEND_BEGIN_ARG_INFO_EX(arginfo_memcache_get, 0, 0, 1) -+#endif -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_INFO(0, key) -+ ZEND_ARG_INFO(1, flags) -+ ZEND_ARG_INFO(1, cas) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_delete, 0, 2, MAY_BE_BOOL|MAY_BE_ARRAY) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_INFO(0, key) -+ ZEND_ARG_INFO(0, exptime) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_debug, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_INFO(0, on_off) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_get_stats, 0, 1, MAY_BE_BOOL|MAY_BE_ARRAY) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, slabid, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_get_extended_stats arginfo_memcache_get_stats -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_set_compress_threshold, 0, 2, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, threshold, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, min_savings, IS_DOUBLE, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_increment, 0, 2, MAY_BE_BOOL|MAY_BE_ARRAY|MAY_BE_LONG) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_ARRAY, 0) -+ ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, defval, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, exptime, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_decrement arginfo_memcache_increment -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_close, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_flush, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, delay, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_set_sasl_auth_data, 0, 3, _IS_BOOL, 0) -+ ZEND_ARG_OBJ_INFO(0, memcache, MemcachePool, 0) -+ ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ - zend_function_entry memcache_functions[] = { -- PHP_FE(memcache_connect, NULL) -- PHP_FE(memcache_pconnect, NULL) -- PHP_FE(memcache_add_server, NULL) -- PHP_FE(memcache_set_server_params, NULL) -- PHP_FE(memcache_set_failure_callback, NULL) -- PHP_FE(memcache_get_server_status, NULL) -- PHP_FE(memcache_get_version, NULL) -- PHP_FE(memcache_add, NULL) -- PHP_FE(memcache_set, NULL) -- PHP_FE(memcache_replace, NULL) -- PHP_FE(memcache_cas, NULL) -- PHP_FE(memcache_append, NULL) -- PHP_FE(memcache_prepend, NULL) -+ PHP_FE(memcache_connect, arginfo_memcache_connect) -+ PHP_FE(memcache_pconnect, arginfo_memcache_pconnect) -+ PHP_FE(memcache_add_server, arginfo_memcache_add_server) -+ PHP_FE(memcache_set_server_params, arginfo_memcache_set_server_params) -+ PHP_FE(memcache_set_failure_callback, arginfo_memcache_set_failure_callback) -+ PHP_FE(memcache_get_server_status, arginfo_memcache_get_server_status) -+ PHP_FE(memcache_get_version, arginfo_memcache_get_version) -+ PHP_FE(memcache_add, arginfo_memcache_add) -+ PHP_FE(memcache_set, arginfo_memcache_set) -+ PHP_FE(memcache_replace, arginfo_memcache_replace) -+ PHP_FE(memcache_cas, arginfo_memcache_cas) -+ PHP_FE(memcache_append, arginfo_memcache_append) -+ PHP_FE(memcache_prepend, arginfo_memcache_prepend) - PHP_FE(memcache_get, arginfo_memcache_get) -- PHP_FE(memcache_delete, NULL) -- PHP_FE(memcache_debug, NULL) -- PHP_FE(memcache_get_stats, NULL) -- PHP_FE(memcache_get_extended_stats, NULL) -- PHP_FE(memcache_set_compress_threshold, NULL) -- PHP_FE(memcache_increment, NULL) -- PHP_FE(memcache_decrement, NULL) -- PHP_FE(memcache_close, NULL) -- PHP_FE(memcache_flush, NULL) -- PHP_FE(memcache_set_sasl_auth_data, NULL) -- {NULL, NULL, NULL} -+ PHP_FE(memcache_delete, arginfo_memcache_delete) -+ PHP_FE(memcache_debug, arginfo_memcache_debug) -+ PHP_FE(memcache_get_stats, arginfo_memcache_get_stats) -+ PHP_FE(memcache_get_extended_stats, arginfo_memcache_get_extended_stats) -+ PHP_FE(memcache_set_compress_threshold, arginfo_memcache_set_compress_threshold) -+ PHP_FE(memcache_increment, arginfo_memcache_increment) -+ PHP_FE(memcache_decrement, arginfo_memcache_decrement) -+ PHP_FE(memcache_close, arginfo_memcache_close) -+ PHP_FE(memcache_flush, arginfo_memcache_flush) -+ PHP_FE(memcache_set_sasl_auth_data, arginfo_memcache_set_sasl_auth_data) -+ ZEND_FE_END - }; - -+ZEND_BEGIN_ARG_INFO_EX(arginfo_memcache_pool_object_connect, 0, 0, 1) -+ ZEND_ARG_INFO(0, host) -+ ZEND_ARG_INFO(0, tcp_port) -+ ZEND_ARG_INFO(0, udp_port) -+ ZEND_ARG_INFO(0, persistent) -+ ZEND_ARG_INFO(0, weight) -+ ZEND_ARG_INFO(0, timeout) -+ ZEND_ARG_INFO(0, retry_interval) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_object_connect arginfo_memcache_connect -+#define arginfo_memcache_object_pconnect arginfo_memcache_connect -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_pool_object_addserver, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_INFO(0, host) -+ ZEND_ARG_INFO(0, tcp_port) -+ ZEND_ARG_INFO(0, udp_port) -+ ZEND_ARG_INFO(0, persistent) -+ ZEND_ARG_INFO(0, weight) -+ ZEND_ARG_INFO(0, timeout) -+ ZEND_ARG_INFO(0, retry_interval) -+ ZEND_ARG_INFO(0, status) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_addserver, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_INFO(0, host) -+ ZEND_ARG_INFO(0, tcp_port) -+ ZEND_ARG_INFO(0, persistent) -+ ZEND_ARG_INFO(0, weight) -+ ZEND_ARG_INFO(0, timeout) -+ ZEND_ARG_INFO(0, retry_interval) -+ ZEND_ARG_INFO(0, status) -+ ZEND_ARG_INFO(0, failure_callback) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_setserverparams, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, tcp_port, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, timeout, IS_DOUBLE, 0) -+ ZEND_ARG_TYPE_INFO(0, retry_interval, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, status, _IS_BOOL, 0) -+ ZEND_ARG_INFO(0, failure_callback) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_setfailurecallback, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_TYPE_INFO(0, failure_callback, IS_CALLABLE, 1) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_object_getserverstatus, 0, 1, MAY_BE_BOOL|MAY_BE_LONG) -+ ZEND_ARG_TYPE_INFO(0, host, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, tcp_port, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_object_findserver, 0, 1, MAY_BE_STRING|MAY_BE_BOOL) -+ ZEND_ARG_TYPE_INFO(0, key, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_object_getversion, 0, 0, MAY_BE_STRING|MAY_BE_BOOL) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_add, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_ARRAY, 0) -+#ifdef IS_MIXED -+ ZEND_ARG_TYPE_INFO(0, value, IS_MIXED, 0) -+#else -+ ZEND_ARG_INFO(0, value) -+#endif -+ ZEND_ARG_TYPE_INFO(0, flags, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, exptime, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, cas, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_object_set arginfo_memcache_object_add -+#define arginfo_memcache_object_replace arginfo_memcache_object_add -+#define arginfo_memcache_object_set arginfo_memcache_object_add -+#define arginfo_memcache_object_cas arginfo_memcache_object_add -+#define arginfo_memcache_object_append arginfo_memcache_object_add -+#define arginfo_memcache_object_prepend arginfo_memcache_object_add -+ -+#ifdef IS_MIXED -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_get, 0, 1, IS_MIXED, 0) -+#else -+ZEND_BEGIN_ARG_INFO_EX(arginfo_memcache_object_get, 0, 0, 1) -+#endif -+ ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_ARRAY, 0) -+#ifdef IS_MIXED -+ ZEND_ARG_TYPE_INFO(1, flags, IS_MIXED, 0) -+ ZEND_ARG_TYPE_INFO(1, cas, IS_MIXED, 0) -+#else -+ ZEND_ARG_INFO(1, flags) -+ ZEND_ARG_INFO(1, cas) -+#endif -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_object_delete, 0, 1, MAY_BE_BOOL|MAY_BE_ARRAY) -+ ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_ARRAY, 0) -+ ZEND_ARG_TYPE_INFO(0, exptime, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_object_getstats, 0, 0, MAY_BE_BOOL|MAY_BE_ARRAY) -+ ZEND_ARG_TYPE_INFO(0, type, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, slabid, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, limit, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_object_getextendedstats arginfo_memcache_object_getstats -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_setcompressthreshold, 0, 1, _IS_BOOL, 0) -+ ZEND_ARG_TYPE_INFO(0, threshold, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, min_savings, IS_DOUBLE, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_MASK_EX(arginfo_memcache_object_increment, 0, 1, MAY_BE_BOOL|MAY_BE_ARRAY|MAY_BE_LONG) -+ ZEND_ARG_TYPE_MASK(0, key, MAY_BE_STRING|MAY_BE_ARRAY, 0) -+ ZEND_ARG_TYPE_INFO(0, value, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, defval, IS_LONG, 0) -+ ZEND_ARG_TYPE_INFO(0, exptime, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+#define arginfo_memcache_object_decrement arginfo_memcache_object_increment -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_close, 0, 0, _IS_BOOL, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_flush, 0, 0, _IS_BOOL, 0) -+ ZEND_ARG_TYPE_INFO(0, delay, IS_LONG, 0) -+ZEND_END_ARG_INFO() -+ -+ZEND_BEGIN_ARG_WITH_RETURN_TYPE_INFO_EX(arginfo_memcache_object_setSaslAuthData, 0, 2, _IS_BOOL, 0) -+ ZEND_ARG_TYPE_INFO(0, username, IS_STRING, 0) -+ ZEND_ARG_TYPE_INFO(0, password, IS_STRING, 0) -+ZEND_END_ARG_INFO() -+ - static zend_function_entry php_memcache_pool_class_functions[] = { -- PHP_NAMED_FE(connect, zif_memcache_pool_connect, NULL) -- PHP_NAMED_FE(addserver, zif_memcache_pool_addserver, NULL) -- PHP_FALIAS(setserverparams, memcache_set_server_params, NULL) -- PHP_FALIAS(setfailurecallback, memcache_set_failure_callback, NULL) -- PHP_FALIAS(getserverstatus, memcache_get_server_status, NULL) -- PHP_NAMED_FE(findserver, zif_memcache_pool_findserver, NULL) -- PHP_FALIAS(getversion, memcache_get_version, NULL) -- PHP_FALIAS(add, memcache_add, NULL) -- PHP_FALIAS(set, memcache_set, NULL) -- PHP_FALIAS(replace, memcache_replace, NULL) -- PHP_FALIAS(cas, memcache_cas, NULL) -- PHP_FALIAS(append, memcache_append, NULL) -- PHP_FALIAS(prepend, memcache_prepend, NULL) -+ PHP_NAMED_FE(connect, zif_memcache_pool_connect, arginfo_memcache_pool_object_connect) -+ PHP_NAMED_FE(addserver, zif_memcache_pool_addserver, arginfo_memcache_pool_object_addserver) -+ PHP_FALIAS(setserverparams, memcache_set_server_params, arginfo_memcache_object_setserverparams) -+ PHP_FALIAS(setfailurecallback, memcache_set_failure_callback, arginfo_memcache_object_setfailurecallback) -+ PHP_FALIAS(getserverstatus, memcache_get_server_status, arginfo_memcache_object_getserverstatus) -+ PHP_NAMED_FE(findserver, zif_memcache_pool_findserver, arginfo_memcache_object_findserver) -+ PHP_FALIAS(getversion, memcache_get_version, arginfo_memcache_object_getversion) -+ PHP_FALIAS(add, memcache_add, arginfo_memcache_object_add) -+ PHP_FALIAS(set, memcache_set, arginfo_memcache_object_set) -+ PHP_FALIAS(replace, memcache_replace, arginfo_memcache_object_replace) -+ PHP_FALIAS(cas, memcache_cas, arginfo_memcache_object_cas) -+ PHP_FALIAS(append, memcache_append, arginfo_memcache_object_append) -+ PHP_FALIAS(prepend, memcache_prepend, arginfo_memcache_object_prepend) - PHP_FALIAS(get, memcache_get, arginfo_memcache_object_get) -- PHP_FALIAS(delete, memcache_delete, NULL) -- PHP_FALIAS(getstats, memcache_get_stats, NULL) -- PHP_FALIAS(getextendedstats, memcache_get_extended_stats, NULL) -- PHP_FALIAS(setcompressthreshold, memcache_set_compress_threshold, NULL) -- PHP_FALIAS(increment, memcache_increment, NULL) -- PHP_FALIAS(decrement, memcache_decrement, NULL) -- PHP_FALIAS(close, memcache_close, NULL) -- PHP_FALIAS(flush, memcache_flush, NULL) -- PHP_FALIAS(setSaslAuthData, memcache_set_sasl_auth_data, NULL) -- -- {NULL, NULL, NULL} -+ PHP_FALIAS(delete, memcache_delete, arginfo_memcache_object_delete) -+ PHP_FALIAS(getstats, memcache_get_stats, arginfo_memcache_object_getstats) -+ PHP_FALIAS(getextendedstats, memcache_get_extended_stats, arginfo_memcache_object_getextendedstats) -+ PHP_FALIAS(setcompressthreshold, memcache_set_compress_threshold, arginfo_memcache_object_setcompressthreshold) -+ PHP_FALIAS(increment, memcache_increment, arginfo_memcache_object_increment) -+ PHP_FALIAS(decrement, memcache_decrement, arginfo_memcache_object_decrement) -+ PHP_FALIAS(close, memcache_close, arginfo_memcache_object_close) -+ PHP_FALIAS(flush, memcache_flush, arginfo_memcache_object_flush) -+ PHP_FALIAS(setSaslAuthData, memcache_set_sasl_auth_data, arginfo_memcache_object_setSaslAuthData) -+ ZEND_FE_END - }; - - static zend_function_entry php_memcache_class_functions[] = { -- PHP_FALIAS(connect, memcache_connect, NULL) -- PHP_FALIAS(pconnect, memcache_pconnect, NULL) -- PHP_FALIAS(addserver, memcache_add_server, NULL) -- {NULL, NULL, NULL} -+ PHP_ME_MAPPING(connect, memcache_connect, arginfo_memcache_object_connect, ZEND_ACC_PUBLIC) -+ PHP_ME_MAPPING(pconnect, memcache_pconnect, arginfo_memcache_object_pconnect, ZEND_ACC_PUBLIC) -+ PHP_ME_MAPPING(addserver, memcache_add_server, arginfo_memcache_object_addserver, ZEND_ACC_PUBLIC) -+ ZEND_FE_END - }; - - /* }}} */ -@@ -269,7 +530,7 @@ - if (new_value) { - for (i=0 ; i<ZSTR_LEN(new_value) ; i++) { - if (ZSTR_VAL(new_value)[i]=='.') { -- php_error_docref(NULL TSRMLS_CC, E_WARNING, "memcache.session_prefix_static_key cannot have dot inside (.)"); -+ php_error_docref(NULL, E_WARNING, "memcache.session_prefix_static_key cannot have dot inside (.)"); - return FAILURE; - } - } -@@ -292,14 +553,14 @@ - STD_PHP_INI_ENTRY("memcache.session_redundancy", "2", PHP_INI_ALL, OnUpdateRedundancy, session_redundancy, zend_memcache_globals, memcache_globals) - STD_PHP_INI_ENTRY("memcache.compress_threshold", "20000", PHP_INI_ALL, OnUpdateCompressThreshold, compress_threshold, zend_memcache_globals, memcache_globals) - STD_PHP_INI_ENTRY("memcache.lock_timeout", "15", PHP_INI_ALL, OnUpdateLockTimeout, lock_timeout, zend_memcache_globals, memcache_globals) -- STD_PHP_INI_ENTRY("memcache.session_prefix_host_key", "0", PHP_INI_ALL, OnUpdateBool, session_prefix_host_key, zend_memcache_globals, memcache_globals) -- STD_PHP_INI_ENTRY("memcache.session_prefix_host_key_remove_www", "1", PHP_INI_ALL, OnUpdateBool, session_prefix_host_key_remove_www, zend_memcache_globals, memcache_globals) -- STD_PHP_INI_ENTRY("memcache.session_prefix_host_key_remove_subdomain", "0", PHP_INI_ALL, OnUpdateBool, session_prefix_host_key_remove_subdomain, zend_memcache_globals, memcache_globals) -+ STD_PHP_INI_BOOLEAN("memcache.session_prefix_host_key", "0", PHP_INI_ALL, OnUpdateBool, session_prefix_host_key, zend_memcache_globals, memcache_globals) -+ STD_PHP_INI_BOOLEAN("memcache.session_prefix_host_key_remove_www", "1", PHP_INI_ALL, OnUpdateBool, session_prefix_host_key_remove_www, zend_memcache_globals, memcache_globals) -+ STD_PHP_INI_BOOLEAN("memcache.session_prefix_host_key_remove_subdomain", "0", PHP_INI_ALL, OnUpdateBool, session_prefix_host_key_remove_subdomain, zend_memcache_globals, memcache_globals) - STD_PHP_INI_ENTRY("memcache.session_prefix_static_key", NULL, PHP_INI_ALL, OnUpdatePrefixStaticKey, session_prefix_static_key, zend_memcache_globals, memcache_globals) - STD_PHP_INI_ENTRY("memcache.session_save_path", NULL, PHP_INI_ALL, OnUpdateString, session_save_path, zend_memcache_globals, memcache_globals) -- STD_PHP_INI_ENTRY("memcache.prefix_host_key", "0", PHP_INI_ALL, OnUpdateBool, prefix_host_key, zend_memcache_globals, memcache_globals) -- STD_PHP_INI_ENTRY("memcache.prefix_host_key_remove_www", "1", PHP_INI_ALL, OnUpdateBool, prefix_host_key_remove_www, zend_memcache_globals, memcache_globals) -- STD_PHP_INI_ENTRY("memcache.prefix_host_key_remove_subdomain", "0", PHP_INI_ALL, OnUpdateBool, prefix_host_key_remove_subdomain, zend_memcache_globals, memcache_globals) -+ STD_PHP_INI_BOOLEAN("memcache.prefix_host_key", "0", PHP_INI_ALL, OnUpdateBool, prefix_host_key, zend_memcache_globals, memcache_globals) -+ STD_PHP_INI_BOOLEAN("memcache.prefix_host_key_remove_www", "1", PHP_INI_ALL, OnUpdateBool, prefix_host_key_remove_www, zend_memcache_globals, memcache_globals) -+ STD_PHP_INI_BOOLEAN("memcache.prefix_host_key_remove_subdomain", "0", PHP_INI_ALL, OnUpdateBool, prefix_host_key_remove_subdomain, zend_memcache_globals, memcache_globals) - STD_PHP_INI_ENTRY("memcache.prefix_static_key", NULL, PHP_INI_ALL, OnUpdatePrefixStaticKey, prefix_static_key, zend_memcache_globals, memcache_globals) - PHP_INI_END() - /* }}} */ -@@ -458,7 +719,7 @@ - */ - PHP_RINIT_FUNCTION(memcache) - { -- MEMCACHE_G(session_key_prefix) = get_session_key_prefix(TSRMLS_C); -+ MEMCACHE_G(session_key_prefix) = get_session_key_prefix(); - - return SUCCESS; - } -@@ -867,6 +1128,10 @@ - - /* execute all requests */ - mmc_pool_run(pool); -+ -+ if (Z_TYPE_P(return_value) == IS_NULL) { -+ RETURN_FALSE; -+ } - } - /* }}} */ - -@@ -878,7 +1143,7 @@ - memcpy((char *)persistent_id, key, key_len+1); - if (zend_register_persistent_resource ( (char*) persistent_id, key_len, mmc, le_memcache_server) == NULL) ; - -- then not forget to pefree, check refcounts in _mmc_server_free / _mmc_server_list_dtor , etc. -+ then not forget to pefree, check refcounts in _mmc_server_free / _mmc_server_list_dtor , etc. - otherwise we will leak mem with persistent connections /run into other trouble with later versions - */ - mmc_t *mmc_find_persistent(const char *host, int host_len, unsigned short port, unsigned short udp_port, double timeout, int retry_interval) /* {{{ */ -@@ -1018,8 +1283,13 @@ - - if (pool->protocol == &mmc_binary_protocol) { - zval rv1, rv2; -+#if PHP_VERSION_ID >= 80000 -+ zval *username = zend_read_property(memcache_ce, Z_OBJ_P(mmc_object), "username", strlen("username"), 1, &rv1); -+ zval *password = zend_read_property(memcache_ce, Z_OBJ_P(mmc_object), "password", strlen("password"), 1, &rv2); -+#else - zval *username = zend_read_property(memcache_ce, mmc_object, "username", strlen("username"), 1, &rv1); - zval *password = zend_read_property(memcache_ce, mmc_object, "password", strlen("password"), 1, &rv2); -+#endif - if (Z_TYPE_P(username) == IS_STRING && Z_TYPE_P(password) == IS_STRING) { - if (Z_STRLEN_P(username) > 1 && Z_STRLEN_P(password) > 1) { - mmc_request_t *request; -@@ -1058,7 +1328,7 @@ - /* initialize pool and object if need be */ - if (!mmc_object) { - zend_resource *list_res; -- mmc_pool_t *pool = mmc_pool_new(); -+ pool = mmc_pool_new(); - pool->failure_callback = (mmc_failure_callback) &php_mmc_failure_callback; - list_res = zend_register_resource(pool, le_memcache_pool); - mmc_object = return_value; -@@ -1241,7 +1511,7 @@ - } - ZVAL_LONG(errnum, mmc->errnum); - -- call_user_function_ex(EG(function_table), NULL, callback, &retval, 5, params, 0, NULL); -+ call_user_function(EG(function_table), NULL, callback, &retval, 5, params); - - zval_ptr_dtor(host); - zval_ptr_dtor(tcp_port); zval_ptr_dtor(udp_port); -@@ -1252,7 +1522,7 @@ - } - } - else { -- php_mmc_set_failure_callback(pool, (zval *)param, NULL); -+ php_mmc_set_failure_callback(pool, param, NULL); - php_error_docref(NULL, E_WARNING, "Invalid failure callback"); - } - } -@@ -1692,6 +1962,10 @@ - } - } - } -+ -+ if (Z_TYPE_P(return_value) == IS_NULL) { -+ RETURN_FALSE; -+ } - } - /* }}} */ - -@@ -1754,6 +2028,9 @@ - if (Z_TYPE_P(result[0]) != IS_ARRAY) { - array_init(result[0]); - } -+ -+ ZEND_ASSERT(key_len > 0); -+ - add_assoc_zval_ex(result[0], (char *)key, key_len, value); - - /* add flags to result */ -@@ -1881,19 +2158,23 @@ - if (mmc_prepare_key(keys, request->key, &(request->key_len)) != MMC_OK) { - mmc_pool_release(pool, request); - php_error_docref(NULL, E_WARNING, "Invalid key"); -- return; -+ RETURN_FALSE; - } - - pool->protocol->get(request, cas != NULL ? MMC_OP_GETS : MMC_OP_GET, keys, request->key, request->key_len); - - /* schedule request */ - if (mmc_pool_schedule_key(pool, request->key, request->key_len, request, 1) != MMC_OK) { -- return; -+ RETURN_FALSE; - } - } - - /* execute all requests */ - mmc_pool_run(pool); -+ -+ if (Z_TYPE_P(return_value) == IS_NULL) { -+ RETURN_FALSE; -+ } - } - /* }}} */ - -@@ -2000,6 +2281,10 @@ - - /* execute all requests */ - mmc_pool_run(pool); -+ -+ if (Z_TYPE_P(return_value) == IS_NULL) { -+ RETURN_FALSE; -+ } - } - /* }}} */ - -@@ -2057,6 +2342,10 @@ - - /* execute all requests */ - mmc_pool_run(pool); -+ -+ if (Z_TYPE_P(return_value) == IS_NULL) { -+ RETURN_FALSE; -+ } - } - /* }}} */ - -@@ -2241,8 +2530,13 @@ - if (user_length < 1 || password_length < 1) { - RETURN_FALSE; - } -+#if PHP_VERSION_ID >= 80000 -+ zend_update_property_stringl(memcache_pool_ce, Z_OBJ_P(mmc_object), "username", strlen("username"), user, user_length); -+ zend_update_property_stringl(memcache_pool_ce, Z_OBJ_P(mmc_object), "password", strlen("password"), password, password_length); -+#else - zend_update_property_stringl(memcache_pool_ce, mmc_object, "username", strlen("username"), user, user_length); - zend_update_property_stringl(memcache_pool_ce, mmc_object, "password", strlen("password"), password, password_length); -+#endif - RETURN_TRUE; - } - /* }}} */ -@@ -2252,6 +2546,8 @@ - PHP_FUNCTION(memcache_debug) - { - php_error_docref(NULL, E_WARNING, "memcache_debug() is deprecated, please use a debugger (like Eclipse + CDT)"); -+ -+ RETVAL_BOOL(PHP_DEBUG); - } - /* }}} */ - ---- php7/memcache_ascii_protocol.c.orig 2020-09-25 03:29:24.000000000 +0800 -+++ php7/memcache_ascii_protocol.c 2020-10-16 15:52:01.000000000 +0800 -@@ -56,11 +56,16 @@ - } - /* }}} */ - --static int mmc_request_check_response(const char *line, int line_len) /* -+static int mmc_request_check_response(char *line, int line_len) /* - checks for response status and error codes {{{ */ - { - int response; - -+ // remove newline and thus prevent passing it to userland -+ if (line_len >= 2 && line[line_len - 2] == '\r' && line[line_len - 1] == '\n') { -+ line[line_len - 2] = '\0'; -+ } -+ - if (mmc_str_left(line, "OK", line_len, sizeof("OK")-1) || - mmc_str_left(line, "STORED", line_len, sizeof("STORED")-1) || - mmc_str_left(line, "DELETED", line_len, sizeof("DELETED")-1)) -@@ -129,7 +134,7 @@ - return request->response_handler(mmc, request, response, line, line_len - (sizeof("\r\n")-1), request->response_handler_param); - } - -- if (sscanf(line, "%lu", &lval) < 1) { -+ if (sscanf(line, "%ld", &lval) < 1) { - return mmc_server_failure(mmc, request->io, "Malformed VALUE header", 0); - } - ---- php7/memcache_binary_protocol.c.orig 2020-09-25 03:29:24.000000000 +0800 -+++ php7/memcache_binary_protocol.c 2020-10-16 15:52:01.000000000 +0800 -@@ -61,6 +61,12 @@ - # define htonll mmc_htonll - #endif - -+#ifdef __GNUC__ -+# define MMC_ATTR_PACKED __attribute__((packed)) -+#else -+# define MMC_ATTR_PACKED -+#endif /* UD_ATTR_PACKED */ -+ - #define MMC_REQUEST_MAGIC 0x80 - #define MMC_RESPONSE_MAGIC 0x81 - -@@ -79,6 +85,15 @@ - #define MMC_BIN_OP_APPEND 0x0e - #define MMC_BIN_OP_PREPEND 0x0f - -+#define MMC_BINARY_STATUS_OK 0x00 -+#define MMC_BINARY_STATUS_KEY_NOT_FOUND 0x01 -+#define MMC_BINARY_STATUS_KEY_EXISTS 0x02 -+#define MMC_BINARY_STATUS_VALUE_TOO_LARGE 0x03 -+#define MMC_BINARY_STATUS_INVALID_ARGS 0x04 -+#define MMC_BINARY_STATUS_ITEM_NOT_STORED 0x05 -+#define MMC_BINARY_STATUS_INCR_DECR_ERROR 0x06 /* Incr/Decr on non-numeric value */ -+#define MMC_BINARY_STATUS_UNKNOWN_COMMAND 0x81 -+#define MMC_BINARY_STATUS_OUT_OF_MEMORY 0x82 - - #define MMC_OP_SASL_LIST 0x20 - #define MMC_OP_SASL_AUTH 0x21 -@@ -90,7 +105,7 @@ - mmc_queue_t keys; /* mmc_queue_t<zval *>, reqid -> key mappings */ - struct { - uint8_t opcode; -- uint8_t error; /* error received in current request */ -+ uint16_t error; /* error received in current request */ - uint32_t reqid; /* current reqid being processed */ - } command; - struct { /* stores value info while the body is being read */ -@@ -107,64 +122,63 @@ - uint8_t extras_len; - uint8_t datatype; - uint16_t _reserved; -- uint32_t length; /* trailing body length (not including this header) */ -+ uint32_t length; /* trailing body total_body_length (not including this header) */ - uint32_t reqid; /* opaque request id */ - uint64_t cas; --} mmc_request_header_t; -+} MMC_ATTR_PACKED mmc_request_header_t; - - typedef struct mmc_get_request_header { - mmc_request_header_t base; --} mmc_get_request_header_t; -+} MMC_ATTR_PACKED mmc_get_request_header_t; - - typedef struct mmc_version_request_header { - mmc_request_header_t base; --} mmc_version_request_header_t; -+} MMC_ATTR_PACKED mmc_version_request_header_t; - - typedef struct mmc_store_request_header { - mmc_request_header_t base; - uint32_t flags; - uint32_t exptime; --} mmc_store_request_header_t; -+} MMC_ATTR_PACKED mmc_store_request_header_t; - - typedef struct mmc_store_append_header { - mmc_request_header_t base; --} mmc_store_append_header_t; -+} MMC_ATTR_PACKED mmc_store_append_header_t; - - typedef struct mmc_delete_request_header { - mmc_request_header_t base; -- uint32_t exptime; --} mmc_delete_request_header_t; -+} MMC_ATTR_PACKED mmc_delete_request_header_t; - - typedef struct mmc_mutate_request_header { - mmc_request_header_t base; - uint64_t delta; - uint64_t initial; - uint32_t expiration; --} mmc_mutate_request_header_t; -+} MMC_ATTR_PACKED mmc_mutate_request_header_t; - - typedef struct mmc_sasl_request_header { - mmc_request_header_t base; --} mmc_sasl_request_header; -+} MMC_ATTR_PACKED mmc_sasl_request_header; - - typedef struct mmc_response_header { - uint8_t magic; - uint8_t opcode; -- uint16_t error; -+ uint16_t key_len; - uint8_t extras_len; - uint8_t datatype; - uint16_t status; -- uint32_t length; /* trailing body length (not including this header) */ -+ uint32_t total_body_length; /* trailing body total_body_length (not including this header) */ - uint32_t reqid; /* echo'ed from request */ - uint64_t cas; --} mmc_response_header_t; -+} MMC_ATTR_PACKED mmc_response_header_t; - - typedef struct mmc_get_response_header { - uint32_t flags; --} mmc_get_response_header_t; -+} MMC_ATTR_PACKED mmc_get_response_header_t; - - typedef struct mmc_mutate_response_header { - uint64_t value; --} mmc_mutate_response_header_t; -+} MMC_ATTR_PACKED mmc_mutate_response_header_t; - - static int mmc_request_read_response(mmc_t *, mmc_request_t *); - static int mmc_request_parse_value(mmc_t *, mmc_request_t *); -@@ -252,9 +266,40 @@ - } - - req->command.opcode = header->opcode; -- req->command.error = ntohs(header->error); -+ -+ switch (ntohs(header->status)) { -+ case MMC_BINARY_STATUS_OK: -+ req->command.error = MMC_OK; -+ break; -+ case MMC_BINARY_STATUS_KEY_NOT_FOUND: -+ req->command.error = MMC_RESPONSE_NOT_FOUND; -+ break; -+ case MMC_BINARY_STATUS_KEY_EXISTS: -+ req->command.error = MMC_RESPONSE_EXISTS; -+ break; -+ case MMC_BINARY_STATUS_VALUE_TOO_LARGE: -+ req->command.error = MMC_RESPONSE_TOO_LARGE; -+ break; -+ case MMC_BINARY_STATUS_INVALID_ARGS: -+ case MMC_BINARY_STATUS_INCR_DECR_ERROR: -+ req->command.error = MMC_RESPONSE_CLIENT_ERROR; -+ break; -+ case MMC_BINARY_STATUS_ITEM_NOT_STORED: -+ req->command.error = MMC_RESPONSE_NOT_STORED; -+ break; -+ case MMC_BINARY_STATUS_UNKNOWN_COMMAND: -+ req->command.error = MMC_RESPONSE_UNKNOWN_CMD; -+ break; -+ case MMC_BINARY_STATUS_OUT_OF_MEMORY: -+ req->command.error = MMC_RESPONSE_OUT_OF_MEMORY; -+ break; -+ default: -+ req->command.error = MMC_RESPONSE_UNKNOWN; -+ break; -+ } -+ - req->command.reqid = ntohl(header->reqid); -- req->value.length = ntohl(header->length); -+ req->value.length = ntohl(header->total_body_length); - req->value.cas = ntohll(header->cas); - - if (req->value.length == 0) { -@@ -434,6 +479,7 @@ - header->_reserved = 0; - header->length = htonl(key_len + extras_len + length); - header->reqid = htonl(reqid); -+ header->cas = 0; - } - /* }}} */ - -@@ -618,8 +664,7 @@ - request->parse = mmc_request_parse_response; - req->next_parse_handler = mmc_request_read_response; - -- mmc_pack_header(&(header.base), MMC_OP_DELETE, 0, key_len, sizeof(header) - sizeof(header.base), 0); -- header.exptime = htonl(exptime); -+ mmc_pack_header(&(header.base), MMC_OP_DELETE, 0, key_len, 0, 0); - - smart_string_appendl(&(request->sendbuf.value), (const char *)&header, sizeof(header)); - smart_string_appendl(&(request->sendbuf.value), key, key_len); -@@ -659,7 +704,6 @@ - else { - /* server replies with NOT_FOUND if exptime ~0 and key doesn't exist */ - header.expiration = ~(uint32_t)0; -- header.expiration = htonl(0x00000e10); - } - - /* mutate request is 43 bytes */ ---- php7/memcache_pool.c.orig 2020-09-25 03:29:24.000000000 +0800 -+++ php7/memcache_pool.c 2020-10-16 15:52:01.000000000 +0800 -@@ -41,6 +41,24 @@ - - ZEND_DECLARE_MODULE_GLOBALS(memcache) - -+#if PHP_VERSION_ID >= 80000 -+#define mmc_string_concat2 zend_string_concat2 -+#else -+static zend_string* mmc_string_concat2( -+ const char *str1, size_t str1_len, -+ const char *str2, size_t str2_len) -+{ -+ size_t len = str1_len + str2_len; -+ zend_string *res = zend_string_alloc(len, 0); -+ -+ memcpy(ZSTR_VAL(res), str1, str1_len); -+ memcpy(ZSTR_VAL(res) + str1_len, str2, str2_len); -+ ZSTR_VAL(res)[len] = '\0'; -+ -+ return res; -+} -+#endif -+ - MMC_POOL_INLINE void mmc_buffer_alloc(mmc_buffer_t *buffer, unsigned int size) /* - ensures space for an additional size bytes {{{ */ - { -@@ -407,6 +425,7 @@ - PHP_VAR_SERIALIZE_DESTROY(value_hash); - - if (!buf.s) { -+ zval_dtor(&value_copy); - php_error_docref(NULL, E_WARNING, "Failed to serialize value"); - return MMC_REQUEST_FAILURE; - } -@@ -733,7 +752,16 @@ - - /* check connection and extract socket for select() purposes */ - if (!io->stream || php_stream_cast(io->stream, PHP_STREAM_AS_FD_FOR_SELECT, (void **)&fd, 1) != SUCCESS) { -- mmc_server_seterror(mmc, errstr != NULL ? ZSTR_VAL(errstr) : "Connection failed", errnum); -+ if (errstr != NULL) { -+ zend_string* error = mmc_string_concat2( -+ "Connection failed: ", sizeof("Connection failed: ") - 1, -+ ZSTR_VAL(errstr), ZSTR_LEN(errstr)); -+ -+ mmc_server_seterror(mmc, ZSTR_VAL(error), errnum); -+ zend_string_release(error); -+ } else { -+ mmc_server_seterror(mmc, "Connection failed", errnum); -+ } - mmc_server_deactivate(pool, mmc); - - if (errstr != NULL) { -@@ -821,6 +849,8 @@ - - void mmc_server_free(mmc_t *mmc) /* {{{ */ - { -+ mmc_server_sleep(mmc); -+ - pefree(mmc->host, mmc->persistent); - pefree(mmc, mmc->persistent); - } ---- php7/memcache_session.c.orig 2020-09-25 03:29:24.000000000 +0800 -+++ php7/memcache_session.c 2020-10-16 15:52:01.000000000 +0800 -@@ -64,12 +64,13 @@ - } - if (!path) { - PS_SET_MOD_DATA(NULL); -+ ZEND_ASSERT(0 && "open"); - return FAILURE; - } - - pool = mmc_pool_new(); - -- for (i=0,j=0,path_len=strlen(path); i<path_len; i=j+1) { -+ for (i=0,path_len=strlen(path); i<path_len; i=j+1) { - /* find beginning of url */ - while (i<path_len && (isspace(path[i]) || path[i] == ',')) { - i++; -@@ -205,6 +206,7 @@ - - mmc_pool_free(pool); - PS_SET_MOD_DATA(NULL); -+ ZEND_ASSERT(0 &&"open"); - return FAILURE; - } - /* }}} */ -@@ -360,12 +362,12 @@ - if (skip_servers.len == pool->num_servers && skip_servers.len < MEMCACHE_G(session_redundancy)) { - *val = ZSTR_EMPTY_ALLOC(); - mmc_queue_free(&skip_servers); -- zval_ptr_dtor(&dataresult); - return SUCCESS; -- - } - } - else { -+ zval_dtor(&dataresult); -+ - /* if missing lock, back off and retry same server */ - last_index = prev_index; - usleep(timeout); -@@ -417,6 +419,9 @@ - - if (mmc_prepare_key_ex(ZSTR_VAL(key), ZSTR_LEN(key), datarequest->key, &(datarequest->key_len), MEMCACHE_G(session_key_prefix)) != MMC_OK) { - mmc_pool_release(pool, datarequest); -+ if (lockrequest != NULL) { -+ mmc_pool_release(pool, lockrequest); -+ } - break; - } - -@@ -450,6 +455,7 @@ - mmc_pool_schedule(pool, mmc, lockrequest) != MMC_OK) { - mmc_pool_release(pool, datarequest); - mmc_pool_release(pool, lockrequest); -+ lockrequest = NULL; - continue; - } - } while (skip_servers.len < MEMCACHE_G(session_redundancy) && skip_servers.len < pool->num_servers); |