readlink: pick up gnulib changes to readlink -f
authorEric Blake <ebb9@byu.net>
Tue, 22 Sep 2009 21:03:02 +0000 (15:03 -0600)
committerJim Meyering <meyering@redhat.com>
Wed, 23 Sep 2009 06:45:08 +0000 (08:45 +0200)
* bootstrap.conf (obsolete_gnulib_modules): Move rename...
(gnulib_modules): ...here.  Add symlink.
* NEWS: Document the change in readlink.
* doc/coreutils.texi (readlink invocation): Likewise.
* tests/readlink/can-f: Update test to new semantics, and add test
of loop.

NEWS
bootstrap.conf
doc/coreutils.texi
tests/readlink/can-f

diff --git a/NEWS b/NEWS
index 270aa85..35c4966 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -18,6 +18,10 @@ GNU coreutils NEWS                                    -*- outline -*-
 
 ** Changes in behavior
 
+  canonicalize -f now ignores a trailing slash when deciding if the
+  last component (possibly via a dangling symlink) can be created,
+  since mkdir will succeed in that case.
+
   id no longer prints SELinux " context=..." when the POSIXLY_CORRECT
   environment variable is set.
 
index fb5ed15..d1dc128 100644 (file)
@@ -31,7 +31,6 @@ obsolete_gnulib_modules='
   memcpy
   memmove
   memset
-  rename
   strcspn
   strtod
   strtol
@@ -177,6 +176,7 @@ gnulib_modules="
   readutmp
   realloc
   regex
+  rename
   rename-dest-slash
   rmdir
   root-dev-ino
@@ -203,6 +203,7 @@ gnulib_modules="
   strtoimax
   strtoumax
   strverscmp
+  symlink
   sys_stat
   timespec
   tzset
index fa05626..0bfbd56 100644 (file)
@@ -9204,7 +9204,8 @@ The program accepts the following options.  Also see @ref{Common options}.
 @opindex --canonicalize
 Activate canonicalize mode.
 If any component of the file name except the last one is missing or unavailable,
-@command{readlink} produces no output and exits with a nonzero exit code.
+@command{readlink} produces no output and exits with a nonzero exit
+code.  A trailing slash is ignored.
 
 @item -e
 @itemx --canonicalize-existing
@@ -9212,7 +9213,8 @@ If any component of the file name except the last one is missing or unavailable,
 @opindex --canonicalize-existing
 Activate canonicalize mode.
 If any component is missing or unavailable, @command{readlink} produces
-no output and exits with a nonzero exit code.
+no output and exits with a nonzero exit code.  A trailing slash
+requires that the name resolve to a directory.
 
 @item -m
 @itemx --canonicalize-missing
index 8a000f8..a702ba9 100755 (executable)
@@ -38,6 +38,7 @@ ln -s regfile link1 || framework_failure
 ln -s subdir link2 || framework_failure
 ln -s missing link3 || framework_failure
 ln -s subdir/missing link4 || framework_failure
+ln -s link5 link5 || framework_failure
 
 cd "$pwd/$tmp/removed" || framework_failure
 
@@ -73,14 +74,14 @@ for p in "" "$pwd/$tmp/"; do
   v=`readlink -f "${p}subdir/more"` || fail=1
   test "$v" = "$my_pwd/$tmp/subdir/more" || fail=1
 
-  v=`readlink -f "${p}./subdir/more/"` && fail=1
-  test -z "$v" || fail=1
+  v=`readlink -f "${p}./subdir/more/"` || fail=1
+  test "$v" = "$my_pwd/$tmp/subdir/more" || fail=1
 
   v=`readlink -f "${p}missing"` || fail=1
   test "$v" = "$my_pwd/$tmp/missing" || fail=1
 
-  v=`readlink -f "${p}./missing/"` && fail=1
-  test -z "$v" || fail=1
+  v=`readlink -f "${p}./missing/"` || fail=1
+  test "$v" = "$my_pwd/$tmp/missing" || fail=1
 
   v=`readlink -f "${p}missing/more"` && fail=1
   test -z "$v" || fail=1
@@ -109,8 +110,8 @@ for p in "" "$pwd/$tmp/"; do
   v=`readlink -f "${p}link2/more"` || fail=1
   test "$v" = "$my_pwd/$tmp/subdir/more" || fail=1
 
-  v=`readlink -f "${p}./link2/more/"` && fail=1
-  test -z "$v" || fail=1
+  v=`readlink -f "${p}./link2/more/"` || fail=1
+  test "$v" = "$my_pwd/$tmp/subdir/more" || fail=1
 
   v=`readlink -f "${p}link2/more/more2"` && fail=1
   test -z "$v" || fail=1
@@ -121,8 +122,8 @@ for p in "" "$pwd/$tmp/"; do
   v=`readlink -f "${p}link3"` || fail=1
   test "$v" = "$my_pwd/$tmp/missing" || fail=1
 
-  v=`readlink -f "${p}./link3/"` && fail=1
-  test -z "$v" || fail=1
+  v=`readlink -f "${p}./link3/"` || fail=1
+  test "$v" = "$my_pwd/$tmp/missing" || fail=1
 
   v=`readlink -f "${p}link3/more"` && fail=1
   test -z "$v" || fail=1
@@ -133,11 +134,26 @@ for p in "" "$pwd/$tmp/"; do
   v=`readlink -f "${p}link4"` || fail=1
   test "$v" = "$my_pwd/$tmp/subdir/missing" || fail=1
 
-  v=`readlink -f "${p}./link4/"` && fail=1
-  test -z "$v" || fail=1
+  v=`readlink -f "${p}./link4/"` || fail=1
+  test "$v" = "$my_pwd/$tmp/subdir/missing" || fail=1
 
   v=`readlink -f "${p}link4/more"` && fail=1
   test -z "$v" || fail=1
+
+  v=`readlink -f "${p}./link4/more"` && fail=1
+  test -z "$v" || fail=1
+
+  v=`readlink -f "${p}link5"` && fail=1
+  test -z "$v" || fail=1
+
+  v=`readlink -f "${p}./link5/"` && fail=1
+  test -z "$v" || fail=1
+
+  v=`readlink -f "${p}link5/more"` && fail=1
+  test -z "$v" || fail=1
+
+  v=`readlink -f "${p}./link5/more"` && fail=1
+  test -z "$v" || fail=1
 done
 
 Exit $fail