<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Jan 11, 2023 at 12:06 PM Rob Landley <<a href="mailto:rob@landley.net">rob@landley.net</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 1/10/23 15:46, Rob Landley wrote:<br>
> I note I'm building mkroot images for the release so this bugfix won't be in<br>
> 0.8.9, but Android has its own sync points. :)<br>
> <br>
> On 1/9/23 18:10, enh wrote:<br>
>> and here's the ls -lR for it...<br>
> <br>
> This has been on my todo list because I need to make an f2fs filesystem, which<br>
> is flash based, so I need to fake up a flash device with an erase block size. (I<br>
> did that years ago and need to find my notes. Possibly easiest to do with qemu<br>
> instead of that weird annotate-a-block-device driver?)<br>
<br>
Huh, apparently not: I gave mkfs.f2fs a 128 meg zeroed image file and it assumed<br>
512 sector size and ran with it.<br>
<br>
$ hd f2fs.img | less<br>
...<br>
00000880  6a 70 67 00 00 00 00 00  67 69 66 00 00 00 00 00  |jpg.....gif.....|<br>
00000890  70 6e 67 00 00 00 00 00  61 76 69 00 00 00 00 00  |png.....avi.....|<br>
000008a0  64 69 76 78 00 00 00 00  6d 70 34 00 00 00 00 00  |divx....mp4.....|<br>
000008b0  6d 70 33 00 00 00 00 00  33 67 70 00 00 00 00 00  |mp3.....3gp.....|<br>
000008c0  77 6d 76 00 00 00 00 00  77 6d 61 00 00 00 00 00  |wmv.....wma.....|<br>
000008d0  6d 70 65 67 00 00 00 00  6d 6b 76 00 00 00 00 00  |mpeg....mkv.....|<br>
000008e0  6d 6f 76 00 00 00 00 00  61 73 78 00 00 00 00 00  |mov.....asx.....|<br>
000008f0  61 73 66 00 00 00 00 00  77 6d 78 00 00 00 00 00  |asf.....wmx.....|<br>
00000900  73 76 69 00 00 00 00 00  77 76 78 00 00 00 00 00  |svi.....wvx.....|<br>
00000910  77 6d 00 00 00 00 00 00  6d 70 67 00 00 00 00 00  |wm......mpg.....|<br>
00000920  6d 70 65 00 00 00 00 00  72 6d 00 00 00 00 00 00  |mpe.....rm......|<br>
00000930  6f 67 67 00 00 00 00 00  6a 70 65 67 00 00 00 00  |ogg.....jpeg....|<br>
00000940  76 69 64 65 6f 00 00 00  61 70 6b 00 00 00 00 00  |video...apk.....|<br>
00000950  73 6f 00 00 00 00 00 00  64 62 00 00 00 00 00 00  |so......db......|<br>
<br>
I do not understand what this thing is up to at all, but I suppose I don't<br>
really NEED to at the moment? (This is an empty filesystem, I was wondering what<br>
the formatter put into it and "a whole bunch of filetype extensions" was not on<br>
my bingo card.)<br>
<br>
>> FAIL: realpath -s .. eats symlink in $PWD<br>
>> echo -ne '' | cd dos && realpath -s ..<br>
> <br>
> The -s says "don't expand symlinks" so logically it means ".." should strip the<br>
> last entry off of $PWD instead of traversing the filesystem? (That's why it<br>
> expects that output, anyway...)<br>
> <br>
>> --- expected 2023-01-09 21:52:49.611701819 +0000<br>
>> +++ actual 2023-01-09 21:52:49.635701818 +0000<br>
>> @@ -1 +1 @@<br>
>> -/data/local/tmp/toybox-tests-tmp.a8tofxJqRN/realpath<br>
>> +/data/local/tmp/toybox-tests-tmp.a8tofxJqRN/realpath/one<br>
> <br>
> The ls contents look right. I'll see if I can set up a test environment later<br>
> today...<br>
<br>
Let's see...<br>
<br>
$ sudo mount -o loop f2fs.img sub<br>
$ cp -a generated/testdir/testdir/. sub/. # post-realpath test debris<br>
$ cd sub/dos<br>
$ toybox realpath -s ..<br>
/home/landley/toybox/toybox/sub<br>
<br>
Nope, it's not reproducing for me under debian's f2fs loopback mount either.<br>
Built with android-ndk-r25b just to be sure.<br>
<br>
Oddly enough:<br>
<br>
$ realpath -s ..<br>
/home/landley/toybox/toybox/sub/one<br>
<br>
This is a behavior difference between toybox and gnu. (Hence the "toyonly" on<br>
the test.) I have NO idea how your test plumbing would wind up running the gnu<br>
version while triggering "toyonly" to run it, though...<br></blockquote><div><br></div><div>no, these tests are running on the device so no GNU realpath there. mksh does have a realpath builtin, but that should be disabled, and seems to be:</div><div><br></div><div>vsoc_x86_64:/ # builtin realpath<br>/system/bin/sh: builtin: realpath: not found<br></div><div><br></div><div>nothing obviously interesting to me from running under strace either:</div><div><br></div><div>getcwd("/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath/one/two", 4096) = 61<br>openat(AT_FDCWD, "/", O_RDONLY|O_PATH)  = 3<br>openat(3, "data", O_RDONLY|O_PATH)      = 4<br>close(3)                                = 0<br>openat(4, "local", O_RDONLY|O_PATH)     = 3<br>close(4)                                = 0<br>openat(3, "tmp", O_RDONLY|O_PATH)       = 4<br>close(3)                                = 0<br>openat(4, "toybox-tests-tmp.MVTLWvjcs4", O_RDONLY|O_PATH) = 3<br>close(4)                                = 0<br>openat(3, "realpath", O_RDONLY|O_PATH)  = 4<br>close(3)                                = 0<br>openat(4, "one", O_RDONLY|O_PATH)       = 3<br>close(4)                                = 0<br>openat(3, "two", O_RDONLY|O_PATH)       = 4<br>close(3)                                = 0<br>close(4)                                = 0<br>write(1, "/data/local/tmp/toybox-tests-tmp"..., 57/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath/one<br>) = 57</div><div><br></div><div>but i do seem to be seeing what you describe as the GNU behavior:</div><div><br></div><div>vsoc_x86_64:/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath # toybox realpath -s dos/..<br>/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath<br>vsoc_x86_64:/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath # cd dos <br>vsoc_x86_64:/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath/dos # toybox realpath -s ..<br>/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath/one<br>vsoc_x86_64:/data/local/tmp/toybox-tests-tmp.MVTLWvjcs4/realpath/dos #                          </div><div> <br></div><div>hmm... running the host toybox (on the host!) i see a test pass, and strace doesn't have the getcwd() my previous strace output started with ... it has this instead:</div><div><br></div><div>newfstatat(3, "", {st_mode=S_IFREG|0644, st_size=6362320, ...}, AT_EMPTY_PATH) = 0<br></div><div><br></div><div>ah, which is probably because you won't typically have $PWD set on Android...</div><div><br></div><div>  // If this isn't an absolute path, start with cwd or $PWD.<br>  if (*path != '/') {<br>    if ((flags & ABS_KEEP) && (str = getenv("PWD")))<br>      splitpath(path, splitpath(str, &todo));<br>    else {<br>      splitpath(path, splitpath(str = xgetcwd(), &todo));<br>      free(str);<br>    }<br>  } else splitpath(path, &todo);<br></div><div><br></div><div>mksh fakes it so `echo $PWD` works, but there's no _exported_ $PWD:</div><div><br></div><div># toybox printenv | grep  <br># <br></div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> Rob<br>
<br>
Still Rob<br>
</blockquote></div></div>