commit:     18586b8eef2dee0f432d7f57b642fa177aebc788
Author:     Jason Zaman <jason <AT> perfinion <DOT> com>
AuthorDate: Tue Jun 24 19:07:08 2014 +0000
Commit:     Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Tue Jun 24 21:50:07 2014 +0000
URL:        
http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=18586b8e

Correctly determine dst path if src is in a dir

There is a mismatch between how install and install-xattr determines
the destination path.

When running `install src/a dst/' the correct output is `dst/a'.

install-xattr was incorrectly joining the paths so thought the output
was `dst/src/a' which did not exist.

A test case has been added to the test script too.

Signed-off-by: Jason Zaman <jason <AT> perfinion.com>
Signed-off-by: Anthony G. Basile <blueness <AT> gentoo.org>

---
 misc/install-xattr/checkcopyattrs.sh | 11 ++++++++++-
 misc/install-xattr/install-xattr.c   |  2 +-
 2 files changed, 11 insertions(+), 2 deletions(-)

diff --git a/misc/install-xattr/checkcopyattrs.sh 
b/misc/install-xattr/checkcopyattrs.sh
index 2e8f30f..0249013 100755
--- a/misc/install-xattr/checkcopyattrs.sh
+++ b/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" ]

diff --git a/misc/install-xattr/install-xattr.c 
b/misc/install-xattr/install-xattr.c
index 3d70b5e..f2157fd 100644
--- a/misc/install-xattr/install-xattr.c
+++ b/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);
                                }

Reply via email to