udev_rules_parse_file: do not skip ENOENT

Starting with commit ed88bcfb7c,
udev_rules_parse_file() silently skips files it fails to open with
ENOENT error, e.g. when they are broken symlinks.  As this behavior is
undocumented and it seems to be unintended, let's treat ENOENT like any
other error.  This change would also simplify the implementation of the
udev rules syntax checker mentioned in #26606.

udev_rules_load(), the only user of udev_rules_parse_file(), is not
affected by this change because it essentially ignores the value
returned by the latter, the only visible difference would be a log
message issued for every udev rules file that couldn't be open because
of ENOENT.

Fixes: ed88bcfb7c ("Be more careful when checking for empty files")
This commit is contained in:
Dmitry V. Levin
2023-03-06 17:42:12 +09:00
committed by Yu Watanabe
parent 25e12db5e4
commit 42a467b552
+1 -5
View File
@@ -1178,12 +1178,8 @@ int udev_rules_parse_file(UdevRules *rules, const char *filename) {
int r;
f = fopen(filename, "re");
if (!f) {
if (errno == ENOENT)
return 0;
if (!f)
return log_warning_errno(errno, "Failed to open %s, ignoring: %m", filename);
}
if (fstat(fileno(f), &st) < 0)
return log_warning_errno(errno, "Failed to stat %s, ignoring: %m", filename);