gcl.git - GNU Common Lisp

index : gcl.git
GNU Common Lisp
summary refs log tree commit diff
diff options
context:
space:
mode:
authorCamm Maguire <camm@debian.org>2013年11月09日 12:51:21 +0000
committerCamm Maguire <camm@debian.org>2013年11月09日 12:51:21 +0000
commit1b6d17e80edbbd8d9d06cb1cad43901bb06b8c6e (patch)
tree3ab4c300cae035c66acebede737111a46cdd84e0
parente2e810dfd381664a738bdc0105635d8b65888662 (diff)
downloadgcl-1b6d17e80edbbd8d9d06cb1cad43901bb06b8c6e.tar.gz
refine readdir
Diffstat
-rwxr-xr-xgcl/o/unixfsys.c 25
1 files changed, 21 insertions, 4 deletions
diff --git a/gcl/o/unixfsys.c b/gcl/o/unixfsys.c
index c7260ed3d..bfb7404b5 100755
--- a/gcl/o/unixfsys.c
+++ b/gcl/o/unixfsys.c
@@ -863,12 +863,29 @@ DEFUN("OPENDIR",fixnum,fSopendir,SI,1,1,NONE,IO,OO,OO,OO,(object x),"") {
d=opendir(filename);
return (fixnum)d;
}
-
-DEFUN("READDIR",object,fSreaddir,SI,1,1,NONE,OI,OO,OO,OO,(fixnum x),"") {
+
+DEFUN("D-TYPE-LIST",object,fSd_type_list,SI,0,0,NONE,OI,OO,OO,OO,(void),"") {
+ RETURN1(list(8,
+ MMcons(make_fixnum(DT_BLK),make_keyword("BLOCK")),
+ MMcons(make_fixnum(DT_CHR),make_keyword("CHAR")),
+ MMcons(make_fixnum(DT_DIR),make_keyword("DIRECTORY")),
+ MMcons(make_fixnum(DT_FIFO),make_keyword("FIFO")),
+ MMcons(make_fixnum(DT_LNK),make_keyword("LINK")),
+ MMcons(make_fixnum(DT_REG),make_keyword("FILE")),
+ MMcons(make_fixnum(DT_SOCK),make_keyword("SOCKET")),
+ MMcons(make_fixnum(DT_UNKNOWN),make_keyword("UNKNOWN"))
+ ));
+}
+
+DEFUN("READDIR",object,fSreaddir,SI,2,2,NONE,OI,IO,OO,OO,(fixnum x,fixnum y),"") {
struct dirent *e;
+ object z;
if (!x) RETURN1(Cnil);
- e=readdir((DIR *)x);
- RETURN1(e ? make_simple_string(e->d_name) : Cnil);
+ for (;(e=readdir((DIR *)x)) && y!=DT_UNKNOWN && e->d_type!=y;);
+ if (!e) RETURN1(Cnil);
+ z=make_simple_string(e->d_name);
+ if (y==DT_UNKNOWN) z=MMcons(z,make_fixnum(e->d_type));
+ RETURN1(z);
}
DEFUN("CLOSEDIR",object,fSclosedir,SI,1,1,NONE,OI,OO,OO,OO,(fixnum x),"") {
generated by cgit v1.2.3 (git 2.25.1) at 2025年09月02日 05:00:01 +0000

AltStyle によって変換されたページ (->オリジナル) /