From ed88bcfb7c15029f9fc95ee2380759a9eb782d46 Mon Sep 17 00:00:00 2001 From: Zbigniew Jędrzejewski-Szmek Date: Wed, 16 Jul 2014 18:59:49 -0400 Subject: Be more careful when checking for empty files If we want to avoid reading a totally empty file, it seems better to check after we have opened the file, not before. --- src/shared/util.c | 11 +++++++++++ src/shared/util.h | 1 + 2 files changed, 12 insertions(+) (limited to 'src/shared') diff --git a/src/shared/util.c b/src/shared/util.c index 75dc58b63d..4fda31c838 100644 --- a/src/shared/util.c +++ b/src/shared/util.c @@ -3604,6 +3604,17 @@ int null_or_empty_path(const char *fn) { return null_or_empty(&st); } +int null_or_empty_fd(int fd) { + struct stat st; + + assert(fd >= 0); + + if (fstat(fd, &st) < 0) + return -errno; + + return null_or_empty(&st); +} + DIR *xopendirat(int fd, const char *name, int flags) { int nfd; DIR *d; diff --git a/src/shared/util.h b/src/shared/util.h index b3187a9ea1..d9d525e8a5 100644 --- a/src/shared/util.h +++ b/src/shared/util.h @@ -499,6 +499,7 @@ noreturn void freeze(void); bool null_or_empty(struct stat *st) _pure_; int null_or_empty_path(const char *fn); +int null_or_empty_fd(int fd); DIR *xopendirat(int dirfd, const char *name, int flags); -- cgit v1.2.3-54-g00ecf