From 7855ddf2cea1f5dd2776f062b1dfe4a91507238c Mon Sep 17 00:00:00 2001 From: "U-Khasa\\Vitor" Date: Thu, 11 Feb 2010 12:07:08 -0600 Subject: [PATCH] exists_directory/1 --- C/iopreds.c | 29 +++++++++++++++++++++++++++++ packages/jpl | 2 +- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/C/iopreds.c b/C/iopreds.c index 8ef0d5e10..f84e84088 100755 --- a/C/iopreds.c +++ b/C/iopreds.c @@ -2262,6 +2262,34 @@ p_access(void) } } +static Int +p_exists_directory(void) +{ + Term tname = Deref(ARG1); + char *file_name; + + if (IsVarTerm(tname)) { + Yap_Error(INSTANTIATION_ERROR, tname, "exists_directory/1"); + return FALSE; + } else if (!IsAtomTerm (tname)) { + Yap_Error(TYPE_ERROR_ATOM, tname, "exists_directory/1"); + return FALSE; + } else { +#if HAVE_STAT + struct SYSTEM_STAT ss; + + file_name = RepAtom(AtomOfTerm(tname))->StrOfAE; + if (SYSTEM_STAT(file_name, &ss) != 0) { + /* ignore errors while checking a file */ + return FALSE; + } + return (S_ISDIR(ss.st_mode)); +#else + return FALSE; +#endif + } +} + static Int p_open (void) { /* '$open'(+File,+Mode,?Stream,-ReturnCode) */ @@ -6258,6 +6286,7 @@ Yap_InitIOPreds(void) Yap_InitCPred ("$get0_line_codes", 2, p_get0_line_codes, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$get_byte", 2, p_get_byte, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$access", 1, p_access, SafePredFlag|SyncPredFlag|HiddenPredFlag); + Yap_InitCPred ("exists_directory", 1, p_exists_directory, SafePredFlag|SyncPredFlag); Yap_InitCPred ("$open", 5, p_open, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$file_expansion", 2, p_file_expansion, SafePredFlag|SyncPredFlag|HiddenPredFlag); Yap_InitCPred ("$open_null_stream", 1, p_open_null_stream, SafePredFlag|SyncPredFlag|HiddenPredFlag); diff --git a/packages/jpl b/packages/jpl index 9f80255cc..d9614e99d 160000 --- a/packages/jpl +++ b/packages/jpl @@ -1 +1 @@ -Subproject commit 9f80255cce18ee268792631aa1180e19a496346f +Subproject commit d9614e99dc98f8546fdc213c9e45003cf6efd520