X-Git-Url: https://git.m6w6.name/?p=m6w6%2Fext-http;a=blobdiff_plain;f=php_http_misc.h;h=a07f32fc83b835ccd6971088cc3837a9a8329a57;hp=7e5953031dffffc4e09db91a2c01eb79e03ebef0;hb=a65a722cb32032edba03073b4f7cc0fe744a04dc;hpb=0a0f485c70d8571a954cb5fccc53e104540b9a30 diff --git a/php_http_misc.h b/php_http_misc.h index 7e59530..a07f32f 100644 --- a/php_http_misc.h +++ b/php_http_misc.h @@ -158,7 +158,7 @@ static inline const char *php_http_locate_bin_eol(const char *bin, size_t len, i Z_ARRVAL_P(zv) = (ht); \ } -static inline zval *php_http_zsep(int type, zval *z) +static inline zval *php_http_ztyp(int type, zval *z) { SEPARATE_ARG_IF_REF(z); if (Z_TYPE_P(z) != type) { @@ -175,6 +175,26 @@ static inline zval *php_http_zsep(int type, zval *z) return z; } +static inline zval *php_http_zsep(zend_bool add_ref, int type, zval *z) { + if (add_ref) { + Z_ADDREF_P(z); + } + if (Z_TYPE_P(z) != type) { + switch (type) { + case IS_NULL: convert_to_null_ex(&z); break; + case IS_BOOL: convert_to_boolean_ex(&z); break; + case IS_LONG: convert_to_long_ex(&z); break; + case IS_DOUBLE: convert_to_double_ex(&z); break; + case IS_STRING: convert_to_string_ex(&z); break; + case IS_ARRAY: convert_to_array_ex(&z); break; + case IS_OBJECT: convert_to_object_ex(&z); break; + } + } else { + SEPARATE_ZVAL_IF_NOT_REF(&z); + } + return z; +} + /* return bool (v == SUCCESS) */ #define RETVAL_SUCCESS(v) RETVAL_BOOL(SUCCESS == (v)) @@ -332,6 +352,12 @@ static inline zval *php_http_zsep(int type, zval *z) ZEND_ARG_PASS_INFO(0) \ ZEND_ARG_PASS_INFO(1) \ ZEND_END_ARG_INFO(); \ +\ + ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_3, 0) \ + ZEND_ARG_PASS_INFO(0) \ + ZEND_ARG_PASS_INFO(0) \ + ZEND_ARG_PASS_INFO(1) \ + ZEND_END_ARG_INFO(); \ \ ZEND_BEGIN_ARG_INFO(http_arg_pass_ref_4, 0) \ ZEND_ARG_PASS_INFO(0) \ @@ -413,6 +439,7 @@ extern void php_http_error(long type TSRMLS_DC, long code, const char *format, . #define HE_ERROR E_ERROR TSRMLS_CC typedef enum php_http_error { + PHP_HTTP_E_UNKNOWN = 0, PHP_HTTP_E_RUNTIME, PHP_HTTP_E_INVALID_PARAM, PHP_HTTP_E_HEADER,