summaryrefslogtreecommitdiff
path: root/main/SAPI.c
diff options
context:
space:
mode:
authorStig Bakken <ssb@php.net>2000-02-24 22:00:47 +0000
committerStig Bakken <ssb@php.net>2000-02-24 22:00:47 +0000
commitba03c9f2aa50149197753743c490c1de4f0364f2 (patch)
tree4599adec809b6321e9a53c44c5b431e123f1472b /main/SAPI.c
parentb51805caeb1f0c1831972fc6d495de9d8b5f2b49 (diff)
downloadphp-git-ba03c9f2aa50149197753743c490c1de4f0364f2.tar.gz
started implementing directives for default mimetype/charset
Diffstat (limited to 'main/SAPI.c')
-rw-r--r--main/SAPI.c49
1 files changed, 45 insertions, 4 deletions
diff --git a/main/SAPI.c b/main/SAPI.c
index ed7910cb63..7de50cb951 100644
--- a/main/SAPI.c
+++ b/main/SAPI.c
@@ -177,10 +177,36 @@ SAPI_POST_READER_FUNC(sapi_read_standard_form_data)
}
-SAPI_API void sapi_activate(SLS_D)
+/*
+ * Called from php_request_startup() for every request.
+ */
+SAPI_API void sapi_activate(SLS_D PLS_DC)
{
+ int len;
+
zend_llist_init(&SG(sapi_headers).headers, sizeof(sapi_header_struct), (void (*)(void *)) sapi_free_header, 0);
SG(sapi_headers).send_default_content_type = 1;
+
+ if (PG(default_mimetype) != NULL) {
+ if (strncasecmp(PG(default_mimetype), "text/", 5) == 0) {
+ len = strlen(PG(default_mimetype)) + sizeof(";charset=") + strlen(PG(default_charset));
+ /* add charset for text output */
+ SG(sapi_headers).default_content_type = emalloc(len);
+ strcpy(SG(sapi_headers).default_content_type, PG(default_mimetype));
+ strlcat(SG(sapi_headers).default_content_type, ";charset=", len);
+ strlcat(SG(sapi_headers).default_content_type, PG(default_charset), len);
+ } else {
+ /* don't add charset */
+ len = strlen(PG(default_mimetype)) + 1;
+ SG(sapi_headers).default_content_type = emalloc(len);
+ strcpy(SG(sapi_headers).default_content_type, PG(default_mimetype));
+ }
+ SG(sapi_headers).default_content_type[len - 1] = '\0';
+ SG(sapi_headers).default_content_type_size = len;
+ } else {
+ SG(sapi_headers).default_content_type = NULL;
+ SG(sapi_headers).default_content_type_size = 0;
+ }
SG(sapi_headers).http_response_code = 200;
SG(sapi_headers).http_status_line = NULL;
SG(headers_sent) = 0;
@@ -231,6 +257,9 @@ SAPI_API void sapi_deactivate(SLS_D)
if (SG(request_info).current_user) {
efree(SG(request_info).current_user);
}
+ if (SG(sapi_headers).default_content_type) {
+ efree(SG(sapi_headers).default_content_type);
+ }
if (sapi_module.deactivate) {
sapi_module.deactivate(SLS_C);
}
@@ -329,7 +358,6 @@ SAPI_API int sapi_send_headers()
{
int retval;
int ret = FAILURE;
- sapi_header_struct default_header = { SAPI_DEFAULT_CONTENT_TYPE, sizeof(SAPI_DEFAULT_CONTENT_TYPE)-1 };
SLS_FETCH();
if (SG(headers_sent)) {
@@ -357,7 +385,20 @@ SAPI_API int sapi_send_headers()
}
zend_llist_apply_with_argument(&SG(sapi_headers).headers, (void (*)(void *, void *)) sapi_module.send_header, SG(server_context));
if(SG(sapi_headers).send_default_content_type) {
- sapi_module.send_header(&default_header,SG(server_context));
+ if (SG(sapi_headers).default_content_type != NULL) {
+ sapi_header_struct default_header;
+ int len = SG(sapi_headers).default_content_type_size + sizeof("Content-type: ");
+
+ strcpy(default_header.header, "Content-type: ");
+ strlcat(default_header.header, SG(sapi_headers).default_content_type, len);
+ default_header.header[len - 1] = '\0';
+ default_header.header_len = len - 1;
+ sapi_module.send_header(&default_header,SG(server_context));
+ efree(default_header.header);
+ } else {
+ sapi_header_struct default_header = { SAPI_DEFAULT_CONTENT_TYPE_HEADER, sizeof(SAPI_DEFAULT_CONTENT_TYPE_HEADER) - 1 };
+ sapi_module.send_header(&default_header,SG(server_context));
+ }
}
sapi_module.send_header(NULL, SG(server_context));
SG(headers_sent) = 1;
@@ -445,4 +486,4 @@ SAPI_API char *sapi_getenv(char *name, int name_len)
} else {
return NULL;
}
-} \ No newline at end of file
+}