fstrim.c: use open(O_DIRECTORY) instead of stat
open(O_DIRECTORY) returns an error if the open attempt
is against anything other than a directory. This basically
duplicates the check that the stat() call was trying to do.
Eliminate the unnecessary stat() call and use O_DIRECTORY
instead.
Change-Id: I1821abbed325f29a7214fdc41ed27cd9e26817d0
diff --git a/fstrim.c b/fstrim.c
index 2769643..2c24fc9 100644
--- a/fstrim.c
+++ b/fstrim.c
@@ -62,7 +62,6 @@
int fd;
int ret = 0;
struct fstrim_range range = { 0 };
- struct stat sb;
extern struct fstab *fstab;
int deep_trim = !!thread_arg;
@@ -90,18 +89,7 @@
continue; /* Should we trim fat32 filesystems? */
}
- if (stat(fstab->recs[i].mount_point, &sb) == -1) {
- SLOGE("Cannot stat mount point %s\n", fstab->recs[i].mount_point);
- ret = -1;
- continue;
- }
- if (!S_ISDIR(sb.st_mode)) {
- SLOGE("%s is not a directory\n", fstab->recs[i].mount_point);
- ret = -1;
- continue;
- }
-
- fd = open(fstab->recs[i].mount_point, O_RDONLY);
+ fd = open(fstab->recs[i].mount_point, O_RDONLY | O_DIRECTORY | O_CLOEXEC | O_NOFOLLOW);
if (fd < 0) {
SLOGE("Cannot open %s for FITRIM\n", fstab->recs[i].mount_point);
ret = -1;