[prev in list] [next in list] [prev in thread] [next in thread] 

List:       busybox
Subject:    Re: readlink/realpath -m in busybox
From:       Rob Landley <rob () landley ! net>
Date:       2020-03-23 8:07:17
Message-ID: 97f910f5-1e4f-7fc7-a47e-b641a0d67b52 () landley ! net
[Download RAW message or body]

On 3/21/20 8:26 PM, Eli Schwartz wrote:
> On 3/21/20 5:12 AM, Johannes Schauer wrote:
>> Hi,
>>
>> is there existing code that works with busybox and replaces "readlink -m" or
>> "realpath -m" from coreutils?
>>
>> Resources I found online either show solution for "readlink -f" only, when
>> neither readlink nor realpath exists, when Perl is available or when bash is
>> available.
>>
>> Specifically I want to replace the "readlink -m" invocation here [1] by
>> something that works with busybox.
>>
>> Thanks!
>>
>> cheers, josch
>>
>> [1] https://sources.debian.org/src/glibc/2.30-2/debian/debhelper.in/libc.preinst/#L226
> 
> I can't think of one, but you could implement it in pure shell by
> checking the return code of readlink without options (it will fail if
> the file is not a symlink), and walk the path to find the first
> directory that exists in order to support -m. This would be pretty
> compatible with any readlink implementation, including ones without -f.

You could just grab the toybox xabspath() from lib/xwrap.c. It's zero clause BSD
which is convertible to literally any license (public domain equivalent). See
toybox toys/*/readlink.c to see how it's used to implement -m there. Wouldn't be
the first large chunk of toybox code copied into busybox. :)

(As the commit adding that said, ubuntu's -m will happily show
/bin/ls/blah/../potato and the code I wrote considers descending through a file
to be an error even if you back out again, because you can't mkpath -p that so
how is it _useful_?)

Rob

P.S. Or if you just want something fast, the instructions in
https://busybox.net/FAQ.html#backporting also apply to having a mix of busybox
and toybox on the system. And toybox can build any command standalone via "make
defconfig; make readlink". If you need a static target version that would be
export LDFLAGS=--static CROSS_COMPILE=/path/to/prefix- ; make defconfig;
make readlink
_______________________________________________
busybox mailing list
busybox@busybox.net
http://lists.busybox.net/mailman/listinfo/busybox
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic