@@ -, +, @@ --- misc/install-xattr/checkcopyattrs.sh | 11 ++++++++++- misc/install-xattr/install-xattr.c | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) --- a/misc/install-xattr/checkcopyattrs.sh +++ a/misc/install-xattr/checkcopyattrs.sh @@ -2,7 +2,7 @@ set -e touch a b c -mkdir -p d e +mkdir -p d e f setfattr -n user.foo -v "bar" a setfattr -n user.bas -v "x" a setfattr -n user.pax.flags -v "mr" a @@ -27,6 +27,15 @@ setfattr -n user.pax.flags -v "r" c [ "$(getfattr --only-values -n user.pax.flags d/b)" == "p" ] [ "$(getfattr --only-values -n user.pax.flags d/c)" == "r" ] +# This tests if the src file was inside a directory +# the correct dst location should be f/a. NOT f/d/a. +./install-xattr d/a f + +[ -x f/a ] +[ ! -x f/d/a ] +[ "$(getfattr --only-values -n user.foo f/a)" == "bar" ] +[ "$(getfattr --only-values -n user.bas f/a)" == "x" ] + ./install-xattr -t e a b c [ "$(getfattr --only-values -n user.foo e/a)" == "bar" ] --- a/misc/install-xattr/install-xattr.c +++ a/misc/install-xattr/install-xattr.c @@ -382,7 +382,7 @@ main(int argc, char* argv[]) if (S_ISDIR(s.st_mode)) continue; - path = path_join(target, argv[i]); + path = path_join(target, basename(argv[i])); copyxattr(argv[i], path); free(path); } --