@@ -1819,8 +1819,7 @@ static void php_memc_setMulti_impl(INTERNAL_FUNCTION_PARAMETERS, zend_bool by_ke
1819
1819
s_memc_set_status (intern , MEMCACHED_SUCCESS , 0 );
1820
1820
1821
1821
ZEND_HASH_FOREACH_KEY_VAL (Z_ARRVAL_P (entries ), num_key , skey , value ) {
1822
-
1823
- zend_string * str_key ;
1822
+ zend_string * str_key = NULL ;
1824
1823
1825
1824
if (skey ) {
1826
1825
str_key = skey ;
@@ -2337,7 +2336,6 @@ PHP_METHOD(Memcached, addServers)
2337
2336
zval * servers ;
2338
2337
zval * entry ;
2339
2338
zval * z_host , * z_port , * z_weight = NULL ;
2340
- uint32_t weight = 0 ;
2341
2339
HashPosition pos ;
2342
2340
int entry_size , i = 0 ;
2343
2341
memcached_server_st * list = NULL ;
@@ -2361,6 +2359,10 @@ PHP_METHOD(Memcached, addServers)
2361
2359
entry_size = zend_hash_num_elements (Z_ARRVAL_P (entry ));
2362
2360
2363
2361
if (entry_size > 1 ) {
2362
+ zend_string * host ;
2363
+ zend_long port ;
2364
+ uint32_t weight ;
2365
+
2364
2366
zend_hash_internal_pointer_reset_ex (Z_ARRVAL_P (entry ), & pos );
2365
2367
2366
2368
/* Check that we have a host */
@@ -2378,8 +2380,8 @@ PHP_METHOD(Memcached, addServers)
2378
2380
continue ;
2379
2381
}
2380
2382
2381
- convert_to_string_ex (z_host );
2382
- convert_to_long_ex (z_port );
2383
+ host = zval_get_string (z_host );
2384
+ port = zval_get_long (z_port );
2383
2385
2384
2386
weight = 0 ;
2385
2387
if (entry_size > 2 ) {
@@ -2389,12 +2391,12 @@ PHP_METHOD(Memcached, addServers)
2389
2391
php_error_docref (NULL , E_WARNING , "could not get server weight for entry #%d" , i + 1 );
2390
2392
}
2391
2393
2392
- convert_to_long_ex (z_weight );
2393
- weight = Z_LVAL_P (z_weight );
2394
+ weight = zval_get_long (z_weight );
2394
2395
}
2395
2396
2396
- list = memcached_server_list_append_with_weight (list , Z_STRVAL_P (z_host ),
2397
- Z_LVAL_P (z_port ), weight , & status );
2397
+ list = memcached_server_list_append_with_weight (list , ZSTR_VAL (host ), port , weight , & status );
2398
+
2399
+ zend_string_release (host );
2398
2400
2399
2401
if (s_memc_status_handle_result_code (intern , status ) == SUCCESS ) {
2400
2402
i ++ ;
@@ -2839,21 +2841,21 @@ static PHP_METHOD(Memcached, getOption)
2839
2841
static
2840
2842
int php_memc_set_option (php_memc_object_t * intern , long option , zval * value )
2841
2843
{
2844
+ zend_long lval ;
2842
2845
memcached_return rc = MEMCACHED_FAILURE ;
2843
2846
memcached_behavior flag ;
2844
2847
php_memc_user_data_t * memc_user_data = memcached_get_user_data (intern -> memc );
2845
2848
2846
2849
switch (option ) {
2847
2850
case MEMC_OPT_COMPRESSION :
2848
- convert_to_long (value );
2849
- memc_user_data -> compression_enabled = Z_LVAL_P (value ) ? 1 : 0 ;
2851
+ memc_user_data -> compression_enabled = zval_get_long (value ) ? 1 : 0 ;
2850
2852
break ;
2851
2853
2852
2854
case MEMC_OPT_COMPRESSION_TYPE :
2853
- convert_to_long (value );
2854
- if (Z_LVAL_P ( value ) == COMPRESSION_TYPE_FASTLZ ||
2855
- Z_LVAL_P ( value ) == COMPRESSION_TYPE_ZLIB ) {
2856
- memc_user_data -> compression_type = Z_LVAL_P ( value ) ;
2855
+ lval = zval_get_long (value );
2856
+ if (lval == COMPRESSION_TYPE_FASTLZ ||
2857
+ lval == COMPRESSION_TYPE_ZLIB ) {
2858
+ memc_user_data -> compression_type = lval ;
2857
2859
} else {
2858
2860
/* invalid compression type */
2859
2861
intern -> rescode = MEMCACHED_INVALID_ARGUMENTS ;
@@ -2863,38 +2865,41 @@ int php_memc_set_option(php_memc_object_t *intern, long option, zval *value)
2863
2865
2864
2866
case MEMC_OPT_PREFIX_KEY :
2865
2867
{
2868
+ zend_string * str ;
2866
2869
char * key ;
2867
2870
#if defined(LIBMEMCACHED_VERSION_HEX ) && LIBMEMCACHED_VERSION_HEX == 0x00049000
2868
2871
char tmp [MEMCACHED_PREFIX_KEY_MAX_SIZE - 1 ];
2869
2872
#endif
2870
- convert_to_string (value );
2871
- if (Z_STRLEN_P ( value ) == 0 ) {
2873
+ str = zval_get_string (value );
2874
+ if (ZSTR_VAL ( str ) == 0 ) {
2872
2875
key = NULL ;
2873
2876
} else {
2874
2877
/*
2875
2878
work-around a bug in libmemcached in version 0.49 that truncates the trailing
2876
2879
character of the key prefix, to avoid the issue we pad it with a '0'
2877
2880
*/
2878
2881
#if defined(LIBMEMCACHED_VERSION_HEX ) && LIBMEMCACHED_VERSION_HEX == 0x00049000
2879
- snprintf (tmp , sizeof (tmp ), "%s0" , Z_STRVAL_P ( value ));
2882
+ snprintf (tmp , sizeof (tmp ), "%s0" , ZSTR_VAL ( str ));
2880
2883
key = tmp ;
2881
2884
#else
2882
- key = Z_STRVAL_P ( value );
2885
+ key = ZSTR_VAL ( str );
2883
2886
#endif
2884
2887
}
2885
2888
if (memcached_callback_set (intern -> memc , MEMCACHED_CALLBACK_PREFIX_KEY , key ) == MEMCACHED_BAD_KEY_PROVIDED ) {
2889
+ zend_string_release (str );
2886
2890
intern -> rescode = MEMCACHED_INVALID_ARGUMENTS ;
2887
2891
php_error_docref (NULL , E_WARNING , "bad key provided" );
2888
2892
return 0 ;
2889
2893
}
2894
+ zend_string_release (str );
2890
2895
}
2891
2896
break ;
2892
2897
2893
2898
case MEMCACHED_BEHAVIOR_KETAMA_WEIGHTED :
2894
2899
flag = (memcached_behavior ) option ;
2895
2900
2896
- convert_to_long (value );
2897
- rc = memcached_behavior_set (intern -> memc , flag , (uint64_t ) Z_LVAL_P ( value ) );
2901
+ lval = zval_get_long (value );
2902
+ rc = memcached_behavior_set (intern -> memc , flag , (uint64_t )lval );
2898
2903
2899
2904
if (s_memc_status_handle_result_code (intern , rc ) == FAILURE ) {
2900
2905
php_error_docref (NULL , E_WARNING , "error setting memcached option: %s" , memcached_strerror (intern -> memc , rc ));
@@ -2906,7 +2911,7 @@ int php_memc_set_option(php_memc_object_t *intern, long option, zval *value)
2906
2911
* options on false case, like it does for MEMCACHED_BEHAVIOR_KETAMA
2907
2912
* (non-weighted) case. We have to clean up ourselves.
2908
2913
*/
2909
- if (!Z_LVAL_P ( value ) ) {
2914
+ if (!lval ) {
2910
2915
#if defined(LIBMEMCACHED_VERSION_HEX ) && LIBMEMCACHED_VERSION_HEX > 0x00037000
2911
2916
(void )memcached_behavior_set_key_hash (intern -> memc , MEMCACHED_HASH_DEFAULT );
2912
2917
(void )memcached_behavior_set_distribution_hash (intern -> memc , MEMCACHED_HASH_DEFAULT );
@@ -2920,28 +2925,28 @@ int php_memc_set_option(php_memc_object_t *intern, long option, zval *value)
2920
2925
2921
2926
case MEMC_OPT_SERIALIZER :
2922
2927
{
2923
- convert_to_long (value );
2928
+ lval = zval_get_long (value );
2924
2929
/* igbinary serializer */
2925
2930
#ifdef HAVE_MEMCACHED_IGBINARY
2926
- if (Z_LVAL_P ( value ) == SERIALIZER_IGBINARY ) {
2931
+ if (lval == SERIALIZER_IGBINARY ) {
2927
2932
memc_user_data -> serializer = SERIALIZER_IGBINARY ;
2928
2933
} else
2929
2934
#endif
2930
2935
#ifdef HAVE_JSON_API
2931
- if (Z_LVAL_P ( value ) == SERIALIZER_JSON ) {
2936
+ if (lval == SERIALIZER_JSON ) {
2932
2937
memc_user_data -> serializer = SERIALIZER_JSON ;
2933
- } else if (Z_LVAL_P ( value ) == SERIALIZER_JSON_ARRAY ) {
2938
+ } else if (lval == SERIALIZER_JSON_ARRAY ) {
2934
2939
memc_user_data -> serializer = SERIALIZER_JSON_ARRAY ;
2935
2940
} else
2936
2941
#endif
2937
2942
/* msgpack serializer */
2938
2943
#ifdef HAVE_MEMCACHED_MSGPACK
2939
- if (Z_LVAL_P ( value ) == SERIALIZER_MSGPACK ) {
2944
+ if (lval == SERIALIZER_MSGPACK ) {
2940
2945
memc_user_data -> serializer = SERIALIZER_MSGPACK ;
2941
2946
} else
2942
2947
#endif
2943
2948
/* php serializer */
2944
- if (Z_LVAL_P ( value ) == SERIALIZER_PHP ) {
2949
+ if (lval == SERIALIZER_PHP ) {
2945
2950
memc_user_data -> serializer = SERIALIZER_PHP ;
2946
2951
} else {
2947
2952
memc_user_data -> serializer = SERIALIZER_PHP ;
@@ -2953,23 +2958,23 @@ int php_memc_set_option(php_memc_object_t *intern, long option, zval *value)
2953
2958
}
2954
2959
2955
2960
case MEMC_OPT_USER_FLAGS :
2956
- convert_to_long (value );
2961
+ lval = zval_get_long (value );
2957
2962
2958
- if (Z_LVAL_P ( value ) < 0 ) {
2963
+ if (lval < 0 ) {
2959
2964
memc_user_data -> set_udf_flags = -1 ;
2960
2965
return 1 ;
2961
2966
}
2962
2967
2963
- if (Z_LVAL_P ( value ) > MEMC_VAL_USER_FLAGS_MAX ) {
2968
+ if (lval > MEMC_VAL_USER_FLAGS_MAX ) {
2964
2969
php_error_docref (NULL , E_WARNING , "MEMC_OPT_USER_FLAGS must be < %u" , MEMC_VAL_USER_FLAGS_MAX );
2965
2970
return 0 ;
2966
2971
}
2967
- memc_user_data -> set_udf_flags = Z_LVAL_P ( value ) ;
2972
+ memc_user_data -> set_udf_flags = lval ;
2968
2973
break ;
2969
2974
2970
2975
case MEMC_OPT_STORE_RETRY_COUNT :
2971
- convert_to_long (value );
2972
- memc_user_data -> store_retry_count = Z_LVAL_P ( value ) ;
2976
+ lval = zval_get_long (value );
2977
+ memc_user_data -> store_retry_count = lval ;
2973
2978
break ;
2974
2979
2975
2980
default :
@@ -2981,10 +2986,10 @@ int php_memc_set_option(php_memc_object_t *intern, long option, zval *value)
2981
2986
}
2982
2987
else {
2983
2988
flag = (memcached_behavior ) option ;
2984
- convert_to_long (value );
2989
+ lval = zval_get_long (value );
2985
2990
2986
2991
if (flag < MEMCACHED_BEHAVIOR_MAX ) {
2987
- rc = memcached_behavior_set (intern -> memc , flag , (uint64_t ) Z_LVAL_P ( value ) );
2992
+ rc = memcached_behavior_set (intern -> memc , flag , (uint64_t )lval );
2988
2993
}
2989
2994
else {
2990
2995
rc = MEMCACHED_INVALID_ARGUMENTS ;
@@ -3016,15 +3021,9 @@ uint32_t *s_zval_to_uint32_array (zval *input, size_t *num_elements)
3016
3021
retval = ecalloc (* num_elements , sizeof (uint32_t ));
3017
3022
3018
3023
ZEND_HASH_FOREACH_VAL (Z_ARRVAL_P (input ), pzval ) {
3019
- long value = 0 ;
3020
-
3021
- if (Z_TYPE_P (pzval ) == IS_LONG ) {
3022
- value = Z_LVAL_P (pzval );
3023
- } else {
3024
- value = zval_get_long (pzval );
3025
- value = value > 0 ? value : 0 ;
3026
- }
3024
+ zend_long value = 0 ;
3027
3025
3026
+ value = zval_get_long (pzval );
3028
3027
if (value < 0 ) {
3029
3028
php_error_docref (NULL , E_WARNING , "the map must contain positive integers" );
3030
3029
efree (retval );
@@ -3126,14 +3125,9 @@ static PHP_METHOD(Memcached, setOptions)
3126
3125
php_error_docref (NULL , E_WARNING , "invalid configuration option" );
3127
3126
ok = 0 ;
3128
3127
} else {
3129
- zval copy ;
3130
- ZVAL_DUP (& copy , value );
3131
-
3132
- if (!php_memc_set_option (intern , (long ) key_index , & copy )) {
3128
+ if (!php_memc_set_option (intern , (long ) key_index , value )) {
3133
3129
ok = 0 ;
3134
3130
}
3135
-
3136
- zval_dtor (& copy );
3137
3131
}
3138
3132
} ZEND_HASH_FOREACH_END ();
3139
3133
0 commit comments