diff options
author | Stef Walter <stef@thewalter.net> | 2013-08-26 14:48:59 +0200 |
---|---|---|
committer | Stef Walter <stef@thewalter.net> | 2013-08-28 10:59:10 +0200 |
commit | cdad5bceee79afbf8b3440b39c72890d2e67448d (patch) | |
tree | f07a8a45fd549a70277e4df9ae783fb996198c7d /trust/save.c | |
parent | e1042e93488f2b38abeea58b65440111df69afdc (diff) | |
download | p11-kit-cdad5bceee79afbf8b3440b39c72890d2e67448d.tar.gz |
Avoid multiple stat() calls for same file
As a side effect we can also not use the dirent.d_type field
https://bugs.freedesktop.org/show_bug.cgi?id=68525
Diffstat (limited to 'trust/save.c')
-rw-r--r-- | trust/save.c | 14 |
1 files changed, 2 insertions, 12 deletions
diff --git a/trust/save.c b/trust/save.c index a549d93..6533bd1 100644 --- a/trust/save.c +++ b/trust/save.c @@ -512,11 +512,11 @@ cleanup_directory (const char *directory, p11_dict *cache) { struct dirent *dp; + struct stat st; p11_dict *remove; p11_dictiter iter; char *path; DIR *dir; - int skip; bool ret; /* First we load all the modules */ @@ -535,18 +535,8 @@ cleanup_directory (const char *directory, if (asprintf (&path, "%s/%s", directory, dp->d_name) < 0) return_val_if_reached (false); -#ifdef HAVE_STRUCT_DIRENT_D_TYPE - if(dp->d_type != DT_UNKNOWN) { - skip = (dp->d_type == DT_DIR); - } else -#endif - { - struct stat st; - - skip = (stat (path, &st) < 0) || S_ISDIR (st.st_mode); - } - if (!skip) { + if (stat (path, &st) >= 0 && !S_ISDIR (st.st_mode)) { if (!p11_dict_set (remove, path, path)) return_val_if_reached (false); } else { |