{
memset(BG(strtok_table), 0, 256);
BG(strtok_string) = NULL;
+ BG(strtok_zval) = NULL;
BG(locale_string) = NULL;
BG(user_compare_func_name) = NULL;
BG(array_walk_func_name) = NULL;
PHP_RSHUTDOWN_FUNCTION(basic)
{
- STR_FREE(BG(strtok_string));
+ if (BG(strtok_zval))
+ zval_ptr_dtor(BG(strtok_zval));
BG(strtok_string) = NULL;
+ BG(strtok_zval) = NULL;
#ifdef HAVE_PUTENV
zend_hash_destroy(&BG(putenv_ht));
#endif
tok = args[1];
convert_to_string_ex(str);
- STR_FREE(BG(strtok_string));
- BG(strtok_last) = BG(strtok_string) = estrndup(Z_STRVAL_PP(str), Z_STRLEN_PP(str));
+ zval_add_ref(str);
+ if (BG(strtok_zval))
+ zval_ptr_dtor(BG(strtok_zval));
+ BG(strtok_zval) = str;
+
+ BG(strtok_last) = BG(strtok_string) = Z_STRVAL_PP(str);
BG(strtok_len) = Z_STRLEN_PP(str);
break;
}