Use do_ftruncate() for the added call too.
[rsync-patches.git] / soften-links.diff
1 Marco d'Itri wrote:
2
3 I run one of the debian mirrors, and I had to write this patch because
4 my archive is split between more than one disk. Would you accept a more
5 polished version of this patch for inclusion in rsync?
6
7 To use this patch, run these commands for a successful build:
8
9     patch -p1 <patches/soften-links.diff
10     ./configure                           (optional if already run)
11     make
12
13 based-on: d64bda1c1e79dc385f194d74f7957ce7cd118654
14 diff --git a/syscall.c b/syscall.c
15 --- a/syscall.c
16 +++ b/syscall.c
17 @@ -106,9 +106,14 @@ ssize_t do_readlink(const char *path, char *buf, size_t bufsiz)
18  #ifdef HAVE_LINK
19  int do_link(const char *fname1, const char *fname2)
20  {
21 +       int st;
22 +
23         if (dry_run) return 0;
24         RETURN_ERROR_IF_RO_OR_LO;
25 -       return link(fname1, fname2);
26 +       st = link(fname1, fname2);
27 +       if (/*soften_links &&*/ st != 0 && errno == EXDEV)
28 +               st = symlink(fname1, fname2);
29 +       return st;
30  }
31  #endif
32