svn commit: r253862 - head/sys/boot/ficl
Jan Beich
jbeich at tormail.org
Mon Aug 5 01:35:16 UTC 2013
Marcel Moolenaar <marcel at FreeBSD.org> writes:
> + static union {
> + struct dirent dirent;
> + char buf[512];
> + } u;
> + off_t off;
> + int len;
[...]
> + /*
> + * The readdirfd() function is specific to the loader environment.
> + * We do the best we can to make freaddir work, but it's not at
> + * all guaranteed.
> + */
> + off = lseek(fd, 0LL, SEEK_CUR);
> + len = getdents(fd, u.buf, sizeof(u.buf));
> + d = (len != -1) ? &u.dirent : NULL;
> + if (d != NULL)
> + lseek(fd, off + d->d_reclen, SEEK_SET);
How did you test? I can't make the code work on amd64 using
either ficl32 or ficl64.
# r253862
ok> s" /bin" 0 fopen
ok> dup freaddir . type cr
-1 .
ok> dup freaddir . type cr
-1 sleep
ok> dup freaddir . type cr
-1 sleep
ok> dup freaddir . type cr
-1 sleep
ok> dup freaddir . type cr
-1 sleep
# bin/172542
ok> s" /bin" 0 fopen
ok> dup freaddir . type cr
-1 .
ok> dup freaddir . type cr
-1 ..
ok> dup freaddir . type cr
-1 sleep
ok> dup freaddir . type cr
-1 domainname
ok> dup freaddir . type cr
-1 ps
ok> dup freaddir . type cr
-1 sync
ok> dup freaddir . type cr
-1 red
# zfsloader (no '.' and '..' - zfs_readdir bug?)
OK s" /bin" 0 fopen
OK dup freaddir . type cr
-1 cat
OK dup freaddir . type cr
-1 sh
OK dup freaddir . type cr
-1 chflags
OK dup freaddir . type cr
-1 chio
OK dup freaddir . type cr
-1 sleep
OK dup freaddir . type cr
-1 chmod
Here's an example with a loop almost endless.
# r253862
ok> s" /bin" lsdir
.
sleep
sleep
sleep
...
\ list directory contents
: lsdir ( dir -- )
0 fopen
begin
dup
freaddir
while
type cr
repeat
fclose
;
More information about the svn-src-head
mailing list