From: Lennart Poettering Date: Wed, 28 Jan 2015 00:36:40 +0000 (+0100) Subject: sysv-generator: there's really no need to invoke fstatat() multiple times on the... X-Git-Tag: v219~255 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a986501b9059b72e8deced262554fbdd1ab9da17;p=elogind.git 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. --- 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();