Skip to content
Permalink
1b740d97b9
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Rsync might crash if we continue after a hard link failure. There is no
reasonable way anyway, so just abort with recognizable error code.

https://github.com/WayneD/rsync/issues/329
---
 hlink.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/hlink.c b/hlink.c
index 66810a3e..23869872 100644
--- a/hlink.c
+++ b/hlink.c
@@ -464,7 +464,10 @@ int hard_link_one(struct file_struct *file, const char *fname,
 			code = FERROR_XFER;
 		rsyserr(code, errno, "link %s => %s failed",
 			full_fname(fname), oldname);
-		return 0;
+
+		/* This is broken beyond repair for --link-dest. No good way to continue here. */
+		fprintf(stderr, "Aborting due to hard link failure\n");
+		_exit(33);
 	}

 	file->flags |= FLAG_HLINK_DONE;
--
2.36.0
3 contributors

Users who have contributed to this file

@donald @wwwutz @david
executable file 50 lines (35 sloc) 1.19 KB
#!/usr/bin/env beesh
# BEE_VERSION rsync-3.2.4-2
# more info: https://rsync.samba.org , https://launchpad.net/debian/+source/rsync/
# SRCURL[0]="https://rsync.samba.org/ftp/rsync/src/rsync-${PKGVERSION}.tar.gz"
SRCURL[0]="https://beehive.molgen.mpg.de/26f1c64259fbd2ed7a59b28d2787ecf2/rsync-3.2.4.tar.gz"
# https://launchpad.net/debian/+source/rsync/
# SRCURL[1]="https://launchpad.net/debian/+archive/primary/+sourcefiles/rsync/3.2.4-1/rsync_3.2.4-1.debian.tar.xz"
SRCURL[1]="https://beehive.molgen.mpg.de/54f987de1f929d0411bbb815c248f28d/rsync_3.2.4-1.debian.tar.xz"
# PATCHURL+=(/src/mariux/patches/rsync-abort-on-hard-link-failure.patch)
PATCHURL+=("https://beehive.molgen.mpg.de/2d9d0053167d4d6e202357edda0a4a4d/rsync-abort-on-hard-link-failure.patch")
BEE_BUILDTYPE=autotools
# build_in_sourcedir
# sourcesubdir_append src
#mee_extract() {
# bee_extract "${@}"
#}
mee_patch_pre() {
for p in $( cat $S/debian/patches/series ); do
echo "adding patch $p"
bee_PATCHFILES+=( $S/debian/patches/$p )
done
}
#mee_patch() {
# bee_patch "${@}"
#}
mee_configure() {
bee_configure \
LIBS=-l:libxxhash.a
}
#mee_build() {
# bee_build
#}
#mee_install() {
# bee_install
#}