summaryrefslogtreecommitdiff
path: root/src/parse/css21.c
diff options
context:
space:
mode:
authorJohn Mark Bell <jmb@netsurf-browser.org>2008-11-09 20:09:50 +0000
committerJohn Mark Bell <jmb@netsurf-browser.org>2008-11-09 20:09:50 +0000
commit83c070f67a2c26672f0ddad9b7e9104c16d7015f (patch)
tree8baa79156f9e837972f4103e7d955d670b29f397 /src/parse/css21.c
parent93db0a01a331b1820ba26e1ced4cb288ee8bb47d (diff)
downloadlibcss-83c070f67a2c26672f0ddad9b7e9104c16d7015f.tar.gz
libcss-83c070f67a2c26672f0ddad9b7e9104c16d7015f.tar.bz2
Port libcss to new lpu API.
Make lexer, core parser, and css21 parser constructors&destructors return errors svn path=/trunk/libcss/; revision=5674
Diffstat (limited to 'src/parse/css21.c')
-rw-r--r--src/parse/css21.c72
1 files changed, 41 insertions, 31 deletions
diff --git a/src/parse/css21.c b/src/parse/css21.c
index e3031b7..fa98897 100644
--- a/src/parse/css21.c
+++ b/src/parse/css21.c
@@ -337,72 +337,82 @@ static inline bool tokenIsChar(const css_token *token, uint8_t c);
* \param parser The core parser object to use
* \param alloc Memory (de)allocation function
* \param pw Pointer to client-specific private data
- * \return Pointer to parser object, or NULL on failure
+ * \param css21 Pointer to location to receive parser object
+ * \return CSS_OK on success,
+ * CSS_BADPARM on bad parameters,
+ * CSS_NOMEM on memory exhaustion
*/
-css_css21 *css_css21_create(css_stylesheet *sheet, css_parser *parser,
- css_alloc alloc, void *pw)
+css_error css_css21_create(css_stylesheet *sheet, css_parser *parser,
+ css_alloc alloc, void *pw, void **css21)
{
- css_css21 *css21;
+ css_css21 *c;
css_parser_optparams params;
+ parserutils_error perror;
css_error error;
- if (sheet == NULL || parser == NULL || alloc == NULL)
- return NULL;
+ if (sheet == NULL || parser == NULL || alloc == NULL || css21 == NULL)
+ return CSS_BADPARM;
- css21 = alloc(NULL, sizeof(css_css21), pw);
- if (css21 == NULL)
- return NULL;
+ c = alloc(NULL, sizeof(css_css21), pw);
+ if (c == NULL)
+ return CSS_NOMEM;
- css21->context = parserutils_stack_create(sizeof(context_entry),
- STACK_CHUNK, (parserutils_alloc) alloc, pw);
- if (css21->context == NULL) {
- alloc(css21, 0, pw);
- return NULL;
+ perror = parserutils_stack_create(sizeof(context_entry),
+ STACK_CHUNK, (parserutils_alloc) alloc, pw,
+ &c->context);
+ if (perror != PARSERUTILS_OK) {
+ alloc(c, 0, pw);
+ return css_error_from_parserutils_error(perror);
}
/* Intern all known strings */
for (int i = 0; i < LAST_KNOWN; i++) {
- css21->strings[i] = css_parser_dict_add(parser,
+ c->strings[i] = css_parser_dict_add(parser,
(const uint8_t *) stringmap[i].ptr,
stringmap[i].len);
- if (css21->strings[i] == NULL) {
- parserutils_stack_destroy(css21->context);
- alloc(css21, 0, pw);
- return NULL;
+ if (c->strings[i] == NULL) {
+ parserutils_stack_destroy(c->context);
+ alloc(c, 0, pw);
+ return CSS_NOMEM;
}
}
params.event_handler.handler = css21_handle_event;
- params.event_handler.pw = css21;
+ params.event_handler.pw = c;
error = css_parser_setopt(parser, CSS_PARSER_EVENT_HANDLER, &params);
if (error != CSS_OK) {
- parserutils_stack_destroy(css21->context);
- alloc(css21, 0, pw);
- return NULL;
+ parserutils_stack_destroy(c->context);
+ alloc(c, 0, pw);
+ return error;
}
- css21->sheet = sheet;
- css21->parser = parser;
- css21->state = BEFORE_CHARSET;
- css21->alloc = alloc;
- css21->pw = pw;
+ c->sheet = sheet;
+ c->parser = parser;
+ c->state = BEFORE_CHARSET;
+ c->alloc = alloc;
+ c->pw = pw;
+
+ *css21 = c;
- return css21;
+ return CSS_OK;
}
/**
* Destroy a CSS 2.1 parser
*
* \param css21 The parser to destroy
+ * \return CSS_OK on success, appropriate error otherwise
*/
-void css_css21_destroy(css_css21 *css21)
+css_error css_css21_destroy(css_css21 *css21)
{
if (css21 == NULL)
- return;
+ return CSS_BADPARM;
parserutils_stack_destroy(css21->context);
css21->alloc(css21, 0, css21->pw);
+
+ return CSS_OK;
}
/**