action; \
}
+#define HTTP_CHECK_HEADERS_SENT(action) \
+ if (SG(headers_sent) && !SG(request_info).no_headers) { \
+ char *output_start_filename = php_get_output_start_filename(TSRMLS_C); \
+ int output_start_lineno = php_get_output_start_lineno(TSRMLS_C); \
+ \
+ if (output_start_filename) { \
+ http_error_ex(HE_WARNING, HTTP_E_HEADER, "Cannot modify header information - headers already sent by (output started at %s:%d)", \
+ output_start_filename, output_start_lineno); \
+ } else { \
+ http_error(HE_WARNING, HTTP_E_HEADER, "Cannot modify header information - headers already sent"); \
+ } \
+ action; \
+ }
+
+
#define http_log(f, i, m) _http_log_ex((f), (i), (m) TSRMLS_CC)
extern void http_log_ex(char *file, const char *ident, const char *message TSRMLS_DC);
}
return z;
}
-#define convert_to_type_ex(t, z) _convert_to_type_ex((t), (z))
-static inline zval *_convert_to_type_ex(int type, zval *z)
+#define convert_to_type_ex(t, z, p) _convert_to_type_ex((t), (z), (p))
+static inline zval *_convert_to_type_ex(int type, zval *z, zval **p)
{
+ *p = z;
if (Z_TYPE_P(z) != type) {
switch (type)
{
case IS_OBJECT: convert_to_object_ex(&z); break;
}
}
+ if (*p == z) {
+ *p = NULL;
+ } else {
+ *p = z;
+ }
return z;
}