Browse Source

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.
maint
Linus Torvalds 20 years ago
parent
commit
a31c6d022e
  1. 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 @@ -353,8 +353,21 @@ int write_sha1_file(char *buf, unsigned long len, const char *type, unsigned cha
close(fd);

ret = link(tmpfile, filename);
if (ret < 0)
if (ret < 0) {
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);
if (ret) {
if (ret != EEXIST) {

Loading…
Cancel
Save