summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/parse/css21.c62
-rw-r--r--src/parse/css21props.c156
-rw-r--r--test/css21.c5
3 files changed, 104 insertions, 119 deletions
diff --git a/src/parse/css21.c b/src/parse/css21.c
index fa98897..7aa63bd 100644
--- a/src/parse/css21.c
+++ b/src/parse/css21.c
@@ -506,9 +506,9 @@ css_error handleStartRuleset(css_css21 *c, const parserutils_vector *vector)
assert(c != NULL);
- rule = css_stylesheet_rule_create(c->sheet, CSS_RULE_SELECTOR);
- if (rule == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_rule_create(c->sheet, CSS_RULE_SELECTOR, &rule);
+ if (error != CSS_OK)
+ return error;
error = parseSelectorList(c, vector, rule);
if (error != CSS_OK) {
@@ -761,12 +761,8 @@ css_error parseClass(css_css21 *c, const parserutils_vector *vector, int *ctx,
if (token == NULL || token->type != CSS_TOKEN_IDENT)
return CSS_INVALID;
- *specific = css_stylesheet_selector_create(c->sheet,
- CSS_SELECTOR_CLASS, &token->data, NULL);
- if (*specific == NULL)
- return CSS_NOMEM;
-
- return CSS_OK;
+ return css_stylesheet_selector_create(c->sheet,
+ CSS_SELECTOR_CLASS, &token->data, NULL, specific);
}
css_error parseAttrib(css_css21 *c, const parserutils_vector *vector, int *ctx,
@@ -823,12 +819,9 @@ css_error parseAttrib(css_css21 *c, const parserutils_vector *vector, int *ctx,
return CSS_INVALID;
}
- *specific = css_stylesheet_selector_create(c->sheet, type,
- &name->data, value != NULL ? &value->data : NULL);
- if (*specific == NULL)
- return CSS_NOMEM;
-
- return CSS_OK;
+ return css_stylesheet_selector_create(c->sheet, type,
+ &name->data, value != NULL ? &value->data : NULL,
+ specific);
}
css_error parsePseudo(css_css21 *c, const parserutils_vector *vector, int *ctx,
@@ -866,13 +859,9 @@ css_error parsePseudo(css_css21 *c, const parserutils_vector *vector, int *ctx,
return CSS_INVALID;
}
- *specific = css_stylesheet_selector_create(c->sheet,
+ return css_stylesheet_selector_create(c->sheet,
CSS_SELECTOR_PSEUDO, &name->data,
- value != NULL ? &value->data : NULL);
- if (*specific == NULL)
- return CSS_NOMEM;
-
- return CSS_OK;
+ value != NULL ? &value->data : NULL, specific);
}
css_error parseSpecific(css_css21 *c,
@@ -890,10 +879,10 @@ css_error parseSpecific(css_css21 *c,
return CSS_INVALID;
if (token->type == CSS_TOKEN_HASH) {
- specific = css_stylesheet_selector_create(c->sheet,
- CSS_SELECTOR_ID, &token->data, NULL);
- if (specific == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_selector_create(c->sheet,
+ CSS_SELECTOR_ID, &token->data, NULL, &specific);
+ if (error != CSS_OK)
+ return error;
parserutils_vector_iterate(vector, ctx);
} else if (tokenIsChar(token, '.')) {
@@ -962,20 +951,21 @@ css_error parseSimpleSelector(css_css21 *c,
if (token->type == CSS_TOKEN_IDENT || tokenIsChar(token, '*')) {
/* Have element name */
- selector = css_stylesheet_selector_create(c->sheet,
- CSS_SELECTOR_ELEMENT, &token->data, NULL);
- if (selector == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_selector_create(c->sheet,
+ CSS_SELECTOR_ELEMENT, &token->data, NULL,
+ &selector);
+ if (error != CSS_OK)
+ return error;
parserutils_vector_iterate(vector, ctx);
} else {
/* Universal selector */
css_string name = { (uint8_t *) "*", 1 };
- selector = css_stylesheet_selector_create(c->sheet,
- CSS_SELECTOR_ELEMENT, &name, NULL);
- if (selector == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_selector_create(c->sheet,
+ CSS_SELECTOR_ELEMENT, &name, NULL, &selector);
+ if (error != CSS_OK)
+ return error;
/* Ensure we have at least one specific selector */
error = parseSpecific(c, vector, ctx, selector);
@@ -987,11 +977,7 @@ css_error parseSimpleSelector(css_css21 *c,
*result = selector;
- error = parseSelectorSpecifics(c, vector, ctx, selector);
- if (error != CSS_OK)
- return error;
-
- return CSS_OK;
+ return parseSelectorSpecifics(c, vector, ctx, selector);
}
css_error parseCombinator(css_css21 *c, const parserutils_vector *vector,
diff --git a/src/parse/css21props.c b/src/parse/css21props.c
index cbf4040..f69c067 100644
--- a/src/parse/css21props.c
+++ b/src/parse/css21props.c
@@ -486,9 +486,9 @@ css_error parse_background_attachment(css_css21 *c,
opv = buildOPV(OP_BACKGROUND_ATTACHMENT, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -540,9 +540,9 @@ css_error parse_background_color(css_css21 *c,
required_size += sizeof(colour);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -593,9 +593,9 @@ css_error parse_background_image(css_css21 *c,
required_size += sizeof(uint8_t *) + sizeof(size_t);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -658,9 +658,9 @@ css_error parse_background_repeat(css_css21 *c,
opv = buildOPV(OP_BACKGROUND_REPEAT, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -720,9 +720,9 @@ css_error parse_border_collapse(css_css21 *c,
opv = buildOPV(OP_BORDER_COLLAPSE, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -854,9 +854,9 @@ css_error parse_bottom(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -901,9 +901,9 @@ css_error parse_caption_side(css_css21 *c,
opv = buildOPV(OP_CAPTION_SIDE, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -946,9 +946,9 @@ css_error parse_clear(css_css21 *c,
opv = buildOPV(OP_CLEAR, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1009,9 +1009,9 @@ css_error parse_color(css_css21 *c,
required_size += sizeof(colour);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1101,9 +1101,9 @@ css_error parse_cue_after(css_css21 *c,
required_size += sizeof(uint8_t *) + sizeof(size_t);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1157,9 +1157,9 @@ css_error parse_cue_before(css_css21 *c,
required_size += sizeof(uint8_t *) + sizeof(size_t);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1218,9 +1218,9 @@ css_error parse_direction(css_css21 *c,
opv = buildOPV(OP_DIRECTION, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1290,9 +1290,9 @@ css_error parse_display(css_css21 *c,
opv = buildOPV(OP_DISPLAY, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1364,9 +1364,9 @@ css_error parse_elevation(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1411,9 +1411,9 @@ css_error parse_empty_cells(css_css21 *c,
opv = buildOPV(OP_EMPTY_CELLS, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1454,9 +1454,9 @@ css_error parse_float(css_css21 *c,
opv = buildOPV(OP_FLOAT, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1559,9 +1559,9 @@ css_error parse_font_size(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1608,9 +1608,9 @@ css_error parse_font_style(css_css21 *c,
opv = buildOPV(OP_FONT_STYLE, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1649,9 +1649,9 @@ css_error parse_font_variant(css_css21 *c,
opv = buildOPV(OP_FONT_VARIANT, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1710,9 +1710,9 @@ css_error parse_font_weight(css_css21 *c,
opv = buildOPV(OP_FONT_WEIGHT, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -1780,9 +1780,9 @@ css_error parse_left(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -2240,9 +2240,9 @@ css_error parse_right(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -2436,9 +2436,9 @@ css_error parse_top(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -2683,9 +2683,9 @@ css_error parse_border_side_color(css_css21 *c,
required_size += sizeof(colour);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -2747,9 +2747,9 @@ css_error parse_border_side_style(css_css21 *c,
opv = buildOPV(OP_BORDER_TRBL_STYLE, flags, value);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, sizeof(opv));
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, sizeof(opv), result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
@@ -2816,9 +2816,9 @@ css_error parse_border_side_width(css_css21 *c,
required_size += sizeof(length) + sizeof(unit);
/* Allocate result */
- *result = css_stylesheet_style_create(c->sheet, required_size);
- if (*result == NULL)
- return CSS_NOMEM;
+ error = css_stylesheet_style_create(c->sheet, required_size, result);
+ if (error != CSS_OK)
+ return error;
/* Copy the bytecode to it */
memcpy((*result)->bytecode, &opv, sizeof(opv));
diff --git a/test/css21.c b/test/css21.c
index 56e6a90..17e95b4 100644
--- a/test/css21.c
+++ b/test/css21.c
@@ -30,10 +30,9 @@ int main(int argc, char **argv)
/* Initialise library */
assert(css_initialise(argv[1], myrealloc, NULL) == CSS_OK);
- sheet = css_stylesheet_create(CSS_LEVEL_21, "UTF-8", argv[2], NULL,
+ assert(css_stylesheet_create(CSS_LEVEL_21, "UTF-8", argv[2], NULL,
CSS_ORIGIN_AUTHOR, CSS_MEDIA_ALL, NULL, NULL,
- myrealloc, NULL);
- assert(sheet != NULL);
+ myrealloc, NULL, &sheet) == CSS_OK);
fp = fopen(argv[2], "rb");
if (fp == NULL) {