* sp/lazy-mkdir:
  Make lazy mkdir more robust.
This commit is contained in:
Junio C Hamano 2006-07-14 15:38:37 -07:00
Родитель 7eae7b993e 756aaf4ac5
Коммит 1733832d8e
1 изменённых файлов: 12 добавлений и 14 удалений

Просмотреть файл

@ -1331,21 +1331,20 @@ char *write_sha1_file_prepare(void *buf,
static int link_temp_to_file(const char *tmpfile, char *filename) static int link_temp_to_file(const char *tmpfile, char *filename)
{ {
int ret; int ret;
char *dir;
if (!link(tmpfile, filename)) if (!link(tmpfile, filename))
return 0; return 0;
/* /*
* Try to mkdir the last path component if that failed * Try to mkdir the last path component if that failed.
* with an ENOENT.
* *
* Re-try the "link()" regardless of whether the mkdir * Re-try the "link()" regardless of whether the mkdir
* succeeds, since a race might mean that somebody * succeeds, since a race might mean that somebody
* else succeeded. * else succeeded.
*/ */
ret = errno; ret = errno;
if (ret == ENOENT) { dir = strrchr(filename, '/');
char *dir = strrchr(filename, '/');
if (dir) { if (dir) {
*dir = 0; *dir = 0;
mkdir(filename, 0777); mkdir(filename, 0777);
@ -1356,7 +1355,6 @@ static int link_temp_to_file(const char *tmpfile, char *filename)
return 0; return 0;
ret = errno; ret = errno;
} }
}
return ret; return ret;
} }