diff options
author | Xinchen Hui <laruence@gmail.com> | 2014-03-28 18:46:25 +0800 |
---|---|---|
committer | Xinchen Hui <laruence@gmail.com> | 2014-03-28 18:46:25 +0800 |
commit | 3647fc6fcc63262e0347ee78a37b2410bf6a7035 (patch) | |
tree | c6f88444ec6f6446cd75570e7b3b93c7295aa193 /ext/session/mod_user.c | |
parent | ea85451b65b904d0670c4011c819a15431720432 (diff) | |
download | php-git-3647fc6fcc63262e0347ee78a37b2410bf6a7035.tar.gz |
Refactor session (incompleted)
Diffstat (limited to 'ext/session/mod_user.c')
-rw-r--r-- | ext/session/mod_user.c | 96 |
1 files changed, 44 insertions, 52 deletions
diff --git a/ext/session/mod_user.c b/ext/session/mod_user.c index 5573d4cdfd..4e42a1ba14 100644 --- a/ext/session/mod_user.c +++ b/ext/session/mod_user.c @@ -28,7 +28,6 @@ ps_module ps_mod_user = { #define SESS_ZVAL_LONG(val, a) \ { \ - MAKE_STD_ZVAL(a); \ ZVAL_LONG(a, val); \ } @@ -40,58 +39,53 @@ ps_module ps_mod_user = { #define SESS_ZVAL_STRINGN(vl, ln, a) \ { \ - MAKE_STD_ZVAL(a); \ - ZVAL_STRINGL(a, vl, ln, 1); \ + ZVAL_STRINGL(a, vl, ln); \ } -static zval *ps_call_handler(zval *func, int argc, zval **argv TSRMLS_DC) +#define SESS_ZVAL_STR(vl, a) \ +{ \ + ZVAL_STR(a, STR_COPY(vl)); \ +} + +static void ps_call_handler(zval *func, int argc, zval *argv, zval *retval TSRMLS_DC) { int i; - zval *retval = NULL; - - MAKE_STD_ZVAL(retval); - if (call_user_function(EG(function_table), NULL, func, retval, argc, argv TSRMLS_CC) == FAILURE) { - zval_ptr_dtor(&retval); - retval = NULL; - } - + call_user_function(EG(function_table), NULL, func, retval, argc, argv TSRMLS_CC); for (i = 0; i < argc; i++) { zval_ptr_dtor(&argv[i]); } - - return retval; } #define STDVARS \ - zval *retval = NULL; \ + zval retval; \ int ret = FAILURE #define PSF(a) PS(mod_user_names).name.ps_##a #define FINISH \ - if (retval) { \ - convert_to_long(retval); \ - ret = Z_LVAL_P(retval); \ + if (!ZVAL_IS_UNDEF(&retval)) { \ + convert_to_long(&retval); \ + ret = Z_LVAL(retval); \ zval_ptr_dtor(&retval); \ } \ return ret PS_OPEN_FUNC(user) { - zval *args[2]; + zval args[2]; STDVARS; - if (PSF(open) == NULL) { + if (ZVAL_IS_UNDEF(&PSF(open))) { php_error_docref(NULL TSRMLS_CC, E_WARNING, "user session functions not defined"); return FAILURE; } - SESS_ZVAL_STRING((char*)save_path, args[0]); - SESS_ZVAL_STRING((char*)session_name, args[1]); + SESS_ZVAL_STRING((char*)save_path, &args[0]); + SESS_ZVAL_STRING((char*)session_name, &args[1]); - retval = ps_call_handler(PSF(open), 2, args TSRMLS_CC); + ps_call_handler(&PSF(open), 2, args, &retval TSRMLS_CC); PS(mod_user_implemented) = 1; FINISH; @@ -108,7 +102,7 @@ PS_CLOSE_FUNC(user) } zend_try { - retval = ps_call_handler(PSF(close), 0, NULL TSRMLS_CC); + ps_call_handler(&PSF(close), 0, NULL, &retval TSRMLS_CC); } zend_catch { bailout = 1; } zend_end_try(); @@ -116,7 +110,7 @@ PS_CLOSE_FUNC(user) PS(mod_user_implemented) = 0; if (bailout) { - if (retval) { + if (!ZVAL_IS_UNDEF(&retval)) { zval_ptr_dtor(&retval); } zend_bailout(); @@ -127,17 +121,16 @@ PS_CLOSE_FUNC(user) PS_READ_FUNC(user) { - zval *args[1]; + zval args[1]; STDVARS; - SESS_ZVAL_STRING((char*)key, args[0]); + SESS_ZVAL_STR(key, &args[0]); - retval = ps_call_handler(PSF(read), 1, args TSRMLS_CC); + ps_call_handler(&PSF(read), 1, args, &retval TSRMLS_CC); - if (retval) { - if (Z_TYPE_P(retval) == IS_STRING) { - *val = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval)); - *vallen = Z_STRLEN_P(retval); + if (!ZVAL_IS_UNDEF(&retval)) { + if (Z_TYPE(retval) == IS_STRING) { + *val = STR_COPY(Z_STR(retval)); ret = SUCCESS; } zval_ptr_dtor(&retval); @@ -148,37 +141,37 @@ PS_READ_FUNC(user) PS_WRITE_FUNC(user) { - zval *args[2]; + zval args[2]; STDVARS; - SESS_ZVAL_STRING((char*)key, args[0]); - SESS_ZVAL_STRINGN((char*)val, vallen, args[1]); + SESS_ZVAL_STR(key, &args[0]); + SESS_ZVAL_STR(val, &args[1]); - retval = ps_call_handler(PSF(write), 2, args TSRMLS_CC); + ps_call_handler(&PSF(write), 2, args, &retval TSRMLS_CC); FINISH; } PS_DESTROY_FUNC(user) { - zval *args[1]; + zval args[1]; STDVARS; - SESS_ZVAL_STRING((char*)key, args[0]); + SESS_ZVAL_STR(key, &args[0]); - retval = ps_call_handler(PSF(destroy), 1, args TSRMLS_CC); + ps_call_handler(&PSF(destroy), 1, args, &retval TSRMLS_CC); FINISH; } PS_GC_FUNC(user) { - zval *args[1]; + zval args[1]; STDVARS; - SESS_ZVAL_LONG(maxlifetime, args[0]); + SESS_ZVAL_LONG(maxlifetime, &args[0]); - retval = ps_call_handler(PSF(gc), 1, args TSRMLS_CC); + ps_call_handler(&PSF(gc), 1, args, &retval TSRMLS_CC); FINISH; } @@ -186,19 +179,18 @@ PS_GC_FUNC(user) PS_CREATE_SID_FUNC(user) { /* maintain backwards compatibility */ - if (PSF(create_sid) != NULL) { - char *id = NULL; - zval *retval = NULL; + if (!ZVAL_IS_UNDEF(&PSF(create_sid))) { + zend_string *id = NULL; + zval retval; - retval = ps_call_handler(PSF(create_sid), 0, NULL TSRMLS_CC); + ps_call_handler(&PSF(create_sid), 0, NULL, &retval TSRMLS_CC); - if (retval) { - if (Z_TYPE_P(retval) == IS_STRING) { - id = estrndup(Z_STRVAL_P(retval), Z_STRLEN_P(retval)); + if (!ZVAL_IS_UNDEF(&retval)) { + if (Z_TYPE(retval) == IS_STRING) { + id = STR_COPY(Z_STR(retval)); } zval_ptr_dtor(&retval); - } - else { + } else { php_error_docref(NULL TSRMLS_CC, E_ERROR, "No session id returned by function"); return NULL; } @@ -212,7 +204,7 @@ PS_CREATE_SID_FUNC(user) } /* function as defined by PS_MOD */ - return php_session_create_id(mod_data, newlen TSRMLS_CC); + return php_session_create_id(mod_data TSRMLS_CC); } /* |