From a986501b9059b72e8deced262554fbdd1ab9da17 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Wed, 28 Jan 2015 01:36:40 +0100 Subject: 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. --- src/sysv-generator/sysv-generator.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) (limited to 'src/sysv-generator/sysv-generator.c') diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c index 984beab70..09ade0dc3 100644 --- a/src/sysv-generator/sysv-generator.c +++ b/src/sysv-generator/sysv-generator.c @@ -749,12 +749,10 @@ static int enumerate_sysv(LookupPaths lp, Hashmap *all_services) { struct stat st; int r; - dirent_ensure_type(d, de); - - if (!dirent_is_file(de)) - continue; + if (hidden_file(de->d_name)) + 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(); -- cgit v1.2.3