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:
parent
aac1794132
commit
a31c6d022e
15
sha1_file.c
15
sha1_file.c
@ -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) {
|
||||||
|
Loading…
Reference in New Issue
Block a user