path finding

This commit is contained in:
Vitor Santos Costa 2016-05-30 11:24:40 +01:00
parent 33fa5fa3c0
commit 4ac6d11dca
1 changed files with 14 additions and 4 deletions

View File

@ -471,22 +471,32 @@ static Int exists_directory(USES_REGS1) {
static Int is_absolute_file_name(USES_REGS1) { /* file_base_name(Stream,N) */ static Int is_absolute_file_name(USES_REGS1) { /* file_base_name(Stream,N) */
Term t = Deref(ARG1); Term t = Deref(ARG1);
Atom at; Atom at;
bool rc;
if (IsVarTerm(t)) { if (IsVarTerm(t)) {
Yap_Error(INSTANTIATION_ERROR, t, "file_base_name/2"); Yap_Error(INSTANTIATION_ERROR, t, "file_base_name/2");
return FALSE; return false;
} }
const char *buf = Yap_TextTermToText(t, NULL, 0, LOCAL_encoding); const char *buf = Yap_TextTermToText(t, NULL, 0, LOCAL_encoding);
if (buf) { if (buf) {
return Yap_IsAbsolutePath(buf); rc = Yap_IsAbsolutePath(buf);
} else { } else {
at = AtomOfTerm(t); at = AtomOfTerm(t);
if (IsWideAtom(at)) { if (IsWideAtom(at)) {
#if _WIN32 #if _WIN32
return PathIsRelativeW(RepAtom(at)->WStrOfAE); rc = PathIsRelativeW(RepAtom(at)->WStrOfAE);
#else #else
return RepAtom(at)->WStrOfAE[0] == '/'; rc = RepAtom(at)->WStrOfAE[0] == '/';
#endif #endif
} else {
#if _WIN32
rc = PathIsRelative(RepAtom(at)->StrOfAE);
#else
rc = RepAtom(at)->StrOfAE[0] == '/';
#endif
} }
freeBuffer( buf );
return rc;
} }
return false; return false;
} }