sha1_file: make the new sha1 object writing be coda-friendly.

Coda doesn't like cross-directory hardlinks. So try to fall back
on a plain rename instead.
This commit is contained in:
Linus Torvalds 2005-05-03 15:16:18 -07:00
parent aac1794132
commit a31c6d022e

View File

@ -353,8 +353,21 @@ int write_sha1_file(char *buf, unsigned long len, const char *type, unsigned cha
close(fd); close(fd);
ret = link(tmpfile, filename); ret = link(tmpfile, filename);
if (ret < 0) if (ret < 0) {
ret = errno; ret = errno;
/*
* Coda hack - coda doesn't like cross-directory links,
* so we fall back to a rename, which will mean that it
* won't be able to check collisions, but that's not a
* big deal.
*
* When this succeeds, we just return 0. We have nothing
* left to unlink.
*/
if (ret == EXDEV && !rename(tmpfile, filename))
return 0;
}
unlink(tmpfile); unlink(tmpfile);
if (ret) { if (ret) {
if (ret != EEXIST) { if (ret != EEXIST) {