From e4b0666f8eee3fc48f37c0cd3fd194c27652173c Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Mon, 15 Jan 2007 08:54:51 +0000 Subject: * builtins.filterSource: pass the type of the file ("regular", "directory", "symlink") as the second argument to the filter predicate. --- src/libexpr/primops.cc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/libexpr/primops.cc b/src/libexpr/primops.cc index bc6e290a48fc..270bc4446bff 100644 --- a/src/libexpr/primops.cc +++ b/src/libexpr/primops.cc @@ -7,6 +7,10 @@ #include "expr-to-xml.hh" #include "nixexpr-ast.hh" +#include +#include +#include + #include @@ -739,7 +743,20 @@ struct FilterFromExpr : PathFilter bool operator () (const Path & path) { - Expr call = makeCall(filter, makePath(toATerm(path))); + struct stat st; + if (lstat(path.c_str(), &st)) + throw SysError(format("getting attributes of path `%1%'") % path); + + Expr call = + makeCall( + makeCall(filter, makePath(toATerm(path))), + makeStr( + S_ISREG(st.st_mode) ? "regular" : + S_ISDIR(st.st_mode) ? "directory" : + S_ISLNK(st.st_mode) ? "symlink" : + "unknown" /* not supported, will fail! */ + )); + return evalBool(state, call); } }; -- cgit 1.4.1