diff options
author | Michael Drake <tlsa@netsurf-browser.org> | 2018-04-22 11:34:12 +0100 |
---|---|---|
committer | Michael Drake <tlsa@netsurf-browser.org> | 2018-07-28 15:27:12 +0100 |
commit | 51ea4c00689e244155b2de583764ea309a8c0fd7 (patch) | |
tree | 509fc382e094e6e06a733faf6172328e6b0f8123 | |
parent | 2e66983ea472c2b6addcd3b3c2fa7132a7a1ef39 (diff) | |
download | libcss-51ea4c00689e244155b2de583764ea309a8c0fd7.tar.gz libcss-51ea4c00689e244155b2de583764ea309a8c0fd7.tar.bz2 |
Media Queries: Add destruction functions.
-rw-r--r-- | src/parse/mq.c | 57 | ||||
-rw-r--r-- | src/parse/mq.h | 2 |
2 files changed, 58 insertions, 1 deletions
diff --git a/src/parse/mq.c b/src/parse/mq.c index 6692651..1fa66d6 100644 --- a/src/parse/mq.c +++ b/src/parse/mq.c @@ -17,6 +17,63 @@ #include "parse/properties/utils.h" #include "utils/utils.h" +static void css_mq_feature_destroy(css_mq_feature *feature) +{ + if (feature != NULL) { + lwc_string_unref(feature->name); + free(feature); + } +} + +static void css__mq_cond_or_feature_destroy( + css_mq_cond_or_feature *cond_or_feature); + +static void css__mq_cond_parts_destroy(css_mq_cond_parts *cond_parts) +{ + if (cond_parts != NULL) { + for (uint32_t i = 0; i < cond_parts->nparts; i++) { + css__mq_cond_or_feature_destroy(cond_parts->parts[i]); + } + free(cond_parts); + } +} + +static void css__mq_cond_destroy(css_mq_cond *cond) +{ + if (cond != NULL) { + css__mq_cond_parts_destroy(cond->parts); + free(cond); + } +} + +static void css__mq_cond_or_feature_destroy( + css_mq_cond_or_feature *cond_or_feature) +{ + if (cond_or_feature != NULL) { + switch (cond_or_feature->type) { + case CSS_MQ_FEATURE: + css_mq_feature_destroy(cond_or_feature->data.feat); + break; + case CSS_MQ_COND: + css__mq_cond_destroy(cond_or_feature->data.cond); + break; + } + free(cond_or_feature); + } +} + +void css__mq_query_destroy(css_mq_query *media) +{ + while (media != NULL) { + css_mq_query *next = media->next; + + css__mq_cond_destroy(media->cond); + free(media); + + media = next; + } +} + static css_error mq_parse_condition(css_language *c, const parserutils_vector *vector, int *ctx, bool permit_or, css_mq_cond **cond); diff --git a/src/parse/mq.h b/src/parse/mq.h index ae0110b..77f8a8a 100644 --- a/src/parse/mq.h +++ b/src/parse/mq.h @@ -91,6 +91,6 @@ css_error css__mq_parse_media_list(css_language *c, const parserutils_vector *vector, int *ctx, css_mq_query **media); -css_mq_query *css__mq_query_destroy(css_mq_query *media); +void css__mq_query_destroy(css_mq_query *media); #endif |