X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_cookie.c;h=354dfa6ed4f0315aa8dbb0e43fb4062281351316;hp=dd8339bffda829e082d76521bfab3a4a1a5f86c9;hb=046973e332c1475f9bf7717af9d33a75283deb37;hpb=9886ab46dbb299c9d6cfef9d8a0258d91b90a8e6 diff --git a/php_http_cookie.c b/php_http_cookie.c index dd8339b..354dfa6 100644 --- a/php_http_cookie.c +++ b/php_http_cookie.c @@ -6,13 +6,13 @@ | modification, are permitted provided that the conditions mentioned | | in the accompanying LICENSE file are met. | +--------------------------------------------------------------------+ - | Copyright (c) 2004-2013, Michael Wallner | + | Copyright (c) 2004-2014, Michael Wallner | +--------------------------------------------------------------------+ */ #include "php_http_api.h" -PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_init(php_http_cookie_list_t *list TSRMLS_DC) +php_http_cookie_list_t *php_http_cookie_list_init(php_http_cookie_list_t *list TSRMLS_DC) { if (!list) { list = emalloc(sizeof(*list)); @@ -32,7 +32,7 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_init(php_http_cookie_l return list; } -PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_list_t *from, php_http_cookie_list_t *to) +php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_list_t *from, php_http_cookie_list_t *to) { TSRMLS_FETCH_FROM_CTX(from->ts); @@ -41,8 +41,8 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_l array_copy(&from->cookies, &to->cookies); array_copy(&from->extras, &to->extras); - STR_SET(to->path, from->path ? estrdup(from->path) : NULL); - STR_SET(to->domain, from->domain ? estrdup(from->domain) : NULL); + PTR_SET(to->path, from->path ? estrdup(from->path) : NULL); + PTR_SET(to->domain, from->domain ? estrdup(from->domain) : NULL); to->expires = from->expires; to->max_age = from->max_age; to->flags = from->flags; @@ -50,20 +50,20 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_copy(php_http_cookie_l return to; } -PHP_HTTP_API void php_http_cookie_list_dtor(php_http_cookie_list_t *list) +void php_http_cookie_list_dtor(php_http_cookie_list_t *list) { if (list) { zend_hash_destroy(&list->cookies); zend_hash_destroy(&list->extras); - STR_SET(list->path, NULL); - STR_SET(list->domain, NULL); + PTR_SET(list->path, NULL); + PTR_SET(list->domain, NULL); } } -PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list) +void php_http_cookie_list_free(php_http_cookie_list_t **list) { if (*list) { php_http_cookie_list_dtor(*list); @@ -72,7 +72,7 @@ PHP_HTTP_API void php_http_cookie_list_free(php_http_cookie_list_t **list) } } -PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, zval **zcookie) +const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, zval **zcookie) { zval **cookie; if ((SUCCESS != zend_symtable_find(&list->cookies, name, name_len + 1, (void *) &cookie)) || (Z_TYPE_PP(cookie) != IS_STRING)) { @@ -84,7 +84,7 @@ PHP_HTTP_API const char *php_http_cookie_list_get_cookie(php_http_cookie_list_t return Z_STRVAL_PP(cookie); } -PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, zval **zextra) +const char *php_http_cookie_list_get_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, zval **zextra) { zval **extra; @@ -97,7 +97,7 @@ PHP_HTTP_API const char *php_http_cookie_list_get_extra(php_http_cookie_list_t * return Z_STRVAL_PP(extra); } -PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len) +void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len) { zval *cookie_value; @@ -106,7 +106,7 @@ PHP_HTTP_API void php_http_cookie_list_add_cookie(php_http_cookie_list_t *list, zend_symtable_update(&list->cookies, name, name_len + 1, (void *) &cookie_value, sizeof(zval *), NULL); } -PHP_HTTP_API void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len) +void php_http_cookie_list_add_extra(php_http_cookie_list_t *list, const char *name, size_t name_len, const char *value, size_t value_len) { zval *cookie_value; @@ -125,9 +125,9 @@ static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long } if _KEY_IS("path") { - STR_SET(list->path, estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg))); + PTR_SET(list->path, estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg))); } else if _KEY_IS("domain") { - STR_SET(list->domain, estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg))); + PTR_SET(list->domain, estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg))); } else if _KEY_IS("expires") { char *date = estrndup(Z_STRVAL_P(arg), Z_STRLEN_P(arg)); list->expires = php_parse_date(date, NULL); @@ -169,7 +169,7 @@ static void add_entry(php_http_cookie_list_t *list, char **allowed_extras, long zval_ptr_dtor(&arg); } -PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t *list, const char *str, size_t len, long flags, char **allowed_extras TSRMLS_DC) +php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_list_t *list, const char *str, size_t len, long flags, char **allowed_extras TSRMLS_DC) { php_http_params_opts_t opts; HashTable params; @@ -203,7 +203,7 @@ PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_parse(php_http_cookie_ return list; } -PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct) +void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, zval *strct) { zval array, *cookies, *extras; TSRMLS_FETCH_FROM_CTX(list->ts); @@ -227,7 +227,7 @@ PHP_HTTP_API void php_http_cookie_list_to_struct(php_http_cookie_list_t *list, z add_assoc_string(&array, "domain", STR_PTR(list->domain), 1); } -PHP_HTTP_API php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t *list, zval *strct TSRMLS_DC) +php_http_cookie_list_t *php_http_cookie_list_from_struct(php_http_cookie_list_t *list, zval *strct TSRMLS_DC) { zval **tmp, *cpy; HashTable *ht = HASH_OF(strct); @@ -302,7 +302,7 @@ static inline void append_encoded(php_http_buffer_t *buf, const char *key, size_ efree(enc_str[1]); } -PHP_HTTP_API void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len) +void php_http_cookie_list_to_string(php_http_cookie_list_t *list, char **str, size_t *len) { php_http_buffer_t buf; zval **val; @@ -426,85 +426,88 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie___construct, 0, 0, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, __construct) { - with_error_handling(EH_THROW, php_http_exception_class_entry) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - zval *zcookie = NULL; - long flags = 0; - HashTable *allowed_extras = NULL; + php_http_cookie_object_t *obj; + zval *zcookie = NULL; + long flags = 0; + char **ae = NULL; + HashTable *allowed_extras = NULL; + zend_error_handling zeh; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z!lH", &zcookie, &flags, &allowed_extras)) { - if (zcookie) { - with_error_handling(EH_THROW, php_http_exception_class_entry) { - char **ae = NULL; + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|z!lH", &zcookie, &flags, &allowed_extras), invalid_arg, return); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - if (allowed_extras && zend_hash_num_elements(allowed_extras)) { - char **ae_ptr = safe_emalloc(zend_hash_num_elements(allowed_extras) + 1, sizeof(char *), 0); - HashPosition pos; - zval **val; + zend_replace_error_handling(EH_THROW, php_http_exception_runtime_class_entry, &zeh TSRMLS_CC); + if (zcookie) { - ae = ae_ptr; - FOREACH_HASH_VAL(pos, allowed_extras, val) { - zval *cpy = php_http_ztyp(IS_STRING, *val); + if (allowed_extras && zend_hash_num_elements(allowed_extras)) { + char **ae_ptr = safe_emalloc(zend_hash_num_elements(allowed_extras) + 1, sizeof(char *), 0); + HashPosition pos; + zval **val; - *ae_ptr++ = estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy)); - zval_ptr_dtor(&cpy); - } - *ae_ptr = NULL; - } + ae = ae_ptr; + FOREACH_HASH_VAL(pos, allowed_extras, val) { + zval *cpy = php_http_ztyp(IS_STRING, *val); - switch (Z_TYPE_P(zcookie)) { - case IS_OBJECT: - if (instanceof_function(Z_OBJCE_P(zcookie), php_http_cookie_class_entry TSRMLS_CC)) { - php_http_cookie_object_t *zco = zend_object_store_get_object(zcookie TSRMLS_CC); - - if (zco->list) { - obj->list = php_http_cookie_list_copy(zco->list, NULL); - } - break; - } - /* no break */ - case IS_ARRAY: - obj->list = php_http_cookie_list_from_struct(obj->list, zcookie TSRMLS_CC); - break; - default: { - zval *cpy = php_http_ztyp(IS_STRING, zcookie); - - obj->list = php_http_cookie_list_parse(obj->list, Z_STRVAL_P(cpy), Z_STRLEN_P(cpy), flags, ae TSRMLS_CC); - zval_ptr_dtor(&cpy); - break; - } - } + *ae_ptr++ = estrndup(Z_STRVAL_P(cpy), Z_STRLEN_P(cpy)); + zval_ptr_dtor(&cpy); + } + *ae_ptr = NULL; + } - if (ae) { - char **ae_ptr; + switch (Z_TYPE_P(zcookie)) { + case IS_OBJECT: + if (instanceof_function(Z_OBJCE_P(zcookie), php_http_cookie_class_entry TSRMLS_CC)) { + php_http_cookie_object_t *zco = zend_object_store_get_object(zcookie TSRMLS_CC); - for (ae_ptr = ae; *ae_ptr; ++ae_ptr) { - efree(*ae_ptr); - } - efree(ae); + if (zco->list) { + obj->list = php_http_cookie_list_copy(zco->list, NULL); } - } end_error_handling(); + break; + } + /* no break */ + case IS_ARRAY: + obj->list = php_http_cookie_list_from_struct(obj->list, zcookie TSRMLS_CC); + break; + default: { + zval *cpy = php_http_ztyp(IS_STRING, zcookie); + + obj->list = php_http_cookie_list_parse(obj->list, Z_STRVAL_P(cpy), Z_STRLEN_P(cpy), flags, ae TSRMLS_CC); + zval_ptr_dtor(&cpy); + break; } } - PHP_HTTP_COOKIE_OBJECT_INIT(obj); - } end_error_handling(); + + if (ae) { + char **ae_ptr; + + for (ae_ptr = ae; *ae_ptr; ++ae_ptr) { + efree(*ae_ptr); + } + efree(ae); + } + } + zend_restore_error_handling(&zeh TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getCookies, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, getCookies) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + php_http_cookie_object_t *obj; - array_init(return_value); - array_copy(&obj->list->cookies, Z_ARRVAL_P(return_value)); + if (SUCCESS != zend_parse_parameters_none()) { return; } - RETURN_FALSE; + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + array_init(return_value); + array_copy(&obj->list->cookies, Z_ARRVAL_P(return_value)); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_setCookies, 0, 0, 0) @@ -513,17 +516,19 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, setCookies) { HashTable *cookies = NULL; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|H", &cookies)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|H", &cookies), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - zend_hash_clean(&obj->list->cookies); - if (cookies) { - array_copy(cookies, &obj->list->cookies); - } + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + zend_hash_clean(&obj->list->cookies); + if (cookies) { + array_copy_strings(cookies, &obj->list->cookies); } + RETVAL_ZVAL(getThis(), 1, 0); } @@ -533,14 +538,16 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, addCookies) { HashTable *cookies = NULL; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "H", &cookies)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "H", &cookies), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + array_join(cookies, &obj->list->cookies, 1, ARRAY_JOIN_STRONLY|ARRAY_JOIN_STRINGIFY); - array_join(cookies, &obj->list->cookies, 1, ARRAY_JOIN_STRONLY); - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -548,14 +555,18 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getExtras, 0, 0, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, getExtras) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_cookie_object_t *obj; - PHP_HTTP_COOKIE_OBJECT_INIT(obj); - - array_init(return_value); - array_copy(&obj->list->extras, Z_ARRVAL_P(return_value)); + if (SUCCESS != zend_parse_parameters_none()) { + return; } + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + array_init(return_value); + array_copy(&obj->list->extras, Z_ARRVAL_P(return_value)); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_setExtras, 0, 0, 0) @@ -564,17 +575,19 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, setExtras) { HashTable *extras = NULL; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|H", &extras)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|H", &extras), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - zend_hash_clean(&obj->list->extras); - if (extras) { - array_copy(extras, &obj->list->extras); - } + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + zend_hash_clean(&obj->list->extras); + if (extras) { + array_copy_strings(extras, &obj->list->extras); } + RETVAL_ZVAL(getThis(), 1, 0); } @@ -584,14 +597,16 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, addExtras) { HashTable *extras = NULL; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "H", &extras)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "H", &extras), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + array_join(extras, &obj->list->extras, 1, ARRAY_JOIN_STRONLY|ARRAY_JOIN_STRINGIFY); - array_join(extras, &obj->list->extras, 1, ARRAY_JOIN_STRONLY); - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -602,16 +617,19 @@ static PHP_METHOD(HttpCookie, getCookie) { char *name_str; int name_len; + zval *zvalue; + php_http_cookie_object_t *obj; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len)) { + return; + } - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - zval *zvalue; + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + PHP_HTTP_COOKIE_OBJECT_INIT(obj); - if (php_http_cookie_list_get_cookie(obj->list, name_str, name_len, &zvalue)) { - RETURN_ZVAL(zvalue, 1, 0); - } + if (php_http_cookie_list_get_cookie(obj->list, name_str, name_len, &zvalue)) { + RETURN_ZVAL(zvalue, 1, 0); } } @@ -623,18 +641,20 @@ static PHP_METHOD(HttpCookie, setCookie) { char *name_str, *value_str = NULL; int name_len, value_len = 0; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &name_str, &name_len, &value_str, &value_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &name_str, &name_len, &value_str, &value_len), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - if (!value_str) { - php_http_cookie_list_del_cookie(obj->list, name_str, name_len); - } else { - php_http_cookie_list_add_cookie(obj->list, name_str, name_len, value_str, value_len); - } + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + if (!value_str) { + php_http_cookie_list_del_cookie(obj->list, name_str, name_len); + } else { + php_http_cookie_list_add_cookie(obj->list, name_str, name_len, value_str, value_len); } + RETVAL_ZVAL(getThis(), 1, 0); } @@ -646,14 +666,16 @@ static PHP_METHOD(HttpCookie, addCookie) { char *name_str, *value_str; int name_len, value_len; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name_str, &name_len, &value_str, &value_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name_str, &name_len, &value_str, &value_len), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + php_http_cookie_list_add_cookie(obj->list, name_str, name_len, value_str, value_len); - php_http_cookie_list_add_cookie(obj->list, name_str, name_len, value_str, value_len); - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -664,16 +686,19 @@ static PHP_METHOD(HttpCookie, getExtra) { char *name_str; int name_len; + zval *zvalue; + php_http_cookie_object_t *obj; + + if (SUCCESS != zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len)) { + return; + } - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &name_str, &name_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - zval *zvalue; + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + PHP_HTTP_COOKIE_OBJECT_INIT(obj); - if (php_http_cookie_list_get_extra(obj->list, name_str, name_len, &zvalue)) { - RETURN_ZVAL(zvalue, 1, 0); - } + if (php_http_cookie_list_get_extra(obj->list, name_str, name_len, &zvalue)) { + RETURN_ZVAL(zvalue, 1, 0); } } @@ -685,18 +710,20 @@ static PHP_METHOD(HttpCookie, setExtra) { char *name_str, *value_str = NULL; int name_len, value_len = 0; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &name_str, &name_len, &value_str, &value_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s!", &name_str, &name_len, &value_str, &value_len), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - if (!value_str) { - php_http_cookie_list_del_extra(obj->list, name_str, name_len); - } else { - php_http_cookie_list_add_extra(obj->list, name_str, name_len, value_str, value_len); - } + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + if (!value_str) { + php_http_cookie_list_del_extra(obj->list, name_str, name_len); + } else { + php_http_cookie_list_add_extra(obj->list, name_str, name_len, value_str, value_len); } + RETVAL_ZVAL(getThis(), 1, 0); } @@ -708,14 +735,16 @@ static PHP_METHOD(HttpCookie, addExtra) { char *name_str, *value_str; int name_len, value_len; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name_str, &name_len, &value_str, &value_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &name_str, &name_len, &value_str, &value_len), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + php_http_cookie_list_add_extra(obj->list, name_str, name_len, value_str, value_len); - php_http_cookie_list_add_extra(obj->list, name_str, name_len, value_str, value_len); - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -723,15 +752,18 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getDomain, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, getDomain) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_cookie_object_t *obj; + + if (SUCCESS != zend_parse_parameters_none()) { + return; + } - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); - if (obj->list->domain) { - RETURN_STRING(obj->list->domain, 1); - } - RETURN_NULL(); + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + if (obj->list->domain) { + RETURN_STRING(obj->list->domain, 1); } } @@ -742,14 +774,16 @@ static PHP_METHOD(HttpCookie, setDomain) { char *domain_str = NULL; int domain_len = 0; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &domain_str, &domain_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &domain_str, &domain_len), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + PTR_SET(obj->list->domain, domain_str ? estrndup(domain_str, domain_len) : NULL); - STR_SET(obj->list->domain, domain_str ? estrndup(domain_str, domain_len) : NULL); - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -757,15 +791,18 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getPath, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, getPath) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_cookie_object_t *obj; - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + if (SUCCESS != zend_parse_parameters_none()) { + return; + } - if (obj->list->path) { - RETURN_STRING(obj->list->path, 1); - } - RETURN_NULL(); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + if (obj->list->path) { + RETURN_STRING(obj->list->path, 1); } } @@ -776,14 +813,16 @@ static PHP_METHOD(HttpCookie, setPath) { char *path_str = NULL; int path_len = 0; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &path_str, &path_len)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|s!", &path_str, &path_len), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + PTR_SET(obj->list->path, path_str ? estrndup(path_str, path_len) : NULL); - STR_SET(obj->list->path, path_str ? estrndup(path_str, path_len) : NULL); - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -791,13 +830,17 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getExpires, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, getExpires) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + php_http_cookie_object_t *obj; - RETURN_LONG(obj->list->expires); + if (SUCCESS != zend_parse_parameters_none()) { + return; } + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + RETURN_LONG(obj->list->expires); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_setExpires, 0, 0, 0) @@ -806,14 +849,16 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, setExpires) { long ts = -1; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &ts)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &ts), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + obj->list->expires = ts; - obj->list->expires = ts; - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -821,13 +866,17 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getMaxAge, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, getMaxAge) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_cookie_object_t *obj; - PHP_HTTP_COOKIE_OBJECT_INIT(obj); - - RETURN_LONG(obj->list->max_age); + if (SUCCESS != zend_parse_parameters_none()) { + return; } + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + RETURN_LONG(obj->list->max_age); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_setMaxAge, 0, 0, 0) @@ -836,14 +885,16 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, setMaxAge) { long ts = -1; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &ts)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &ts), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + obj->list->max_age = ts; - obj->list->max_age = ts; - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -851,13 +902,17 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_getFlags, 0, 0, 0) ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, getFlags) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + php_http_cookie_object_t *obj; - RETURN_LONG(obj->list->flags); + if (SUCCESS != zend_parse_parameters_none()) { + return; } + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + RETURN_LONG(obj->list->flags); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_setFlags, 0, 0, 0) @@ -866,14 +921,16 @@ ZEND_END_ARG_INFO(); static PHP_METHOD(HttpCookie, setFlags) { long flags = 0; + php_http_cookie_object_t *obj; - if (SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags)) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_expect(SUCCESS == zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|l", &flags), invalid_arg, return); - PHP_HTTP_COOKIE_OBJECT_INIT(obj); + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + obj->list->flags = flags; - obj->list->flags = flags; - } RETVAL_ZVAL(getThis(), 1, 0); } @@ -881,31 +938,39 @@ ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_toString, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, toString) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); - char *str; - size_t len; + php_http_cookie_object_t *obj; + char *str; + size_t len; - PHP_HTTP_COOKIE_OBJECT_INIT(obj); - - php_http_cookie_list_to_string(obj->list, &str, &len); - RETURN_STRINGL(str, len, 0); + if (SUCCESS != zend_parse_parameters_none()) { + RETURN_EMPTY_STRING(); } - RETURN_EMPTY_STRING(); + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + php_http_cookie_list_to_string(obj->list, &str, &len); + + RETURN_STRINGL(str, len, 0); } ZEND_BEGIN_ARG_INFO_EX(ai_HttpCookie_toArray, 0, 0, 0) ZEND_END_ARG_INFO();; static PHP_METHOD(HttpCookie, toArray) { - if (SUCCESS == zend_parse_parameters_none()) { - php_http_cookie_object_t *obj = zend_object_store_get_object(getThis() TSRMLS_CC); + php_http_cookie_object_t *obj; - PHP_HTTP_COOKIE_OBJECT_INIT(obj); - - array_init(return_value); - php_http_cookie_list_to_struct(obj->list, return_value); + if (SUCCESS != zend_parse_parameters_none()) { + return; } + + obj = zend_object_store_get_object(getThis() TSRMLS_CC); + + PHP_HTTP_COOKIE_OBJECT_INIT(obj); + + array_init(return_value); + php_http_cookie_list_to_struct(obj->list, return_value); } static zend_function_entry php_http_cookie_methods[] = { @@ -949,7 +1014,7 @@ PHP_MINIT_FUNCTION(http_cookie) zend_class_entry ce = {0}; INIT_NS_CLASS_ENTRY(ce, "http", "Cookie", php_http_cookie_methods); - php_http_cookie_class_entry = zend_register_internal_class_ex(&ce, php_http_object_class_entry, NULL TSRMLS_CC); + php_http_cookie_class_entry = zend_register_internal_class(&ce TSRMLS_CC); php_http_cookie_class_entry->create_object = php_http_cookie_object_new; memcpy(&php_http_cookie_object_handlers, zend_get_std_object_handlers(), sizeof(zend_object_handlers)); php_http_cookie_object_handlers.clone_obj = php_http_cookie_object_clone;