summaryrefslogtreecommitdiff
path: root/css/css.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2011-07-08 08:38:17 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2011-07-08 08:38:17 +0000
commitb34502af8247606ae3b5693cd3046566b16a3e6d (patch)
treedb0cd37fcd7c7a936fc499928fcd4a0b07614847 /css/css.c
parentc54b6aabaa8bae670b84c7d9841d77be430756e7 (diff)
downloadnetsurf-b34502af8247606ae3b5693cd3046566b16a3e6d.tar.gz
netsurf-b34502af8247606ae3b5693cd3046566b16a3e6d.tar.bz2
Refactor http utilities
svn path=/trunk/netsurf/; revision=12595
Diffstat (limited to 'css/css.c')
-rw-r--r--css/css.c26
1 files changed, 23 insertions, 3 deletions
diff --git a/css/css.c b/css/css.c
index 63862c720..9fc656848 100644
--- a/css/css.c
+++ b/css/css.c
@@ -90,6 +90,7 @@ static const content_handler css_content_handler = {
};
static lwc_string *css_mime_type;
+static lwc_string *css_charset;
static css_stylesheet *blank_import;
/**
@@ -105,10 +106,18 @@ nserror css_init(void)
if (lerror != lwc_error_ok)
return NSERROR_NOMEM;
+ lerror = lwc_intern_string("charset", SLEN("charset"), &css_charset);
+ if (lerror != lwc_error_ok) {
+ lwc_string_unref(css_mime_type);
+ return NSERROR_NOMEM;
+ }
+
error = content_factory_register_handler(css_mime_type,
&css_content_handler);
- if (error != NSERROR_OK)
+ if (error != NSERROR_OK) {
+ lwc_string_unref(css_charset);
lwc_string_unref(css_mime_type);
+ }
return error;
}
@@ -118,6 +127,8 @@ nserror css_init(void)
*/
void css_fini(void)
{
+ lwc_string_unref(css_charset);
+
lwc_string_unref(css_mime_type);
if (blank_import != NULL)
@@ -138,6 +149,7 @@ nserror nscss_create(const content_handler *handler,
{
nscss_content *result;
const char *charset = NULL;
+ lwc_string *charset_value = NULL;
union content_msg_data msg_data;
nserror error;
@@ -153,11 +165,14 @@ nserror nscss_create(const content_handler *handler,
}
/* Find charset specified on HTTP layer, if any */
- error = http_parameter_list_find_item(params, "charset", &charset);
- if (error != NSERROR_OK || *charset == '\0') {
+ error = http_parameter_list_find_item(params, css_charset,
+ &charset_value);
+ if (error != NSERROR_OK || lwc_string_length(charset_value) == 0) {
/* No charset specified, use fallback, if any */
/** \todo libcss will take this as gospel, which is wrong */
charset = fallback_charset;
+ } else {
+ charset = lwc_string_data(charset_value);
}
error = nscss_create_css_data(&result->data,
@@ -167,10 +182,15 @@ nserror nscss_create(const content_handler *handler,
if (error != NSERROR_OK) {
msg_data.error = messages_get("NoMemory");
content_broadcast(&result->base, CONTENT_MSG_ERROR, msg_data);
+ if (charset_value != NULL)
+ lwc_string_unref(charset_value);
talloc_free(result);
return error;
}
+ if (charset_value != NULL)
+ lwc_string_unref(charset_value);
+
*c = (struct content *) result;
return NSERROR_OK;