When rules are caches from mdev.conf then their line number cannot be retrieved from the parser anymore. Instead store the line number in the rule so that a cached rule still shows the line number where it was coming from.
Signed-off-by: Jan Klötzke <[email protected]> --- util-linux/mdev.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/util-linux/mdev.c b/util-linux/mdev.c index 81c4336af..9a8bea83f 100644 --- a/util-linux/mdev.c +++ b/util-linux/mdev.c @@ -299,6 +299,7 @@ struct rule { IF_FEATURE_MDEV_EXEC(char *r_cmd;) regex_t match; struct envmatch *envmatch; + int lineno; }; struct globals { @@ -324,6 +325,7 @@ struct globals { setup_common_bufsiz(); \ IF_NOT_FEATURE_MDEV_CONF(G.cur_rule.maj = -1;) \ IF_NOT_FEATURE_MDEV_CONF(G.cur_rule.mode = 0660;) \ + IF_NOT_FEATURE_MDEV_CONF(G.cur_rule.lineno = -1;) \ } while (0) @@ -340,6 +342,7 @@ static void make_default_cur_rule(void) memset(&G.cur_rule, 0, sizeof(G.cur_rule)); G.cur_rule.maj = -1; /* "not a @major,minor rule" */ G.cur_rule.mode = 0660; + G.cur_rule.lineno = -1; } static void clean_up_cur_rule(void) @@ -461,6 +464,7 @@ static void parse_next_rule(void) IF_FEATURE_MDEV_EXEC(G.cur_rule.r_cmd = xstrdup(val);) } + G.cur_rule.lineno = G.parser->lineno; return; next_rule: clean_up_cur_rule(); @@ -703,7 +707,10 @@ static void make_device(char *device_name, char *path, int operation) } /* else: it's final implicit "match-all" rule */ rule_matches: - dbg2("rule matched, line %d", G.parser ? G.parser->lineno : -1); + if (rule->lineno >= 0) + dbg2("rule matched, line %d", rule->lineno); + else + dbg2s("no rule matched"); #endif /* Build alias name */ alias = NULL; -- 2.20.1 _______________________________________________ busybox mailing list [email protected] http://lists.busybox.net/mailman/listinfo/busybox
