split path processing
This commit is contained in:
parent
6961626a3d
commit
9a071d5823
17
os/files.c
17
os/files.c
@ -344,15 +344,12 @@ file_size(USES_REGS1)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @pred access_file( + Name, -
|
|
||||||
|
|
||||||
*/
|
|
||||||
static Int
|
static Int
|
||||||
access_file(USES_REGS1)
|
access_file(USES_REGS1)
|
||||||
{
|
{
|
||||||
Term tname = Deref(ARG1);
|
Term tname = Deref(ARG1);
|
||||||
Term tmode = Deref(ARG2);
|
Term tmode = Deref(ARG2);
|
||||||
char ares[YAP_FILENAME_MAX];
|
char *ares;
|
||||||
Atom atmode;
|
Atom atmode;
|
||||||
|
|
||||||
if (IsVarTerm(tmode)) {
|
if (IsVarTerm(tmode)) {
|
||||||
@ -372,7 +369,7 @@ access_file(USES_REGS1)
|
|||||||
} else {
|
} else {
|
||||||
if (atmode == AtomNone)
|
if (atmode == AtomNone)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
if (!Yap_TrueFileName (RepAtom(AtomOfTerm(tname))->StrOfAE, ares, (atmode == AtomCsult)))
|
if (! (ares = RepAtom(AtomOfTerm(tname))->StrOfAE))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
#if HAVE_ACCESS
|
#if HAVE_ACCESS
|
||||||
@ -392,14 +389,14 @@ access_file(USES_REGS1)
|
|||||||
else if (atmode == AtomExecute)
|
else if (atmode == AtomExecute)
|
||||||
mode = X_OK;
|
mode = X_OK;
|
||||||
else {
|
else {
|
||||||
PlIOError(DOMAIN_ERROR_IO_MODE, tmode, "access_file/2");
|
Yap_Error(DOMAIN_ERROR_IO_MODE, tmode, "access_file/2");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
if (access(ares, mode) < 0) {
|
if (access(ares, mode) < 0) {
|
||||||
/* ignore errors while checking a file */
|
/* ignore errors while checking a file */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return true;
|
||||||
}
|
}
|
||||||
#elif HAVE_STAT
|
#elif HAVE_STAT
|
||||||
{
|
{
|
||||||
@ -435,7 +432,7 @@ exists_directory(USES_REGS1)
|
|||||||
file_name = RepAtom(AtomOfTerm(tname))->StrOfAE;
|
file_name = RepAtom(AtomOfTerm(tname))->StrOfAE;
|
||||||
if (SYSTEM_STAT(file_name, &ss) != 0) {
|
if (SYSTEM_STAT(file_name, &ss) != 0) {
|
||||||
/* ignore errors while checking a file */
|
/* ignore errors while checking a file */
|
||||||
return FALSE;
|
return false;
|
||||||
}
|
}
|
||||||
return (S_ISDIR(ss.st_mode));
|
return (S_ISDIR(ss.st_mode));
|
||||||
#else
|
#else
|
||||||
@ -621,7 +618,7 @@ Yap_InitFiles( void )
|
|||||||
Yap_InitCPred ("file_directory_name", 2, file_directory_name, SafePredFlag);
|
Yap_InitCPred ("file_directory_name", 2, file_directory_name, SafePredFlag);
|
||||||
Yap_InitCPred ("is_absolute_file_name", 1, is_absolute_file_name, SafePredFlag);
|
Yap_InitCPred ("is_absolute_file_name", 1, is_absolute_file_name, SafePredFlag);
|
||||||
Yap_InitCPred ("same_file", 2, same_file, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("same_file", 2, same_file, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("access_file", 2, access_file, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("$access_file", 2, access_file, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("access", 1, access_path, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("access", 1, access_path, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("exists_directory", 1, exists_directory, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("exists_directory", 1, exists_directory, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("exists_file", 1, exists_file, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("exists_file", 1, exists_file, SafePredFlag|SyncPredFlag);
|
||||||
|
Reference in New Issue
Block a user