@@ -85,6 +85,44 @@ END_EXTERN_C()
85
85
#define PHP_STREAM_NOTIFY_SEVERITY_ERR 2
86
86
87
87
BEGIN_EXTERN_C ()
88
+ static zend_always_inline bool php_stream_zend_parse_arg_into_stream_context (
89
+ zval * arg ,
90
+ php_stream_context * * destination_context_ptr ,
91
+ bool check_null ,
92
+ php_stream_context * default_context
93
+ ) {
94
+ if (EXPECTED (Z_TYPE_P (arg ) == IS_RESOURCE )) {
95
+ * destination_context_ptr = (php_stream_context * )zend_fetch_resource_ex (arg , "Stream-Context" , php_le_stream_context ());
96
+ if (UNEXPECTED (* destination_context_ptr == NULL )) {
97
+ return false;
98
+ }
99
+ } else if (check_null && EXPECTED (Z_TYPE_P (arg ) == IS_NULL )) {
100
+ if (default_context ) {
101
+ * destination_context_ptr = default_context ;
102
+ } else {
103
+ * destination_context_ptr = NULL ;
104
+ }
105
+ } else {
106
+ return false;
107
+ }
108
+ return true;
109
+ }
110
+
111
+ #define PHP_Z_PARAM_STREAM_CONTEXT_EX (destination_context_ptr , check_null , null_as_default_context ) \
112
+ Z_PARAM_PROLOGUE(0, 0); \
113
+ php_stream_context *php_param_default_context = php_stream_context_get_default(null_as_default_context); \
114
+ if (UNEXPECTED(!php_stream_zend_parse_arg_into_stream_context(_arg, &destination_context_ptr, check_null, php_param_default_context))) { \
115
+ _error_code = ZPP_ERROR_FAILURE; \
116
+ if (!EG(exception)) { \
117
+ _expected_type = check_null ? Z_EXPECTED_RESOURCE_OR_NULL : Z_EXPECTED_RESOURCE; \
118
+ _error_code = ZPP_ERROR_WRONG_ARG; \
119
+ } \
120
+ break; \
121
+ }
122
+ #define PHP_Z_PARAM_STREAM_CONTEXT (dest ) PHP_Z_PARAM_STREAM_CONTEXT_EX(dest, false, false)
123
+ #define PHP_Z_PARAM_STREAM_CONTEXT_OR_NULL (dest ) PHP_Z_PARAM_STREAM_CONTEXT_EX(dest, true, false)
124
+ #define PHP_Z_PARAM_STREAM_CONTEXT_OR_NULL_AS_DEFAULT_CONTEXT (dest ) PHP_Z_PARAM_STREAM_CONTEXT_EX(dest, true, true)
125
+
88
126
PHPAPI void php_stream_notification_notify (php_stream_context * context , int notifycode , int severity ,
89
127
char * xmsg , int xcode , size_t bytes_sofar , size_t bytes_max , void * ptr );
90
128
PHPAPI php_stream_context * php_stream_context_set (php_stream * stream , php_stream_context * context );
0 commit comments