Test data from GNU and busybox readlink(1):
$ ln -s valeria vem
$ ln -s ilja iam
$ /usr/bin/readlink vem iam
/usr/bin/readlink: extra operand ‘iam’
Try '/usr/bin/readlink --help' for more information.
$ busybox readlink vem iam
BusyBox v1.20.2 (2013-01-26 23:10:13 UTC) multi-call binary.

Usage: readlink FILE

Display the value of a symlink

Test data from GNU and busybox realpath(1):
$ ln -s valeria vem
$ ln -s ilja iam
$ /usr/bin/realpath $PWD/vem $PWD/iam
/tmp/linktest/valeria
/tmp/linktest/ilja
$ busybox realpath $PWD/vem $PWD/iam
/tmp/linktest/valeria
/tmp/linktest/ilja

Olga

On Sun, Sep 22, 2013 at 5:01 AM, Glenn Fowler <[email protected]> wrote:
>
> On Sat, 21 Sep 2013 18:45:15 +0200 Roland Mainz wrote:
>> On Sat, Sep 21, 2013 at 3:33 PM, Glenn Fowler <[email protected]> wrote:
>> > On Sat, 21 Sep 2013 08:51:38 +0200 Lionel Cons wrote:
>> >> On 19 September 2013 18:53, Roland Mainz <[email protected]> wrote:
>> >> > On Thu, Sep 19, 2013 at 6:08 PM, Glenn Fowler <[email protected]> 
>> >> > wrote:
>> >> >>
>> >> >> can someone post urls for the man pages for
>> >> >>         readlink(1)
>> >> >>         realpath(1)
>> >> >
>> >> > 1. The relevant references:
>> >> > The all-in-one manpage for busybox can be found here:
>> >> > http://busybox.net/downloads/BusyBox.html
>> >> >
>> >> > FreeBSD readlink(1):
>> >> > http://www.freebsd.org/cgi/man.cgi?query=readlink&apropos=0&sektion=1&manpath=FreeBSD+9.1-RELEASE&arch=default&format=html
>> >> > FreeBSD realpath(1):
>> >> > http://www.freebsd.org/cgi/man.cgi?query=realpath&apropos=0&sektion=1&manpath=FreeBSD+9.1-RELEASE&arch=default&format=html
>> >
>> > both man pages describe the operands as
>> >         [ path ... ]
>> >         [ file ... ]
>> > but only the realpath says what happens if file is omitted (. is used)
>> > neither say what happens if more than one path/file operand is specified
>> > readlink annoyingly inverts -q/-v -- diagnostics are off by default -- 
>> > *what other posix utility does that*
>> >
>> > so what does readlink do in silent mode when it is invoked with
>> >         readlink is-a-symlink is-not-a-symlink is-another-symlink
>> >
>> > from the refs roland supplied the gnu readlink and realpath are very close 
>> > modulo defaults
>> > mainly readlink with no --canonicalize* options is in "readlink" mode, 
>> > otherwise "realpath" mode
>> > and the annoying one: readlink by default suppresses diagnostics
>> >
>> > so I need to know what happens on bsd and gnu for readlink and realpath 
>> > for various combinations of
>> > 0,1,2,3 path/file operands and within that various combinations of
>> >         is-a-symlink is-not-a-symlink is-an-existing-path 
>> > is-not-an-existing-path
>> > in particular when there are multiple operands and an error occurs does 
>> > the output have a blank line to mark the errors?
>
>> Only realpath(1) supports multiple paths per invocation while
>> readlink(1) only takes one link per invocation...
>
>> > my intention is to provide one implementation of realpath with a union of 
>> > the
>> > ast --dirfd=fd + gnu readlink/realpath + bsd readlink/realpath options
>> > and an additional --readlink option that puts it into "readlink" mode 
>> > (operand is a symlink, diagnostics suppressed),
>> > and a note that argv[0]=="*readlink" => --readlink
>
>> Ahhgllll... IMO it would be easier (and cleaner... and easier to
>> debug) to have two seperate utilities. I still haven't sorted out the
>> sum(1) thing which provides almost all possible (hash-)sums with the
>> slight twist that somewhere in the code is a small bug which makes it
>> incompatible in the output to md5sum(1) ... please... just try to
>> follow "KISS" and make two utilities from it (precedent: busybox(1)
>> did the same...) ...
>
>> > this will given us one implementation and one document to manage
>
>> Just for the log:
>> 1. FreeBSD readlink is available from
>> http://ftp.FreeBSD.org/pub/FreeBSD/ports/local-distfiles/dd/readlink-20010616.tar.gz
>> -- snip --
>> $ sum -x sha512 ../readlink-20010616.tar.gz'
>> a323c8afccdc25c8a63d97e0ed08674e7f63347c5910bcc453bf2baf87aa82ae1a63fb21e17ff5ab31a192a28c32946078d264620759d808c4ca4f775305b038
>> readlink-20010616.tar.gz
>> -- snip --
>
>> 2. FreeBSD realpath(1) can be found here:
>> http://svnweb.freebsd.org/base/head/bin/realpath/
>
>> Took some searching to find them... it seems FreeBSD doesn't maintain
>> an unified search engine to find source files across projects like
>> OpenSolaris.org did... ;-(
>
>> Here are the test results for "readlink" ... note that busybox has no -f 
>> option:
>> -- snip --
>> $ readlink_freebsd bar
>> foo
>> $ busybox readlink bar
>> foo
>> $ readlink_freebsd . ; echo $?
>> 1
>> $ readlink_gnu . ; echo $?
>> 1
>> $ busybox readlink . ; echo $?
>> 1
>> $ readlink_freebsd -f bar
>> /home/test001/tmp/readlink_test/readlink-20010616/foo
>> $ readlink_gnu -f bar
>> /home/test001/tmp/readlink_test/readlink-20010616/foo
>> $ readlink_gnu -f .
>> /home/test001/tmp/readlink_test/readlink-20010616
>> $ readlink_freebsd -f .
>> /home/test001/tmp/readlink_test/readlink-20010616
>> $ readlink does_not_exist ; echo $?
>> 1
>> $ readlink_freebsd does_not_exist ; echo $?
>> 1
>> $ readlink -f does_not_exist ; echo $?
>> /home/test001/tmp/readlink_test/readlink-20010616/does_not_exist
>> 0
>> $ readlink_freebsd -f does_not_exist ; echo $?
>> /home/test001/tmp/readlink_test/readlink-20010616/does_not_exist
>> 0
>> -- snip --
>
>> Quick dumb testscript for realpath(1):
>> -- snip --
>> typeset -a cmd=(
>>     realpath_gnu
>>     realpath_bsd
>>     realpath_busybox
>> )
>
>> function realpath_gnu
>> {
>>     /usr/bin/realpath_gnu "$@"
>> }
>> function realpath_bsd
>> {
>>     /usr/bin/realpath_bsd "$@"
>> }
>> function realpath_busybox
>> {
>>     busybox realpath "$@"
>> }
>
>> ln -sf foo bar
>
>> for cmd in "${cmd[@]}" ; do
>>     for options in '.' "$PWD" 'bar' 'foo' 'no_such_file'; do
>>         output="${ ${cmd} ${options} 2>&1 ; (( res=$?)) ;  }"
>>         printf '# cmd=%q: options=%q output=%q, exit_code=%d\n' \
>>             "${cmd}" \
>>             "${options}" \
>>             "${output}" "res"
>>     done
>> done
>
>> -- snip --
>> ... and the output is:
>> -- snip --
>> # cmd=realpath_gnu: options=.
>> output=/home/test001/tmp/readlink_test/readlink-20010616, exit_code=0
>> # cmd=realpath_gnu:
>> options=/home/test001/tmp/readlink_test/readlink-20010616
>> output=/home/test001/tmp/readlink_test/readlink-20010616, exit_code=0
>> # cmd=realpath_gnu: options=bar
>> output=/home/test001/tmp/readlink_test/readlink-20010616/foo,
>> exit_code=0
>> # cmd=realpath_gnu: options=foo
>> output=/home/test001/tmp/readlink_test/readlink-20010616/foo,
>> exit_code=0
>> # cmd=realpath_gnu: options=no_such_file
>> output=/home/test001/tmp/readlink_test/readlink-20010616/no_such_file,
>> exit_code=0
>> # cmd=realpath_bsd: options=.
>> output=/home/test001/tmp/readlink_test/readlink-20010616, exit_code=0
>> # cmd=realpath_bsd:
>> options=/home/test001/tmp/readlink_test/readlink-20010616
>> output=/home/test001/tmp/readlink_test/readlink-20010616, exit_code=0
>> # cmd=realpath_bsd: options=bar
>> output=/home/test001/tmp/readlink_test/readlink-20010616/foo,
>> exit_code=0
>> # cmd=realpath_bsd: options=foo
>> output=/home/test001/tmp/readlink_test/readlink-20010616/foo,
>> exit_code=0
>> # cmd=realpath_bsd: options=no_such_file
>> output=/home/test001/tmp/readlink_test/readlink-20010616/no_such_file,
>> exit_code=0
>> # cmd=realpath_busybox: options=.
>> output=/home/test001/tmp/readlink_test/readlink-20010616, exit_code=0
>> # cmd=realpath_busybox:
>> options=/home/test001/tmp/readlink_test/readlink-20010616
>> output=/home/test001/tmp/readlink_test/readlink-20010616, exit_code=0
>> # cmd=realpath_busybox: options=bar
>> output=/home/test001/tmp/readlink_test/readlink-20010616/foo,
>> exit_code=0
>> # cmd=realpath_busybox: options=foo
>> output=/home/test001/tmp/readlink_test/readlink-20010616/foo,
>> exit_code=0
>> # cmd=realpath_busybox: options=no_such_file
>> output=/home/test001/tmp/readlink_test/readlink-20010616/no_such_file,
>> exit_code=0
>> -- snip --
>
>> I still need some time (mostly due to being sick (still twitching)) to
>> come up with good testcases... ;-/
>
> thanks for the tests
> I won't be reading the other implementation sources
> what happens with 0 operands and 2 operands
> both man pages specify
>         [ path ... ]
> which implies 0 or more path args
>
> _______________________________________________
> ast-developers mailing list
> [email protected]
> http://lists.research.att.com/mailman/listinfo/ast-developers



-- 
      ,   _                                    _   ,
     { \/`o;====-    Olga Kryzhanovska   -====;o`\/ }
.----'-/`-/     [email protected]   \-`\-'----.
 `'-..-| /       http://twitter.com/fleyta     \ |-..-'`
      /\/\     Solaris/BSD//C/C++ programmer   /\/\
      `--`                                      `--`
_______________________________________________
ast-developers mailing list
[email protected]
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to