Merge branch 'cb/open-noatime-clear-errno' into maint
authorJunio C Hamano <gitster@pobox.com>
Fri, 4 Sep 2015 02:17:49 +0000 (19:17 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 4 Sep 2015 02:17:49 +0000 (19:17 -0700)
When trying to see that an object does not exist, a state errno
leaked from our "first try to open a packfile with O_NOATIME and
then if it fails retry without it" logic on a system that refuses
O_NOATIME. This confused us and caused us to die, saying that the
packfile is unreadable, when we should have just reported that the
object does not exist in that packfile to the caller.

* cb/open-noatime-clear-errno:
git_open_noatime: return with errno=0 on success

sha1_file.c
index 1cee4384225fb9fab1a4b2a4949c8f730eb125ae..f2e993e0b8b998c91b945771a87a099d882448f5 100644 (file)
@@ -1461,7 +1461,10 @@ int git_open_noatime(const char *name)
        static int sha1_file_open_flag = O_NOATIME;
 
        for (;;) {
-               int fd = open(name, O_RDONLY | sha1_file_open_flag);
+               int fd;
+
+               errno = 0;
+               fd = open(name, O_RDONLY | sha1_file_open_flag);
                if (fd >= 0)
                        return fd;