* implement new output API, fixing some bugs and implementing some feature

requests--let's see what I can dig out of the bugtracker for NEWS--
  and while crossing the road:
   * implemented new zlib API
   * fixed up ext/tidy (what was "s&" in zend_parse_parameters() supposed to do?)

Thanks to Jani and Felipe for pioneering.
This commit is contained in:
Michael Wallner 2010-05-31 10:29:43 +00:00
parent 27299b7e40
commit 11d24c1593
85 changed files with 3561 additions and 2701 deletions

View file

@ -5055,7 +5055,7 @@ ZEND_API void php_get_highlight_struct(zend_syntax_highlighter_ini *syntax_highl
PHP_FUNCTION(highlight_file)
{
char *filename;
int filename_len;
int filename_len, ret;
zend_syntax_highlighter_ini syntax_highlighter_ini;
zend_bool i = 0;
@ -5068,32 +5068,23 @@ PHP_FUNCTION(highlight_file)
}
if (i) {
php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
php_output_start_default(TSRMLS_C);
}
php_get_highlight_struct(&syntax_highlighter_ini);
if (highlight_file(filename, &syntax_highlighter_ini TSRMLS_CC) == FAILURE) {
if (i) {
int res = php_ob_get_buffer(return_value TSRMLS_CC);
ret = highlight_file(filename, &syntax_highlighter_ini TSRMLS_CC);
/* flush the buffer only if there is something to flush */
if (res == SUCCESS && Z_STRLEN_P(return_value) > 0) {
php_end_ob_buffer (1, 0 TSRMLS_CC);
zval_dtor(return_value);
} else {
php_end_ob_buffer (0, 0 TSRMLS_CC);
if (res == SUCCESS) {
zval_dtor(return_value);
}
}
if (ret == FAILURE) {
if (i) {
php_output_end(TSRMLS_C);
}
RETURN_FALSE;
}
if (i) {
php_ob_get_buffer (return_value TSRMLS_CC);
php_end_ob_buffer (0, 0 TSRMLS_CC);
php_output_get_contents(return_value TSRMLS_CC);
php_output_discard(TSRMLS_C);
} else {
RETURN_TRUE;
}
@ -5113,25 +5104,26 @@ PHP_FUNCTION(php_strip_whitespace)
RETURN_FALSE;
}
php_output_start_default(TSRMLS_C);
file_handle.type = ZEND_HANDLE_FILENAME;
file_handle.filename = filename;
file_handle.free_filename = 0;
file_handle.opened_path = NULL;
zend_save_lexical_state(&original_lex_state TSRMLS_CC);
if (open_file_for_scanning(&file_handle TSRMLS_CC)==FAILURE) {
if (open_file_for_scanning(&file_handle TSRMLS_CC) == FAILURE) {
zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
php_output_end(TSRMLS_C);
RETURN_EMPTY_STRING();
}
php_start_ob_buffer(NULL, 0, 1 TSRMLS_CC);
zend_strip(TSRMLS_C);
zend_destroy_file_handle(&file_handle TSRMLS_CC);
zend_restore_lexical_state(&original_lex_state TSRMLS_CC);
php_ob_get_buffer(return_value TSRMLS_CC);
php_end_ob_buffer(0, 0 TSRMLS_CC);
php_output_get_contents(return_value TSRMLS_CC);
php_output_discard(TSRMLS_C);
}
/* }}} */
@ -5151,7 +5143,7 @@ PHP_FUNCTION(highlight_string)
convert_to_string_ex(expr);
if (i) {
php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
php_output_start_default(TSRMLS_C);
}
EG(error_reporting) = E_ERROR;
@ -5164,7 +5156,7 @@ PHP_FUNCTION(highlight_string)
efree(hicompiled_string_description);
EG(error_reporting) = old_error_reporting;
if (i) {
php_end_ob_buffer (1, 0 TSRMLS_CC);
php_output_end(TSRMLS_C);
}
RETURN_FALSE;
}
@ -5173,8 +5165,8 @@ PHP_FUNCTION(highlight_string)
EG(error_reporting) = old_error_reporting;
if (i) {
php_ob_get_buffer (return_value TSRMLS_CC);
php_end_ob_buffer (0, 0 TSRMLS_CC);
php_output_get_contents(return_value TSRMLS_CC);
php_output_discard(TSRMLS_C);
} else {
RETURN_TRUE;
}
@ -5416,14 +5408,14 @@ PHP_FUNCTION(print_r)
}
if (do_return) {
php_start_ob_buffer (NULL, 0, 1 TSRMLS_CC);
php_output_start_default(TSRMLS_C);
}
zend_print_zval_r(var, 0 TSRMLS_CC);
if (do_return) {
php_ob_get_buffer (return_value TSRMLS_CC);
php_end_ob_buffer (0, 0 TSRMLS_CC);
php_output_get_contents(return_value TSRMLS_CC);
php_output_discard(TSRMLS_C);
} else {
RETURN_TRUE;
}