summaryrefslogtreecommitdiff
path: root/ext/session/mod_user.c
diff options
context:
space:
mode:
authorXinchen Hui <laruence@gmail.com>2014-03-28 18:46:25 +0800
committerXinchen Hui <laruence@gmail.com>2014-03-28 18:46:25 +0800
commit3647fc6fcc63262e0347ee78a37b2410bf6a7035 (patch)
treec6f88444ec6f6446cd75570e7b3b93c7295aa193 /ext/session/mod_user.c
parentea85451b65b904d0670c4011c819a15431720432 (diff)
downloadphp-git-3647fc6fcc63262e0347ee78a37b2410bf6a7035.tar.gz
Refactor session (incompleted)
Diffstat (limited to 'ext/session/mod_user.c')
-rw-r--r--ext/session/mod_user.c96
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);
}
/*