summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Drake <tlsa@netsurf-browser.org>2022-08-29 11:53:11 +0100
committerMichael Drake <mdrake.unique@gmail.com>2022-08-29 13:49:20 +0100
commit832b819d8bec7a517ee0ecccbf05beaccb1205fc (patch)
tree2996fccbbab88b9172f892ce55f1abc06ff2f8fe
parent6453a903d912b594fc45de9122289510cca221be (diff)
downloadlibcss-832b819d8bec7a517ee0ecccbf05beaccb1205fc.tar.gz
libcss-832b819d8bec7a517ee0ecccbf05beaccb1205fc.tar.bz2
Select: Move revert style tracking to separate allocation
It's pretty big and the selection state lives on the stack.
-rw-r--r--src/select/select.c24
-rw-r--r--src/select/select.h2
2 files changed, 18 insertions, 8 deletions
diff --git a/src/select/select.c b/src/select/select.c
index e1f7883..f7dc098 100644
--- a/src/select/select.c
+++ b/src/select/select.c
@@ -1020,13 +1020,17 @@ static void css_select__finalise_selection_state(
lwc_string_unref(state->element.name);
}
- for (size_t i = 0; i < CSS_ORIGIN_AUTHOR; i++) {
- for (size_t j = 0; j < CSS_PSEUDO_ELEMENT_COUNT; j++) {
- if (state->revert[i].style[j] == NULL) {
- continue;
+ if (state->revert != NULL) {
+ for (size_t i = 0; i < CSS_ORIGIN_AUTHOR; i++) {
+ for (size_t j = 0; j < CSS_PSEUDO_ELEMENT_COUNT; j++) {
+ if (state->revert[i].style[j] == NULL) {
+ continue;
+ }
+ css_computed_style_destroy(
+ state->revert[i].style[j]);
}
- css_computed_style_destroy(state->revert[i].style[j]);
}
+ free(state->revert);
}
}
@@ -1284,8 +1288,14 @@ css_error css_select_style(css_select_ctx *ctx, void *node,
printf("style:\t%s\tSELECTED\n", lwc_string_data(state.element.name));
#endif
- /* Not sharing; need to select.
- * Base element style is guaranteed to exist
+ /* Not sharing; need to select. */
+ state.revert = calloc(CSS_ORIGIN_AUTHOR, sizeof(*state.revert));
+ if (state.revert == NULL) {
+ error = CSS_NOMEM;
+ goto cleanup;
+ }
+
+ /* Base element style is guaranteed to exist
*/
error = css__computed_style_create(
&state.results->styles[CSS_PSEUDO_ELEMENT_NONE]);
diff --git a/src/select/select.h b/src/select/select.h
index 69bf4d8..5170e58 100644
--- a/src/select/select.h
+++ b/src/select/select.h
@@ -73,7 +73,7 @@ typedef struct css_select_state {
css_select_results *results; /* Result set to populate */
/** UA and user styles for handling revert property value. */
- struct revert_data revert[CSS_ORIGIN_AUTHOR];
+ struct revert_data *revert; /* Length: CSS_ORIGIN_AUTHOR */
css_pseudo_element current_pseudo; /* Current pseudo element */
css_computed_style *computed; /* Computed style to populate */