diff options
author | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-03-13 19:31:20 +0900 |
---|---|---|
committer | Yu Watanabe <watanabe.yu+github@gmail.com> | 2023-03-13 21:25:57 +0900 |
commit | a0244c5de46c9d7018d2216f5ff44130247563eb (patch) | |
tree | 9c0b2fce17ce834d9a742998ed1f705e7321ba3e /src/udev/udev-rules.c | |
parent | 2aa5fe5e326e25da800ea86a431e71322a4f4ec1 (diff) | |
download | systemd-a0244c5de46c9d7018d2216f5ff44130247563eb.tar.gz |
udev-rules: modernize free functions
Diffstat (limited to 'src/udev/udev-rules.c')
-rw-r--r-- | src/udev/udev-rules.c | 34 |
1 files changed, 24 insertions, 10 deletions
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c index f8f9c5bae0..3c2fbc9df2 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c @@ -332,20 +332,26 @@ static void log_event_truncated( /*** Other functions ***/ -static void udev_rule_token_free(UdevRuleToken *token) { - free(token); +static UdevRuleToken *udev_rule_token_free(UdevRuleToken *token) { + if (!token) + return NULL; + + if (token->rule_line) + LIST_REMOVE(tokens, token->rule_line->tokens, token); + + return mfree(token); } +DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRuleToken*, udev_rule_token_free); + static void udev_rule_line_clear_tokens(UdevRuleLine *rule_line) { assert(rule_line); LIST_FOREACH(tokens, i, rule_line->tokens) udev_rule_token_free(i); - - rule_line->tokens = NULL; } -static UdevRuleLine* udev_rule_line_free(UdevRuleLine *rule_line) { +static UdevRuleLine *udev_rule_line_free(UdevRuleLine *rule_line) { if (!rule_line) return NULL; @@ -360,17 +366,22 @@ static UdevRuleLine* udev_rule_line_free(UdevRuleLine *rule_line) { DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRuleLine*, udev_rule_line_free); -static void udev_rule_file_free(UdevRuleFile *rule_file) { +static UdevRuleFile *udev_rule_file_free(UdevRuleFile *rule_file) { if (!rule_file) - return; + return NULL; LIST_FOREACH(rule_lines, i, rule_file->rule_lines) udev_rule_line_free(i); + if (rule_file->rules) + LIST_REMOVE(rule_files, rule_file->rules->rule_files, rule_file); + free(rule_file->filename); - free(rule_file); + return mfree(rule_file); } +DEFINE_TRIVIAL_CLEANUP_FUNC(UdevRuleFile*, udev_rule_file_free); + UdevRules *udev_rules_free(UdevRules *rules) { if (!rules) return NULL; @@ -475,7 +486,7 @@ static void rule_line_append_token(UdevRuleLine *rule_line, UdevRuleToken *token } static int rule_line_add_token(UdevRuleLine *rule_line, UdevRuleTokenType type, UdevRuleOperatorType op, char *value, void *data) { - UdevRuleToken *token; + _cleanup_(udev_rule_token_freep) UdevRuleToken *token = NULL; UdevRuleMatchType match_type = _MATCH_TYPE_INVALID; UdevRuleSubstituteType subst_type = _SUBST_TYPE_INVALID; bool remove_trailing_whitespace = false; @@ -581,6 +592,7 @@ static int rule_line_add_token(UdevRuleLine *rule_line, UdevRuleTokenType type, TK_M_IMPORT_DB, TK_M_IMPORT_CMDLINE, TK_M_IMPORT_PARENT)) SET_FLAG(rule_line->type, LINE_UPDATE_SOMETHING, true); + TAKE_PTR(token); return 0; } @@ -1221,9 +1233,9 @@ static void rule_resolve_goto(UdevRuleFile *rule_file) { } int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile **ret) { + _cleanup_(udev_rule_file_freep) UdevRuleFile *rule_file = NULL; _cleanup_free_ char *continuation = NULL, *name = NULL; _cleanup_fclose_ FILE *f = NULL; - UdevRuleFile *rule_file; bool ignore_line = false; unsigned line_nr = 0; struct stat st; @@ -1333,6 +1345,8 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename, UdevRuleFile * if (ret) *ret = rule_file; + + TAKE_PTR(rule_file); return 1; } |