From: Junio C Hamano Date: Fri, 14 Jul 2006 22:38:37 +0000 (-0700) Subject: Merge branch 'sp/lazy-mkdir' X-Git-Tag: v1.4.2-rc1~6 X-Git-Url: https://git.lorimer.id.au/gitweb.git/diff_plain/1733832d8ec11655924af58efb67ff4503928b59?hp=7eae7b993ec3c1f5dfeb78d79673627b48d5f772 Merge branch 'sp/lazy-mkdir' * sp/lazy-mkdir: Make lazy mkdir more robust. --- diff --git a/sha1_file.c b/sha1_file.c index 8734d501fe..e666aec502 100644 --- a/sha1_file.c +++ b/sha1_file.c @@ -1331,31 +1331,29 @@ char *write_sha1_file_prepare(void *buf, static int link_temp_to_file(const char *tmpfile, char *filename) { int ret; + char *dir; if (!link(tmpfile, filename)) return 0; /* - * Try to mkdir the last path component if that failed - * with an ENOENT. + * Try to mkdir the last path component if that failed. * * Re-try the "link()" regardless of whether the mkdir * succeeds, since a race might mean that somebody * else succeeded. */ ret = errno; - if (ret == ENOENT) { - char *dir = strrchr(filename, '/'); - if (dir) { - *dir = 0; - mkdir(filename, 0777); - if (adjust_shared_perm(filename)) - return -2; - *dir = '/'; - if (!link(tmpfile, filename)) - return 0; - ret = errno; - } + dir = strrchr(filename, '/'); + if (dir) { + *dir = 0; + mkdir(filename, 0777); + if (adjust_shared_perm(filename)) + return -2; + *dir = '/'; + if (!link(tmpfile, filename)) + return 0; + ret = errno; } return ret; }