thanks for your time and comments folks!
On Fri, Nov 14, 2014 at 6:47 AM, Eric Blake <ebl...@redhat.com> wrote: > On 11/14/2014 06:15 AM, Eric Blake wrote: > >>> Confused me too when I encountered it first, but tt's required by POSIX: >>> http://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11 >> >> No, actually, POSIX requires that it (attempt to) remove the DIRECTORY, >> not the symlink. Linux is intentionally in violation of POSIX on this >> front. >> >> Try this on Solaris: >> >> $ mkdir a >> $ ln -s a b >> $ rm b/ >> $ ls -d ? >> b > > Uggh, serves me right for typing without testing. I'm mixing up > rename(), unlink(), and rmdir() semantics. Basically, > unlink("anything/") is required by POSIX to fail because the trailing / > means that the only thing to be removed is a directory, but directories > can only be removed by rmdir(), not unlink(). > > Still, my point remains when you use 'rm -r b/': on Linux, it fails > (cannot remove 'b/': Not a directory), on Solaris it succeeds at > removing 'a' and leaving 'b' dangling. > > The fact that Linux intentionally violates POSIX on some of the corner > cases related to symlinks to directories makes it harder to definitively > state what coreutils should do. > > -- > Eric Blake eblake redhat com +1-919-301-3266 > Libvirt virtualization library http://libvirt.org >