[Rd] Sys.readlink (on BSD vs Linux)

Sven Templer sven.templer at gmail.com
Mon Feb 29 16:10:25 CET 2016


Yes,

`Sys.readlink` is returning values as explained/expected.
I was very confused by mixing C library functions with coreutils and not reading careful enough, please excuse me for that.
A link to `normalizePath` would be of help in the 'See Also' section, in my opinion.

Regards,
Sven

> On 29 Feb 2016, at 16:02, Simon Urbanek <simon.urbanek at r-project.org> wrote:
> 
> 
>> On Feb 29, 2016, at 5:59 AM, Sven Templer <sven.templer at gmail.com> wrote:
>> 
>> Hello,
>> 
>> sorry for not being clear enough.
>> 
>> My problem is represented with the following code, running on OSX:
>> 
>> mkdir ~/test
>> ln -s ~/test ~/testlink
>> touch ~/test/foo
>> Rscript -e 'Sys.readlink(c("~/test/foo", "~/testlink/foo")); normalizePath(c("~/test/foo","~/testlink/foo"))'
>> 
>> I expected `Sys.readlink` to show the same output as `normalizePath`.
> 
> 
> Why? To quote from the Sys.readlink() docs:
> 
> Value:
> 
>     A character vector of the same length as ‘paths’.  The entries are
>     the path of the file linked to, ‘""’ if the path is not a symbolic
>     link.
> 
> since you are referring to a file and not a link the result is as expected "" - both on OS X and Linux.
> 
> 
>> Also, I think the readlink.h imported to R to be the same as from the system's `readlink` command, thus mimicking the command line difference.
>> 
>> Am I wrong with the latter? Anyway, the behaviour is irritating, thus the request to at least mention `normalizePath` in the Rd of `Sys.readlink`.
>> 
>> Best,
>> Sven
>> 
>> 
>>> On 29 Feb 2016, at 11:44, Mikko Korpela <mikko.korpela at aalto.fi> wrote:
>>> 
>>> On 29.02.2016 10:34, Sven E. Templer wrote:
>>>> Hello together,
>>>> 
>>>> the function `Sys.readlink` uses the system's readlink command to resolve symlink paths. On OSX/BSD the command has a different meaning than on Linux [1].
>>>> 
>>>> There exists the tool 'realpath', which seems suitable for the task, at least applied at the command line level [2]. It is used in `normalizePath`.
>>>> 
>>>> I suggest (at least the latter) to
>>>> * use realpath instead readlink within Sys.readlink (do_readlink -> do_normalizepath)
>>>> * link to `normalizePath` in the Rd document, eventually mentioning the difference
>>>> 
>>>> Many thanks,
>>>> Sven
>>>> 
>>>> [1] see
>>>> https://www.freebsd.org/cgi/man.cgi?query=readlink
>>>> vs
>>>> http://linux.die.net/man/1/readlink
>>>> 
>>>> [2]
>>>> https://www.freebsd.org/cgi/man.cgi?query=realpath
>>>> http://linux.die.net/man/1/realpath
>>> 
>>> What do you mean by "different meaning"? How are the command line tools
>>> [1] relevant when R is using the C function 'readlink'?
>>> 
>>> http://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html
>>> https://www.freebsd.org/cgi/man.cgi?query=readlink&sektion=2
>>> http://man7.org/linux/man-pages/man2/readlink.2.html
>>> 
>>> -- 
>>> Mikko Korpela
>>> Aalto University School of Science
>>> Department of Computer Science
>> 
>> ______________________________________________
>> R-devel at r-project.org mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-devel
>> 
> 



More information about the R-devel mailing list