]> git.ipfire.org Git - thirdparty/git.git/commitdiff
entry: check for fstat() errors after checkout
authorMatheus Tavares <matheus.bernardino@usp.br>
Thu, 9 Jul 2020 02:10:39 +0000 (23:10 -0300)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Jul 2020 16:45:06 +0000 (09:45 -0700)
In 11179eb311 ("entry.c: check if file exists after checkout",
2017-10-05) we started checking the result of the lstat() call done
after writing a file, to avoid writing garbage to the corresponding
cache entry. However, the code skips calling lstat() if it's possible
to use fstat() when it still has the file descriptor open. And when
calling fstat() we don't do the same error checking. To fix that, let
the callers of fstat_output() know when fstat() fails. In this case,
write_entry() will try to use lstat() and properly report an error if
that fails as well.

Signed-off-by: Matheus Tavares <matheus.bernardino@usp.br>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
entry.c

diff --git a/entry.c b/entry.c
index 53380bb614c19e82edfb45049f1703b4a3b9c8a3..2afac33699ca8bd12e6f492932acd33558826a29 100644 (file)
--- a/entry.c
+++ b/entry.c
@@ -113,8 +113,7 @@ static int fstat_output(int fd, const struct checkout *state, struct stat *st)
        /* use fstat() only when path == ce->name */
        if (fstat_is_reliable() &&
            state->refresh_cache && !state->base_dir_len) {
-               fstat(fd, st);
-               return 1;
+               return !fstat(fd, st);
        }
        return 0;
 }