/* * Copyright (c) Camden Dixie O'Brien * SPDX-License-Identifier: AGPL-3.0-only */ #include "regex.h" #include static void class_free(class_t *c) { if (NULL != c->contents) free(c->contents); } static void sequence_free(sequence_t *s) { if (NULL != s->contents) { for (int i = 0; i < s->len; ++i) { switch (s->contents[i].type) { case TERM_TYPE_CLASS: class_free(&s->contents[i].class); break; case TERM_TYPE_REGEX: regex_free_children(&s->contents[i].regex); break; case TERM_TYPE_WILDCARD: case TERM_TYPE_LITERAL: break; } } free(s->contents); } } void regex_free_children(regex_t *r) { sequence_free(&r->sequence); if (NULL != r->alternative) { regex_free_children(r->alternative); free(r->alternative); } }