diff --git a/.vscode/settings.json b/.vscode/settings.json index 5fe40fd5..20c5d086 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -105,7 +105,9 @@ "valkey_glide_hash_common.h": "c", "php_var.h": "c", "valkey_glide_z_common.h": "c", - "string": "c" + "string": "c", + "__locale": "c", + "ios": "c" }, "php.validate.enable": true, "php.validate.executablePath": "/usr/bin/php", diff --git a/src/client_constructor_mock.c b/src/client_constructor_mock.c index f8fac3a0..588c13c9 100644 --- a/src/client_constructor_mock.c +++ b/src/client_constructor_mock.c @@ -37,18 +37,19 @@ void register_mock_constructor_class(void) { mock_constructor_ce = register_class_ClientConstructorMock(); } -static zval* build_php_connection_request(uint8_t* request_bytes, - size_t request_len, - valkey_glide_base_client_configuration_t* base_config) { +static void build_php_connection_request(uint8_t* request_bytes, + size_t request_len, + valkey_glide_base_client_configuration_t* base_config, + zval* php_request) { if (!request_bytes) { const char* error_message = "Protobuf memory allocation error."; zend_throw_exception(get_valkey_glide_exception_ce(), error_message, 0); valkey_glide_cleanup_client_config(base_config); - return NULL; + ZVAL_NULL(php_request); + return; } - zval buffer_param, callable, retval; - ZVAL_UNDEF(&retval); + zval buffer_param, callable; ZVAL_STRINGL(&buffer_param, (char*) request_bytes, request_len); zval params[1]; @@ -57,20 +58,15 @@ static zval* build_php_connection_request(uint8_t* add_next_index_string(&callable, "ConnectionRequestTest"); add_next_index_string(&callable, "deserialize"); - zval* result = NULL; - if (call_user_function(NULL, NULL, &callable, &retval, 1, params) == SUCCESS) { - // Allocate return value - result = emalloc(sizeof(zval)); - ZVAL_COPY(result, &retval); + if (call_user_function(NULL, NULL, &callable, php_request, 1, params) != SUCCESS) { + zval_ptr_dtor(php_request); } zval_ptr_dtor(&callable); - zval_ptr_dtor(&retval); zval_ptr_dtor(&buffer_param); efree(request_bytes); valkey_glide_cleanup_client_config(base_config); - return result; } /* @@ -123,9 +119,8 @@ PHP_METHOD(ClientConstructorMock, simulate_standalone_constructor) { uint8_t* request_bytes = create_connection_request( "localhost", 6379, &protobuf_message_len, &client_config, 0, false); - zval* php_request = - build_php_connection_request(request_bytes, protobuf_message_len, &client_config); - RETURN_ZVAL(php_request, 1, 1); + build_php_connection_request(request_bytes, protobuf_message_len, &client_config, return_value); + // RETURN_ZVAL(&php_request, 0, 1); } /* Simulates a ValkeyGlideCluster constructor */ @@ -179,7 +174,7 @@ PHP_METHOD(ClientConstructorMock, simulate_cluster_constructor) { client_config.periodic_checks_status, true); - zval* php_request = - build_php_connection_request(request_bytes, protobuf_message_len, &client_config.base); - RETURN_ZVAL(php_request, 1, 1); + + build_php_connection_request( + request_bytes, protobuf_message_len, &client_config.base, return_value); }