sysv-generator: there's really no need to invoke fstatat() multiple times on the same sysv script

It's sufficient to check once if something is a regular file, hence,
let's do that.
This commit is contained in:
Lennart Poettering
2015-01-28 01:36:40 +01:00
parent 7dfb0404b3
commit a986501b90
+6 -8
View File
@@ -749,12 +749,10 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
struct stat st;
int r;
dirent_ensure_type(d, de);
if (hidden_file(de->d_name))
continue;
if (!dirent_is_file(de))
continue;
if (fstatat(dirfd(d), de->d_name, &st, 0) < 0) {
if (fstatat(dirfd(d), de->d_name, &st, AT_SYMLINK_NOFOLLOW) < 0) {
log_warning_errno(errno, "stat() failed on %s/%s: %m", *path, de->d_name);
continue;
}
@@ -769,13 +767,13 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) {
if (!name)
return log_oom();
if (hashmap_contains(all_services, name))
continue;
fpath = strjoin(*path, "/", de->d_name, NULL);
if (!fpath)
return log_oom();
if (hashmap_contains(all_services, name))
continue;
service = new0(SysvStub, 1);
if (!service)
return log_oom();