From: Xinchen Hui Date: Sat, 29 Mar 2014 09:39:26 +0000 (+0800) Subject: Refactor session (incompleted) X-Git-Tag: POST_PHPNG_MERGE~412^2~207 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c1595ca8e1326536d4aa37e03405813a6d55959;p=php Refactor session (incompleted) --- diff --git a/ext/session/php_session.h b/ext/session/php_session.h index b50a35a1c4..0153fe97e8 100644 --- a/ext/session/php_session.h +++ b/ext/session/php_session.h @@ -112,10 +112,10 @@ typedef struct _php_session_rfc1867_progress { size_t content_length; zval data; /* the array exported to session data */ - zval post_bytes_processed; /* data["bytes_processed"] */ + zval *post_bytes_processed; /* data["bytes_processed"] */ zval files; /* data["files"] array */ zval current_file; /* array of currently uploading file */ - zval current_file_bytes_processed; + zval *current_file_bytes_processed; } php_session_rfc1867_progress; typedef struct _php_ps_globals { @@ -174,8 +174,8 @@ typedef struct _php_ps_globals { php_session_rfc1867_progress *rfc1867_progress; zend_bool rfc1867_enabled; /* session.upload_progress.enabled */ zend_bool rfc1867_cleanup; /* session.upload_progress.cleanup */ - smart_str rfc1867_prefix; /* session.upload_progress.prefix */ - smart_str rfc1867_name; /* session.upload_progress.name */ + char *rfc1867_prefix; /* session.upload_progress.prefix */ + char *rfc1867_name; /* session.upload_progress.name */ long rfc1867_freq; /* session.upload_progress.freq */ double rfc1867_min_freq; /* session.upload_progress.min_freq */ diff --git a/ext/session/session.c b/ext/session/session.c index 5cc1fa3464..acb17cebec 100644 --- a/ext/session/session.c +++ b/ext/session/session.c @@ -769,25 +769,6 @@ static PHP_INI_MH(OnUpdateRfc1867Freq) /* {{{ */ return SUCCESS; } /* }}} */ -static ZEND_INI_MH(OnUpdateSmartStr) /* {{{ */ -{ - smart_str *p; -#ifndef ZTS - char *base = (char *) mh_arg2; -#else - char *base; - - base = (char *) ts_resource(*((int *) mh_arg2)); -#endif - - p = (smart_str *) (base+(size_t) mh_arg1); - - smart_str_sets(p, new_value); - - return SUCCESS; -} -/* }}} */ - /* {{{ PHP_INI */ PHP_INI_BEGIN() @@ -830,9 +811,9 @@ PHP_INI_BEGIN() STD_PHP_INI_BOOLEAN("session.upload_progress.cleanup", "1", ZEND_INI_PERDIR, OnUpdateBool, rfc1867_cleanup, php_ps_globals, ps_globals) STD_PHP_INI_ENTRY("session.upload_progress.prefix", - "upload_progress_", ZEND_INI_PERDIR, OnUpdateSmartStr, rfc1867_prefix, php_ps_globals, ps_globals) + "upload_progress_", ZEND_INI_PERDIR, OnUpdateString, rfc1867_prefix, php_ps_globals, ps_globals) STD_PHP_INI_ENTRY("session.upload_progress.name", - "PHP_SESSION_UPLOAD_PROGRESS", ZEND_INI_PERDIR, OnUpdateSmartStr, rfc1867_name, php_ps_globals, ps_globals) + "PHP_SESSION_UPLOAD_PROGRESS", ZEND_INI_PERDIR, OnUpdateString, rfc1867_name, php_ps_globals, ps_globals) STD_PHP_INI_ENTRY("session.upload_progress.freq", "1%", ZEND_INI_PERDIR, OnUpdateRfc1867Freq, rfc1867_freq, php_ps_globals, ps_globals) STD_PHP_INI_ENTRY("session.upload_progress.min_freq", "1", ZEND_INI_PERDIR, OnUpdateReal, rfc1867_min_freq,php_ps_globals, ps_globals) @@ -2639,7 +2620,7 @@ static zend_bool php_check_cancel_upload(php_session_rfc1867_progress *progress static void php_session_rfc1867_update(php_session_rfc1867_progress *progress, int force_update TSRMLS_DC) /* {{{ */ { if (!force_update) { - if (Z_LVAL(progress->post_bytes_processed) < progress->next_update) { + if (Z_LVAL_P(progress->post_bytes_processed) < progress->next_update) { return; } #ifdef HAVE_GETTIMEOFDAY @@ -2654,7 +2635,7 @@ static void php_session_rfc1867_update(php_session_rfc1867_progress *progress, i progress->next_update_time = dtv + PS(rfc1867_min_freq); } #endif - progress->next_update = Z_LVAL(progress->post_bytes_processed) + progress->update_step; + progress->next_update = Z_LVAL_P(progress->post_bytes_processed) + progress->update_step; } php_session_initialize(TSRMLS_C); @@ -2720,9 +2701,9 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo if (name_len == progress->sname_len && memcmp(data->name, PS(session_name), name_len) == 0) { zval_dtor(&progress->sid); ZVAL_STRINGL(&progress->sid, (*data->value), value_len); - } else if (name_len == PS(rfc1867_name).s->len && memcmp(data->name, PS(rfc1867_name).s->val, name_len) == 0) { + } else if (memcmp(data->name, PS(rfc1867_name), name_len + 1) == 0) { smart_str_free(&progress->key); - smart_str_appendl(&progress->key, PS(rfc1867_prefix).s->val, PS(rfc1867_prefix).s->len); + smart_str_appends(&progress->key, PS(rfc1867_prefix)); smart_str_appendl(&progress->key, *data->value, value_len); smart_str_0(&progress->key); @@ -2742,7 +2723,7 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo } /* First FILE_START event, initializing data */ - if (ZVAL_IS_NULL(&progress->data)) { + if (ZVAL_IS_UNDEF(&progress->data)) { if (PS(rfc1867_freq) >= 0) { progress->update_step = PS(rfc1867_freq); @@ -2753,17 +2734,16 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo progress->next_update_time = 0.0; array_init(&progress->data); - - ZVAL_LONG(&progress->post_bytes_processed, data->post_bytes_processed); - array_init(&progress->files); add_assoc_long_ex(&progress->data, "start_time", sizeof("start_time") - 1, (long)sapi_get_request_time(TSRMLS_C)); - add_assoc_long_ex(&progress->data, "content_length", sizeof("content_length"), progress->content_length); - add_assoc_zval_ex(&progress->data, "bytes_processed", sizeof("bytes_processed") - 1, &progress->post_bytes_processed); + add_assoc_long_ex(&progress->data, "content_length", sizeof("content_length") - 1, progress->content_length); + add_assoc_long_ex(&progress->data, "bytes_processed", sizeof("bytes_processed") - 1, data->post_bytes_processed); add_assoc_bool_ex(&progress->data, "done", sizeof("done") - 1, 0); add_assoc_zval_ex(&progress->data, "files", sizeof("files") - 1, &progress->files); + progress->post_bytes_processed = zend_hash_str_find(Z_ARRVAL(progress->data), "bytes_processed", sizeof("bytes_processed") - 1); + php_rinit_session(0 TSRMLS_CC); PS(id) = STR_INIT(Z_STRVAL(progress->sid), Z_STRLEN(progress->sid), 0); PS(apply_trans_sid) = progress->apply_trans_sid; @@ -2771,7 +2751,6 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo } array_init(&progress->current_file); - ZVAL_LONG(&progress->current_file_bytes_processed, 0); /* Each uploaded file has its own array. Trying to make it close to $_FILES entries. */ add_assoc_string_ex(&progress->current_file, "field_name", sizeof("field_name") - 1, data->name, 1); @@ -2781,12 +2760,13 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo add_assoc_bool_ex(&progress->current_file, "done", sizeof("done") - 1, 0); add_assoc_long_ex(&progress->current_file, "start_time", sizeof("start_time") - 1, (long)time(NULL)); - add_assoc_zval_ex(&progress->current_file, "bytes_processed", sizeof("bytes_processed") - 1, &progress->current_file_bytes_processed); + add_assoc_long_ex(&progress->current_file, "bytes_processed", sizeof("bytes_processed") - 1, 0); add_next_index_zval(&progress->files, &progress->current_file); - Z_LVAL(progress->post_bytes_processed) = data->post_bytes_processed; + progress->current_file_bytes_processed = zend_hash_str_find(Z_ARRVAL(progress->current_file), "bytes_processed", sizeof("bytes_processed") - 1); + Z_LVAL_P(progress->current_file_bytes_processed) = data->post_bytes_processed; php_session_rfc1867_update(progress, 0 TSRMLS_CC); } break; @@ -2797,8 +2777,8 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo break; } - Z_LVAL(progress->current_file_bytes_processed) = data->offset + data->length; - Z_LVAL(progress->post_bytes_processed) = data->post_bytes_processed; + Z_LVAL_P(progress->current_file_bytes_processed) = data->offset + data->length; + Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; php_session_rfc1867_update(progress, 0 TSRMLS_CC); } @@ -2817,7 +2797,7 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo add_assoc_long_ex(&progress->current_file, "error", sizeof("error") - 1, data->cancel_upload); add_assoc_bool_ex(&progress->current_file, "done", sizeof("done") - 1, 1); - Z_LVAL(progress->post_bytes_processed) = data->post_bytes_processed; + Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; php_session_rfc1867_update(progress, 0 TSRMLS_CC); } @@ -2830,7 +2810,7 @@ static int php_session_rfc1867_callback(unsigned int event, void *event_data, vo php_session_rfc1867_cleanup(progress TSRMLS_CC); } else { add_assoc_bool_ex(&progress->data, "done", sizeof("done") - 1, 1); - Z_LVAL(progress->post_bytes_processed) = data->post_bytes_processed; + Z_LVAL_P(progress->post_bytes_processed) = data->post_bytes_processed; php_session_rfc1867_update(progress, 1 TSRMLS_CC); } php_rshutdown_session_globals(TSRMLS_C); diff --git a/ext/standard/php_smart_str.h b/ext/standard/php_smart_str.h index 283d3eb8b7..e11eb734ed 100644 --- a/ext/standard/php_smart_str.h +++ b/ext/standard/php_smart_str.h @@ -31,8 +31,6 @@ #define smart_str_0(x) do { \ if ((x)->s) { \ (x)->s->val[(x)->s->len] = '\0'; \ - } else { \ - smart_str_appendc((x), '\0'); \ } \ } while (0) diff --git a/ext/standard/url_scanner_ex.c b/ext/standard/url_scanner_ex.c index 35f10bf4f5..b1bb0a1685 100644 --- a/ext/standard/url_scanner_ex.c +++ b/ext/standard/url_scanner_ex.c @@ -282,7 +282,7 @@ static void handle_form(STD_PARA) if (!strncasecmp(ctx->tag.s->val, "form", sizeof("form") - 1)) { doit = 1; } - if (doit && ctx->val.s && ctx->lookup_data && *ctx->lookup_data) { + if (doit && ctx->val.s->val && ctx->lookup_data && *ctx->lookup_data) { char *e, *p = (char *)zend_memnstr(ctx->val.s->val, "://", sizeof("://") - 1, ctx->val.s->val + ctx->val.s->len); if (p) { e = memchr(p, '/', (ctx->val.s->val + ctx->val.s->len) - p); @@ -1006,7 +1006,7 @@ static void php_url_scanner_output_handler(char *output, uint output_len, char * *handled_output_len = len; } else if (BG(url_adapt_state_ex).url_app.s->len == 0) { url_adapt_state_ex_t *ctx = &BG(url_adapt_state_ex); - if (ctx->buf.s) { + if (ctx->buf.s && ctx->buf.s->len) { smart_str_appendl(&ctx->result, ctx->buf.s->val, ctx->buf.s->len); smart_str_appendl(&ctx->result, output, output_len); @@ -1035,7 +1035,7 @@ PHPAPI int php_url_scanner_add_var(char *name, int name_len, char *value, int va } - if (BG(url_adapt_state_ex).url_app.s) { + if (BG(url_adapt_state_ex).url_app.s && BG(url_adapt_state_ex).url_app.s->len != 0) { smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output); } diff --git a/ext/standard/url_scanner_ex.re b/ext/standard/url_scanner_ex.re index 2ad7191c86..cc9bdbc64e 100644 --- a/ext/standard/url_scanner_ex.re +++ b/ext/standard/url_scanner_ex.re @@ -458,7 +458,7 @@ static void php_url_scanner_output_handler(char *output, uint output_len, char * *handled_output_len = len; } else if (BG(url_adapt_state_ex).url_app.s->len == 0) { url_adapt_state_ex_t *ctx = &BG(url_adapt_state_ex); - if (ctx->buf.s) { + if (ctx->buf.s && ctx->buf.s->len) { smart_str_appendl(&ctx->result, ctx->buf.s->val, ctx->buf.s->len); smart_str_appendl(&ctx->result, output, output_len); @@ -487,7 +487,7 @@ PHPAPI int php_url_scanner_add_var(char *name, int name_len, char *value, int va } - if (BG(url_adapt_state_ex).url_app.s) { + if (BG(url_adapt_state_ex).url_app.s && BG(url_adapt_state_ex).url_app.s->len != 0) { smart_str_appends(&BG(url_adapt_state_ex).url_app, PG(arg_separator).output); }