--- embedaddon/rsync/testsuite/devices.test 2013/10/14 07:51:15 1.1.1.2 +++ embedaddon/rsync/testsuite/devices.test 2021/03/17 00:32:36 1.1.1.3 @@ -16,7 +16,7 @@ outfile="$scratchdir/rsync.out" case $0 in *fake*) - $RSYNC --version | grep ", xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests" + $RSYNC --version | grep "[, ] xattrs" >/dev/null || test_skipped "Rsync needs xattrs for fake device tests" RSYNC="$RSYNC --fake-super" TLS_ARGS="$TLS_ARGS --fake-super" case "$HOST_OS" in @@ -50,6 +50,20 @@ echo "$mode $maj,$min 0:0" > rsync.%stat EOF } ;; + freebsd*) + mknod() { + fn="$1" + case "$2" in + p) mode=10644 ;; + c) mode=20644 ;; + b) mode=60644 ;; + esac + maj="${3:-0}" + min="${4:-0}" + touch "$fn" + setextattr -h user "rsync.%stat" "$mode $maj,$min 0:0" "$fn" + } + ;; *) mknod() { fn="$1" @@ -67,21 +81,24 @@ EOF esac ;; *) - case `get_testuid` in - '') ;; # If "id" failed, try to continue... - 0) ;; - *) if [ -e "$FAKEROOT_PATH" ]; then + my_uid=`get_testuid` + root_uid=`get_rootuid` + if test x"$my_uid" = x; then + : # If "id" failed, try to continue... + elif test x"$my_uid" != x"$root_uid"; then + if [ -e "$FAKEROOT_PATH" ]; then echo "Let's try re-running the script under fakeroot..." exec "$FAKEROOT_PATH" "$SHELL_PATH" $RUNSHFLAGS "$0" fi test_skipped "Rsync needs root/fakeroot for device tests" - ;; - esac + fi ;; esac # TODO: Need to test whether hardlinks are possible on this OS/filesystem +$RSYNC --version | grep "[, ] hardlink-special" >/dev/null && CAN_HLINK_SPECIAL=yes || CAN_HLINK_SPECIAL=no + mkdir "$fromdir" mkdir "$todir" mknod "$fromdir/char" c 41 67 || test_skipped "Can't create char device node" @@ -90,7 +107,11 @@ mknod "$fromdir/char3" c 42 69 || test_skipped "Can't mknod "$fromdir/block" b 42 69 || test_skipped "Can't create block device node" mknod "$fromdir/block2" b 42 73 || test_skipped "Can't create block device node" mknod "$fromdir/block3" b 105 73 || test_skipped "Can't create block device node" -ln "$fromdir/block3" "$fromdir/block3.5" || echo "Skipping hard-linked device test..." +if test "$CAN_HLINK_SPECIAL" = yes; then + ln "$fromdir/block3" "$fromdir/block3.5" +else + echo "Skipping hard-linked device test..." +fi mkfifo "$fromdir/fifo" || mknod "$fromdir/fifo" p || test_skipped "Can't run mkfifo" # Work around time rounding/truncating issue by touching both files. touch -r "$fromdir/block" "$fromdir/block" "$fromdir/block2" @@ -132,7 +153,7 @@ cD$all_plus char2 cD$all_plus char3 cS$all_plus fifo EOT -if test ! -r "$fromdir/block3.5"; then +if test "$CAN_HLINK_SPECIAL" = no; then grep -v block3.5 <"$chkfile" >"$chkfile.new" mv "$chkfile.new" "$chkfile" fi @@ -144,7 +165,7 @@ echo "" ( cd "$todir" && rsync_ls_lR . ) > "$tmpdir/ls-to" diff $diffopt "$tmpdir/ls-from" "$tmpdir/ls-to" -if test -r "$fromdir/block3.5"; then +if test "$CAN_HLINK_SPECIAL" = yes; then set -x $RSYNC -aii --link-dest="$todir" "$fromdir/" "$chkdir/" \ | tee "$outfile"