add tmp_file/2

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@2241 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc
2008-05-22 23:25:21 +00:00
parent 73cf1fbafa
commit a70fb91592
5 changed files with 83 additions and 7 deletions

View File

@@ -8,8 +8,11 @@
* *
**************************************************************************
* *
* $Id: sys.c,v 1.33 2007-10-05 18:24:30 vsc Exp $ *
* $Id: sys.c,v 1.34 2008-05-22 23:25:21 vsc Exp $ *
* mods: $Log: not supported by cvs2svn $
* mods: Revision 1.33 2007/10/05 18:24:30 vsc
* mods: fix garbage collector and fix LeaveGoal
* mods:
* mods: Revision 1.32 2007/05/07 12:11:39 vsc
* mods: fix mktime fix
* mods:
@@ -483,15 +486,49 @@ p_mktemp(void)
}
static int
p_tpmnam(void)
p_tmpnam(void)
{
#if HAVE_TMPNAM
return(YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom(tmpnam(NULL)))));
char buf[L_tmpnam], *s;
if (!(s = tmpnam(buf)))
return FALSE;
return YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom(s)));
#else
return FALSE;
#endif
}
static int
p_tmpdir(void)
{
char *s;
#if defined(__MINGW32__) || _MSC_VER
char buf[512];
DWORD out = GetTempPath(512, buf);
if (!out) {
return(YAP_Unify(YAP_ARG2, WinError()));
}
if (out > 511) {
nbuf = malloc(out+1);
if (!nbuf)
return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom("no malloc memory")));
out = GetTempPath(512, nbuf);
if (!out) {
return(YAP_Unify(YAP_ARG2, WinError()));
}
return YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom(nbuf)));
}
return YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom(buf)));
#else
if ((s = getenv("TMPDIR")))
return YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom(s)));
#ifdef P_tmpdir
return YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom(P_tmpdir)));
#endif
return YAP_Unify(YAP_ARG1,YAP_MkAtomTerm(YAP_LookupAtom("/tmp")));
#endif
}
/* return YAP's environment */
static int
p_environ(void)
@@ -1021,7 +1058,8 @@ init_sys(void)
YAP_UserCPredicate("pid", pid, 2);
YAP_UserCPredicate("kill", p_kill, 3);
YAP_UserCPredicate("mktemp", p_mktemp, 3);
YAP_UserCPredicate("tmpnam", p_tpmnam, 2);
YAP_UserCPredicate("tmpnam", p_tmpnam, 2);
YAP_UserCPredicate("tmpdir", p_tmpdir, 2);
YAP_UserCPredicate("rename_file", rename_file, 3);
YAP_UserCPredicate("sleep", p_sleep, 2);
YAP_UserCPredicate("error_message", error_message, 2);