Browse Source

Use the unified notation...

experimetnal/RETURN_REF_PATCH
Zeev Suraski 27 years ago
parent
commit
db0fcc6d11
  1. 132
      ext/standard/output.c
  2. 132
      main/output.c

132
ext/standard/output.c

@ -52,12 +52,12 @@ typedef struct {
} php_output_globals; } php_output_globals;
#ifdef ZTS #ifdef ZTS
#define OUTPUT(v) (output_globals->v)
#define OUTPUTLS_FETCH() php_output_globals *output_globals = ts_resource(output_globals_id)
#define OG(v) (output_globals->v)
#define OLS_FETCH() php_output_globals *output_globals = ts_resource(output_globals_id)
int output_globals_id; int output_globals_id;
#else #else
#define OUTPUT(v) (output_globals.v)
#define OUTPUTLS_FETCH()
#define OG(v) (output_globals.v)
#define OLS_FETCH()
php_output_globals output_globals; php_output_globals output_globals;
#endif #endif
@ -71,12 +71,12 @@ PHP_FUNCTION(ob_get_contents);
#ifdef ZTS #ifdef ZTS
static void php_output_init_globals(php_output_globals *output_globals) static void php_output_init_globals(php_output_globals *output_globals)
{ {
OUTPUT(php_body_write) = NULL;
OUTPUT(php_header_write) = NULL;
OUTPUT(ob_buffer) = NULL;
OUTPUT(ob_size) = 0;
OUTPUT(ob_block_size) = 0;
OUTPUT(ob_text_length) = 0;
OG(php_body_write) = NULL;
OG(php_header_write) = NULL;
OG(ob_buffer) = NULL;
OG(ob_size) = 0;
OG(ob_block_size) = 0;
OG(ob_text_length) = 0;
} }
#endif #endif
@ -86,12 +86,12 @@ PHP_GINIT_FUNCTION(output)
#ifdef ZTS #ifdef ZTS
output_globals_id = ts_allocate_id(sizeof(php_output_globals), NULL, NULL); output_globals_id = ts_allocate_id(sizeof(php_output_globals), NULL, NULL);
#else #else
OUTPUT(php_body_write) = NULL;
OUTPUT(php_header_write) = NULL;
OUTPUT(ob_buffer) = NULL;
OUTPUT(ob_size) = 0;
OUTPUT(ob_block_size) = 0;
OUTPUT(ob_text_length) = 0;
OG(php_body_write) = NULL;
OG(php_header_write) = NULL;
OG(ob_buffer) = NULL;
OG(ob_size) = 0;
OG(ob_block_size) = 0;
OG(ob_text_length) = 0;
#endif #endif
return SUCCESS; return SUCCESS;
@ -137,32 +137,32 @@ PHP_RSHUTDOWN_FUNCTION(output)
/* Start output layer */ /* Start output layer */
PHPAPI void php_output_startup() PHPAPI void php_output_startup()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
OUTPUT(ob_buffer) = NULL;
OUTPUT(php_body_write) = php_ub_body_write;
OUTPUT(php_header_write) = sapi_module.ub_write;
OG(ob_buffer) = NULL;
OG(php_body_write) = php_ub_body_write;
OG(php_header_write) = sapi_module.ub_write;
} }
PHPAPI int php_body_write(const char *str, uint str_length) PHPAPI int php_body_write(const char *str, uint str_length)
{ {
OUTPUTLS_FETCH();
return OUTPUT(php_body_write)(str, str_length);
OLS_FETCH();
return OG(php_body_write)(str, str_length);
} }
PHPAPI int php_header_write(const char *str, uint str_length) PHPAPI int php_header_write(const char *str, uint str_length)
{ {
OUTPUTLS_FETCH();
return OUTPUT(php_header_write)(str, str_length);
OLS_FETCH();
return OG(php_header_write)(str, str_length);
} }
/* Start output buffering */ /* Start output buffering */
PHPAPI void php_start_ob_buffering() PHPAPI void php_start_ob_buffering()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
php_ob_init(4096, 1024); php_ob_init(4096, 1024);
OUTPUT(php_body_write) = php_b_body_write;
OG(php_body_write) = php_b_body_write;
} }
@ -170,15 +170,15 @@ PHPAPI void php_start_ob_buffering()
PHPAPI void php_end_ob_buffering(int send_buffer) PHPAPI void php_end_ob_buffering(int send_buffer)
{ {
SLS_FETCH(); SLS_FETCH();
OUTPUTLS_FETCH();
OLS_FETCH();
if (!OUTPUT(ob_buffer)) {
if (!OG(ob_buffer)) {
return; return;
} }
if (SG(headers_sent) && !SG(request_info).headers_only) { if (SG(headers_sent) && !SG(request_info).headers_only) {
OUTPUT(php_body_write) = php_ub_body_write_no_header;
OG(php_body_write) = php_ub_body_write_no_header;
} else { } else {
OUTPUT(php_body_write) = php_ub_body_write;
OG(php_body_write) = php_ub_body_write;
} }
if (send_buffer) { if (send_buffer) {
php_ob_send(); php_ob_send();
@ -193,38 +193,38 @@ PHPAPI void php_end_ob_buffering(int send_buffer)
static inline void php_ob_allocate() static inline void php_ob_allocate()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (OUTPUT(ob_size)<OUTPUT(ob_text_length)) {
while (OUTPUT(ob_size) <= OUTPUT(ob_text_length))
OUTPUT(ob_size)+=OUTPUT(ob_block_size);
if (OG(ob_size)<OG(ob_text_length)) {
while (OG(ob_size) <= OG(ob_text_length))
OG(ob_size)+=OG(ob_block_size);
OUTPUT(ob_buffer) = (char *) erealloc(OUTPUT(ob_buffer), OUTPUT(ob_size)+1);
OG(ob_buffer) = (char *) erealloc(OG(ob_buffer), OG(ob_size)+1);
} }
} }
static void php_ob_init(uint initial_size, uint block_size) static void php_ob_init(uint initial_size, uint block_size)
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (OUTPUT(ob_buffer)) {
if (OG(ob_buffer)) {
return; return;
} }
OUTPUT(ob_block_size) = block_size;
OUTPUT(ob_size) = initial_size;
OUTPUT(ob_buffer) = (char *) emalloc(initial_size+1);
OUTPUT(ob_text_length) = 0;
OG(ob_block_size) = block_size;
OG(ob_size) = initial_size;
OG(ob_buffer) = (char *) emalloc(initial_size+1);
OG(ob_text_length) = 0;
} }
static void php_ob_destroy() static void php_ob_destroy()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (OUTPUT(ob_buffer)) {
efree(OUTPUT(ob_buffer));
OUTPUT(ob_buffer) = NULL;
if (OG(ob_buffer)) {
efree(OG(ob_buffer));
OG(ob_buffer) = NULL;
} }
} }
@ -233,13 +233,13 @@ static void php_ob_append(const char *text, uint text_length)
{ {
char *target; char *target;
int original_ob_text_length; int original_ob_text_length;
OUTPUTLS_FETCH();
OLS_FETCH();
original_ob_text_length=OUTPUT(ob_text_length);
original_ob_text_length=OG(ob_text_length);
OUTPUT(ob_text_length) += text_length;
OG(ob_text_length) += text_length;
php_ob_allocate(); php_ob_allocate();
target = OUTPUT(ob_buffer)+original_ob_text_length;
target = OG(ob_buffer)+original_ob_text_length;
memcpy(target, text, text_length); memcpy(target, text, text_length);
target[text_length]=0; target[text_length]=0;
} }
@ -248,43 +248,43 @@ static void php_ob_append(const char *text, uint text_length)
static void php_ob_prepend(const char *text, uint text_length) static void php_ob_prepend(const char *text, uint text_length)
{ {
char *p, *start; char *p, *start;
OUTPUTLS_FETCH();
OLS_FETCH();
OUTPUT(ob_text_length) += text_length;
OG(ob_text_length) += text_length;
php_ob_allocate(); php_ob_allocate();
/* php_ob_allocate() may change OUTPUT(ob_buffer), so we can't initialize p&start earlier */
p = OUTPUT(ob_buffer)+OUTPUT(ob_text_length);
start = OUTPUT(ob_buffer);
/* php_ob_allocate() may change OG(ob_buffer), so we can't initialize p&start earlier */
p = OG(ob_buffer)+OG(ob_text_length);
start = OG(ob_buffer);
while (--p>=start) { while (--p>=start) {
p[text_length] = *p; p[text_length] = *p;
} }
memcpy(OUTPUT(ob_buffer), text, text_length);
OUTPUT(ob_buffer)[OUTPUT(ob_text_length)]=0;
memcpy(OG(ob_buffer), text, text_length);
OG(ob_buffer)[OG(ob_text_length)]=0;
} }
static inline void php_ob_send() static inline void php_ob_send()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
/* header_write is a simple, unbuffered output function */ /* header_write is a simple, unbuffered output function */
OUTPUT(php_body_write)(OUTPUT(ob_buffer), OUTPUT(ob_text_length));
OG(php_body_write)(OG(ob_buffer), OG(ob_text_length));
} }
/* Return the current output buffer */ /* Return the current output buffer */
int php_ob_get_buffer(pval *p) int php_ob_get_buffer(pval *p)
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (!OUTPUT(ob_buffer)) {
if (!OG(ob_buffer)) {
return FAILURE; return FAILURE;
} }
p->type = IS_STRING; p->type = IS_STRING;
p->value.str.val = estrndup(OUTPUT(ob_buffer), OUTPUT(ob_text_length));
p->value.str.len = OUTPUT(ob_text_length);
p->value.str.val = estrndup(OG(ob_buffer), OG(ob_text_length));
p->value.str.len = OG(ob_text_length);
return SUCCESS; return SUCCESS;
} }
@ -307,7 +307,7 @@ static int php_ub_body_write_no_header(const char *str, uint str_length)
char *newstr = NULL; char *newstr = NULL;
uint new_length=0; uint new_length=0;
int result; int result;
OUTPUTLS_FETCH();
OLS_FETCH();
session_adapt_uris(str, str_length, &newstr, &new_length); session_adapt_uris(str, str_length, &newstr, &new_length);
@ -316,7 +316,7 @@ static int php_ub_body_write_no_header(const char *str, uint str_length)
str_length = new_length; str_length = new_length;
} }
result = OUTPUT(php_header_write)(str, str_length);
result = OG(php_header_write)(str, str_length);
if (newstr) { if (newstr) {
free(newstr); free(newstr);
@ -330,13 +330,13 @@ static int php_ub_body_write(const char *str, uint str_length)
{ {
int result = 0; int result = 0;
SLS_FETCH(); SLS_FETCH();
OUTPUTLS_FETCH();
OLS_FETCH();
if (SG(request_info).headers_only) { if (SG(request_info).headers_only) {
zend_bailout(); zend_bailout();
} }
if (php3_header()) { if (php3_header()) {
OUTPUT(php_body_write) = php_ub_body_write_no_header;
OG(php_body_write) = php_ub_body_write_no_header;
result = php_ub_body_write_no_header(str, str_length); result = php_ub_body_write_no_header(str, str_length);
} }

132
main/output.c

@ -52,12 +52,12 @@ typedef struct {
} php_output_globals; } php_output_globals;
#ifdef ZTS #ifdef ZTS
#define OUTPUT(v) (output_globals->v)
#define OUTPUTLS_FETCH() php_output_globals *output_globals = ts_resource(output_globals_id)
#define OG(v) (output_globals->v)
#define OLS_FETCH() php_output_globals *output_globals = ts_resource(output_globals_id)
int output_globals_id; int output_globals_id;
#else #else
#define OUTPUT(v) (output_globals.v)
#define OUTPUTLS_FETCH()
#define OG(v) (output_globals.v)
#define OLS_FETCH()
php_output_globals output_globals; php_output_globals output_globals;
#endif #endif
@ -71,12 +71,12 @@ PHP_FUNCTION(ob_get_contents);
#ifdef ZTS #ifdef ZTS
static void php_output_init_globals(php_output_globals *output_globals) static void php_output_init_globals(php_output_globals *output_globals)
{ {
OUTPUT(php_body_write) = NULL;
OUTPUT(php_header_write) = NULL;
OUTPUT(ob_buffer) = NULL;
OUTPUT(ob_size) = 0;
OUTPUT(ob_block_size) = 0;
OUTPUT(ob_text_length) = 0;
OG(php_body_write) = NULL;
OG(php_header_write) = NULL;
OG(ob_buffer) = NULL;
OG(ob_size) = 0;
OG(ob_block_size) = 0;
OG(ob_text_length) = 0;
} }
#endif #endif
@ -86,12 +86,12 @@ PHP_GINIT_FUNCTION(output)
#ifdef ZTS #ifdef ZTS
output_globals_id = ts_allocate_id(sizeof(php_output_globals), NULL, NULL); output_globals_id = ts_allocate_id(sizeof(php_output_globals), NULL, NULL);
#else #else
OUTPUT(php_body_write) = NULL;
OUTPUT(php_header_write) = NULL;
OUTPUT(ob_buffer) = NULL;
OUTPUT(ob_size) = 0;
OUTPUT(ob_block_size) = 0;
OUTPUT(ob_text_length) = 0;
OG(php_body_write) = NULL;
OG(php_header_write) = NULL;
OG(ob_buffer) = NULL;
OG(ob_size) = 0;
OG(ob_block_size) = 0;
OG(ob_text_length) = 0;
#endif #endif
return SUCCESS; return SUCCESS;
@ -137,32 +137,32 @@ PHP_RSHUTDOWN_FUNCTION(output)
/* Start output layer */ /* Start output layer */
PHPAPI void php_output_startup() PHPAPI void php_output_startup()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
OUTPUT(ob_buffer) = NULL;
OUTPUT(php_body_write) = php_ub_body_write;
OUTPUT(php_header_write) = sapi_module.ub_write;
OG(ob_buffer) = NULL;
OG(php_body_write) = php_ub_body_write;
OG(php_header_write) = sapi_module.ub_write;
} }
PHPAPI int php_body_write(const char *str, uint str_length) PHPAPI int php_body_write(const char *str, uint str_length)
{ {
OUTPUTLS_FETCH();
return OUTPUT(php_body_write)(str, str_length);
OLS_FETCH();
return OG(php_body_write)(str, str_length);
} }
PHPAPI int php_header_write(const char *str, uint str_length) PHPAPI int php_header_write(const char *str, uint str_length)
{ {
OUTPUTLS_FETCH();
return OUTPUT(php_header_write)(str, str_length);
OLS_FETCH();
return OG(php_header_write)(str, str_length);
} }
/* Start output buffering */ /* Start output buffering */
PHPAPI void php_start_ob_buffering() PHPAPI void php_start_ob_buffering()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
php_ob_init(4096, 1024); php_ob_init(4096, 1024);
OUTPUT(php_body_write) = php_b_body_write;
OG(php_body_write) = php_b_body_write;
} }
@ -170,15 +170,15 @@ PHPAPI void php_start_ob_buffering()
PHPAPI void php_end_ob_buffering(int send_buffer) PHPAPI void php_end_ob_buffering(int send_buffer)
{ {
SLS_FETCH(); SLS_FETCH();
OUTPUTLS_FETCH();
OLS_FETCH();
if (!OUTPUT(ob_buffer)) {
if (!OG(ob_buffer)) {
return; return;
} }
if (SG(headers_sent) && !SG(request_info).headers_only) { if (SG(headers_sent) && !SG(request_info).headers_only) {
OUTPUT(php_body_write) = php_ub_body_write_no_header;
OG(php_body_write) = php_ub_body_write_no_header;
} else { } else {
OUTPUT(php_body_write) = php_ub_body_write;
OG(php_body_write) = php_ub_body_write;
} }
if (send_buffer) { if (send_buffer) {
php_ob_send(); php_ob_send();
@ -193,38 +193,38 @@ PHPAPI void php_end_ob_buffering(int send_buffer)
static inline void php_ob_allocate() static inline void php_ob_allocate()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (OUTPUT(ob_size)<OUTPUT(ob_text_length)) {
while (OUTPUT(ob_size) <= OUTPUT(ob_text_length))
OUTPUT(ob_size)+=OUTPUT(ob_block_size);
if (OG(ob_size)<OG(ob_text_length)) {
while (OG(ob_size) <= OG(ob_text_length))
OG(ob_size)+=OG(ob_block_size);
OUTPUT(ob_buffer) = (char *) erealloc(OUTPUT(ob_buffer), OUTPUT(ob_size)+1);
OG(ob_buffer) = (char *) erealloc(OG(ob_buffer), OG(ob_size)+1);
} }
} }
static void php_ob_init(uint initial_size, uint block_size) static void php_ob_init(uint initial_size, uint block_size)
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (OUTPUT(ob_buffer)) {
if (OG(ob_buffer)) {
return; return;
} }
OUTPUT(ob_block_size) = block_size;
OUTPUT(ob_size) = initial_size;
OUTPUT(ob_buffer) = (char *) emalloc(initial_size+1);
OUTPUT(ob_text_length) = 0;
OG(ob_block_size) = block_size;
OG(ob_size) = initial_size;
OG(ob_buffer) = (char *) emalloc(initial_size+1);
OG(ob_text_length) = 0;
} }
static void php_ob_destroy() static void php_ob_destroy()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (OUTPUT(ob_buffer)) {
efree(OUTPUT(ob_buffer));
OUTPUT(ob_buffer) = NULL;
if (OG(ob_buffer)) {
efree(OG(ob_buffer));
OG(ob_buffer) = NULL;
} }
} }
@ -233,13 +233,13 @@ static void php_ob_append(const char *text, uint text_length)
{ {
char *target; char *target;
int original_ob_text_length; int original_ob_text_length;
OUTPUTLS_FETCH();
OLS_FETCH();
original_ob_text_length=OUTPUT(ob_text_length);
original_ob_text_length=OG(ob_text_length);
OUTPUT(ob_text_length) += text_length;
OG(ob_text_length) += text_length;
php_ob_allocate(); php_ob_allocate();
target = OUTPUT(ob_buffer)+original_ob_text_length;
target = OG(ob_buffer)+original_ob_text_length;
memcpy(target, text, text_length); memcpy(target, text, text_length);
target[text_length]=0; target[text_length]=0;
} }
@ -248,43 +248,43 @@ static void php_ob_append(const char *text, uint text_length)
static void php_ob_prepend(const char *text, uint text_length) static void php_ob_prepend(const char *text, uint text_length)
{ {
char *p, *start; char *p, *start;
OUTPUTLS_FETCH();
OLS_FETCH();
OUTPUT(ob_text_length) += text_length;
OG(ob_text_length) += text_length;
php_ob_allocate(); php_ob_allocate();
/* php_ob_allocate() may change OUTPUT(ob_buffer), so we can't initialize p&start earlier */
p = OUTPUT(ob_buffer)+OUTPUT(ob_text_length);
start = OUTPUT(ob_buffer);
/* php_ob_allocate() may change OG(ob_buffer), so we can't initialize p&start earlier */
p = OG(ob_buffer)+OG(ob_text_length);
start = OG(ob_buffer);
while (--p>=start) { while (--p>=start) {
p[text_length] = *p; p[text_length] = *p;
} }
memcpy(OUTPUT(ob_buffer), text, text_length);
OUTPUT(ob_buffer)[OUTPUT(ob_text_length)]=0;
memcpy(OG(ob_buffer), text, text_length);
OG(ob_buffer)[OG(ob_text_length)]=0;
} }
static inline void php_ob_send() static inline void php_ob_send()
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
/* header_write is a simple, unbuffered output function */ /* header_write is a simple, unbuffered output function */
OUTPUT(php_body_write)(OUTPUT(ob_buffer), OUTPUT(ob_text_length));
OG(php_body_write)(OG(ob_buffer), OG(ob_text_length));
} }
/* Return the current output buffer */ /* Return the current output buffer */
int php_ob_get_buffer(pval *p) int php_ob_get_buffer(pval *p)
{ {
OUTPUTLS_FETCH();
OLS_FETCH();
if (!OUTPUT(ob_buffer)) {
if (!OG(ob_buffer)) {
return FAILURE; return FAILURE;
} }
p->type = IS_STRING; p->type = IS_STRING;
p->value.str.val = estrndup(OUTPUT(ob_buffer), OUTPUT(ob_text_length));
p->value.str.len = OUTPUT(ob_text_length);
p->value.str.val = estrndup(OG(ob_buffer), OG(ob_text_length));
p->value.str.len = OG(ob_text_length);
return SUCCESS; return SUCCESS;
} }
@ -307,7 +307,7 @@ static int php_ub_body_write_no_header(const char *str, uint str_length)
char *newstr = NULL; char *newstr = NULL;
uint new_length=0; uint new_length=0;
int result; int result;
OUTPUTLS_FETCH();
OLS_FETCH();
session_adapt_uris(str, str_length, &newstr, &new_length); session_adapt_uris(str, str_length, &newstr, &new_length);
@ -316,7 +316,7 @@ static int php_ub_body_write_no_header(const char *str, uint str_length)
str_length = new_length; str_length = new_length;
} }
result = OUTPUT(php_header_write)(str, str_length);
result = OG(php_header_write)(str, str_length);
if (newstr) { if (newstr) {
free(newstr); free(newstr);
@ -330,13 +330,13 @@ static int php_ub_body_write(const char *str, uint str_length)
{ {
int result = 0; int result = 0;
SLS_FETCH(); SLS_FETCH();
OUTPUTLS_FETCH();
OLS_FETCH();
if (SG(request_info).headers_only) { if (SG(request_info).headers_only) {
zend_bailout(); zend_bailout();
} }
if (php3_header()) { if (php3_header()) {
OUTPUT(php_body_write) = php_ub_body_write_no_header;
OG(php_body_write) = php_ub_body_write_no_header;
result = php_ub_body_write_no_header(str, str_length); result = php_ub_body_write_no_header(str, str_length);
} }

Loading…
Cancel
Save