dirent broken on x86-64/darwin
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
SBCL |
Fix Released
|
High
|
Cyrus Harmon |
Bug Description
something about dirent is hosed on x86-64/darwin on SBCL 1.0.39.10 (and earlier):
* (let ((dir (sb-posix:opendir "/"))
(unwind-protect
(block dir-loop
(loop for dirent = (sb-posix:readdir dir)
when (not (stringp (sb-posix:
do (return-from dir-loop nil)
(
T
*
(let ((dir (sb-posix:opendir "/")))
(unwind-protect
(block dir-loop
(loop for dirent = (sb-posix:readdir dir)
until (sb-alien:
when (not (stringp (print (sb-posix:
do (return-from dir-loop nil)
finally (return t)))
(sb-
"."
"DS_Store"
":"
""
""
"ee"
"00"
"e"
""
"00"
"ores"
""
"eveloper"
"`"
"ome"
""
""
debugger invoked on a SB-INT:
c-string decoding error (:external-format :UTF-8):
the octet sequence 4 cannot be decoded.
Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
restarts (invokable by number or by possibly-
0: [ABORT] Exit debugger, returning to top level.
(SB-INT:
0]
Changed in sbcl: | |
importance: | Undecided → High |
assignee: | nobody → Cyrus Harmon (ch-launchpad) |
Changed in sbcl: | |
status: | Fix Committed → Fix Released |
Some cross-checking with Osicat (which works fine) seems to indicate that the DIRENT struct definition is correct and the problem lies with readdir(). Calling readdir$INODE64() instead seems to fix the problem.