summaryrefslogtreecommitdiff
path: root/output.c
diff options
context:
space:
mode:
authorThies C. Arntzen <thies@php.net>1999-10-27 18:30:41 +0000
committerThies C. Arntzen <thies@php.net>1999-10-27 18:30:41 +0000
commitea880d2b86729f8dc68c5cb4d7572463d089d9b1 (patch)
tree9ca5eb989986c52c6aa6ac5c75c93d2790d902a3 /output.c
parentc171eecd7aea11c22a8d7b111fc6b8a34b243216 (diff)
downloadphp-git-ea880d2b86729f8dc68c5cb4d7572463d089d9b1.tar.gz
moved output.c into ext/standart and made it thread-safe.
moved output-buffering related functions from basic_functions to output.c Win32 project need to be updated to reflect new position. # i'm not really happy with this solution, but it seemed the easiest one! # the whole output code is a bit hard to understand... @- Output-Buffering system is now Thread-Safe. (Thies)
Diffstat (limited to 'output.c')
-rw-r--r--output.c232
1 files changed, 0 insertions, 232 deletions
diff --git a/output.c b/output.c
deleted file mode 100644
index a748ed5cbb..0000000000
--- a/output.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*
- +----------------------------------------------------------------------+
- | PHP version 4.0 |
- +----------------------------------------------------------------------+
- | Copyright (c) 1997, 1998, 1999 The PHP Group |
- +----------------------------------------------------------------------+
- | This source file is subject to version 2.0 of the PHP license, |
- | that is bundled with this package in the file LICENSE, and is |
- | available at through the world-wide-web at |
- | http://www.php.net/license/2_0.txt. |
- | If you did not receive a copy of the PHP license and are unable to |
- | obtain it through the world-wide-web, please send a note to |
- | license@php.net so we can mail you a copy immediately. |
- +----------------------------------------------------------------------+
- | Authors: Andi Gutmans <andi@zend.com> |
- | Zeev Suraski <zeev@zend.com> |
- +----------------------------------------------------------------------+
-*/
-
-
-#include "php.h"
-#include "ext/standard/head.h"
-#include "ext/session/php_session.h"
-#include "SAPI.h"
-
-/* output functions */
-PHPAPI int (*php_body_write)(const char *str, uint str_length); /* string output */
-PHPAPI int (*php_header_write)(const char *str, uint str_length); /* unbuffer string output */
-static int php_ub_body_write(const char *str, uint str_length);
-static int php_ub_body_write_no_header(const char *str, uint str_length);
-static int php_b_body_write(const char *str, uint str_length);
-
-/* output buffering */
-static char *ob_buffer;
-static uint ob_buffer_size;
-static uint ob_block_size;
-static uint ob_text_length;
-static void php_ob_init(uint initial_size, uint block_size);
-static void php_ob_destroy();
-static void php_ob_append(const char *text, uint text_length);
-static void php_ob_prepend(const char *text, uint text_length);
-static inline void php_ob_send();
-
-
-/*
- * Main
- */
-
-/* Start output layer */
-PHPAPI void php_output_startup()
-{
- ob_buffer = NULL;
- php_body_write = php_ub_body_write;
- php_header_write = sapi_module.ub_write;
-}
-
-
-/* Start output buffering */
-void php_start_ob_buffering()
-{
- php_ob_init(4096, 1024);
- php_body_write = php_b_body_write;
-}
-
-
-/* End output buffering */
-void php_end_ob_buffering(int send_buffer)
-{
- SLS_FETCH();
-
- if (!ob_buffer) {
- return;
- }
- if (SG(headers_sent) && !SG(request_info).headers_only) {
- php_body_write = php_ub_body_write_no_header;
- } else {
- php_body_write = php_ub_body_write;
- }
- if (send_buffer) {
- php_ob_send();
- }
- php_ob_destroy();
-}
-
-
-/*
- * Output buffering - implementation
- */
-
-static inline void php_ob_allocate()
-{
- if (ob_buffer_size<ob_text_length) {
- while ((ob_buffer_size+=ob_block_size) < ob_text_length);
- ob_buffer = (char *) erealloc(ob_buffer, ob_buffer_size+1);
- }
-}
-
-
-static void php_ob_init(uint initial_size, uint block_size)
-{
- if (ob_buffer) {
- return;
- }
- ob_block_size = block_size;
- ob_buffer_size = initial_size;
- ob_buffer = (char *) emalloc(initial_size+1);
- ob_text_length = 0;
-}
-
-
-static void php_ob_destroy()
-{
- if (ob_buffer) {
- efree(ob_buffer);
- ob_buffer = NULL;
- }
-}
-
-
-static void php_ob_append(const char *text, uint text_length)
-{
- char *target;
- int original_ob_text_length=ob_text_length;
-
- ob_text_length += text_length;
- php_ob_allocate();
- target = ob_buffer+original_ob_text_length;
- memcpy(target, text, text_length);
- target[text_length]=0;
-}
-
-
-static void php_ob_prepend(const char *text, uint text_length)
-{
- char *p, *start;
-
- ob_text_length += text_length;
- php_ob_allocate();
-
- /* php_ob_allocate() may change ob_buffer, so we can't initialize p&start earlier */
- p = ob_buffer+ob_text_length;
- start = ob_buffer;
-
- while (--p>=start) {
- p[text_length] = *p;
- }
- memcpy(ob_buffer, text, text_length);
- ob_buffer[ob_text_length]=0;
-}
-
-
-static inline void php_ob_send()
-{
- /* header_write is a simple, unbuffered output function */
- php_body_write(ob_buffer, ob_text_length);
-}
-
-
-/* Return the current output buffer */
-int php_ob_get_buffer(pval *p)
-{
- if (!ob_buffer) {
- return FAILURE;
- }
- p->type = IS_STRING;
- p->value.str.val = estrndup(ob_buffer, ob_text_length);
- p->value.str.len = ob_text_length;
- return SUCCESS;
-}
-
-
-/*
- * Wrapper functions - implementation
- */
-
-
-/* buffered output function */
-static int php_b_body_write(const char *str, uint str_length)
-{
- php_ob_append(str, str_length);
- return str_length;
-}
-
-
-static int php_ub_body_write_no_header(const char *str, uint str_length)
-{
- char *newstr = NULL;
- uint new_length=0;
- int result;
-
- session_adapt_uris(str, str_length, &newstr, &new_length);
-
- if (newstr) {
- str = newstr;
- str_length = new_length;
- }
-
- result = php_header_write(str, str_length);
-
- if (newstr) {
- free(newstr);
- }
-
- return result;
-}
-
-
-static int php_ub_body_write(const char *str, uint str_length)
-{
- int result = 0;
- SLS_FETCH();
-
- if (SG(request_info).headers_only) {
- zend_bailout();
- }
- if (php3_header()) {
- php_body_write = php_ub_body_write_no_header;
- result = php_ub_body_write_no_header(str, str_length);
- }
-
- return result;
-}
-
-
-/*
- * HEAD support
- */
-
-void set_header_request(int value)
-{
- /* deprecated */
-}