From 94fc36a42545eee15d235bd64ebdf92248925bf7 Mon Sep 17 00:00:00 2001 From: Stas Boukarev Date: Sat, 11 Feb 2017 23:58:03 +0300 Subject: [PATCH] Fix SB-UNIX:FD-TYPE. File types in stat.st-mode & S-IFMT are not unique single bits, use EQL, not logtest. Otherwise sockets were reported as directories. --- src/code/unix.lisp | 29 +++++++++++------------------ 1 file changed, 11 insertions(+), 18 deletions(-) diff --git a/src/code/unix.lisp b/src/code/unix.lisp index 3d6bca37f..c0fe230c8 100644 --- a/src/code/unix.lisp +++ b/src/code/unix.lisp @@ -899,27 +899,20 @@ avoiding atexit(3) hooks, etc. Otherwise exit(2) is called." #!-win32 (defun fd-type (fd) (declare (type unix-fd fd)) - (let ((fmt (logand - s-ifmt - (or (with-alien ((buf (struct wrapped_stat))) + (let ((mode (or (with-alien ((buf (struct wrapped_stat))) (syscall ("fstat_wrapper" int (* (struct wrapped_stat))) (slot buf 'st-mode) fd (addr buf))) - 0)))) - (cond ((logtest s-ififo fmt) - :fifo) - ((logtest s-ifchr fmt) - :character) - ((logtest s-ifdir fmt) - :directory) - ((logtest s-ifblk fmt) - :block) - ((logtest s-ifreg fmt) - :regular) - ((logtest s-ifsock fmt) - :socket) - (t - :unknown)))) + 0))) + (case (logand mode s-ifmt) + (#.s-ifchr :character) + (#.s-ifdir :directory) + (#.s-ifblk :block) + (#.s-ifreg :regular) + (#.s-ifsock :socket) + (#.s-iflnk :link) + (#.s-ififo :fifo) + (t :unknown)))) ;;;; time.h -- 2.11.4.GIT