This commit is contained in:
Vitor Santos Costa 2016-07-31 10:26:36 -05:00
parent 9ad6bc3120
commit 0c305e8ce3

View File

@ -13,10 +13,22 @@
* * * *
*************************************************************************/ *************************************************************************/
#include "config.h"
#include "YapInterface.h" #include "YapInterface.h"
#include "crypto/md5.h" #include "config.h"
#include <stdlib.h> #include <stdlib.h>
#if __ANDROID__
#include <android/asset_manager.h>
#include <android/asset_manager_jni.h>
#include <android/log.h>
#include <jni.h>
#endif
#include "YapStreams.h"
#include "VFS.h"
#include "crypto/md5.h"
#if HAVE_UNISTD_H #if HAVE_UNISTD_H
#include <unistd.h> #include <unistd.h>
#endif #endif
@ -58,9 +70,9 @@
#include <direct.h> #include <direct.h>
#endif #endif
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
#include <windows.h>
#include <process.h>
#include <io.h> #include <io.h>
#include <process.h>
#include <windows.h>
#endif #endif
#ifdef __MINGW32__ #ifdef __MINGW32__
#ifdef HAVE_ENVIRON #ifdef HAVE_ENVIRON
@ -76,23 +88,18 @@
void init_sys(void); void init_sys(void);
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
static YAP_Term static YAP_Term WinError(void) {
WinError(void)
{
char msg[256]; char msg[256];
/* Error, we could not read time */ /* Error, we could not read time */
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS,
NULL, GetLastError(), NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), msg, 256, msg, 256, NULL);
NULL);
return (YAP_MkAtomTerm(YAP_LookupAtom(msg))); return (YAP_MkAtomTerm(YAP_LookupAtom(msg)));
} }
#endif #endif
/* Return time in a structure */ /* Return time in a structure */
static YAP_Bool static YAP_Bool sysmktime(void) {
sysmktime(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
SYSTEMTIME stime, stime0; SYSTEMTIME stime, stime0;
@ -120,8 +127,11 @@ sysmktime(void)
} }
#if __GNUC__ #if __GNUC__
{ {
unsigned long long f1 = (((unsigned long long)ftime.dwHighDateTime)<<32)+(unsigned long long)ftime.dwLowDateTime; unsigned long long f1 = (((unsigned long long)ftime.dwHighDateTime) << 32) +
unsigned long long f0 = (((unsigned long long)ftime0.dwHighDateTime)<<32)+(unsigned long long)ftime0.dwLowDateTime; (unsigned long long)ftime.dwLowDateTime;
unsigned long long f0 =
(((unsigned long long)ftime0.dwHighDateTime) << 32) +
(unsigned long long)ftime0.dwLowDateTime;
return YAP_Unify(YAP_ARG7, YAP_MkIntTerm((long int)((f1 - f0) / 10000000))); return YAP_Unify(YAP_ARG7, YAP_MkIntTerm((long int)((f1 - f0) / 10000000)));
} }
#else #else
@ -151,9 +161,7 @@ sysmktime(void)
} }
/* Return time in a structure */ /* Return time in a structure */
static YAP_Bool static YAP_Bool datime(void) {
datime(void)
{
YAP_Term tf, out[6]; YAP_Term tf, out[6];
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
SYSTEMTIME stime; SYSTEMTIME stime;
@ -196,9 +204,7 @@ datime(void)
#define BUF_SIZE 1024 #define BUF_SIZE 1024
/* Return a list of files for a directory */ /* Return a list of files for a directory */
static YAP_Bool static YAP_Bool list_directory(void) {
list_directory(void)
{
YAP_Term tf = YAP_MkAtomTerm(YAP_LookupAtom("[]")); YAP_Term tf = YAP_MkAtomTerm(YAP_LookupAtom("[]"));
long sl = YAP_InitSlot(tf); long sl = YAP_InitSlot(tf);
@ -222,7 +228,8 @@ list_directory(void)
if ((hFile = _findfirst(bs, &c_file)) == -1L) { if ((hFile = _findfirst(bs, &c_file)) == -1L) {
return (YAP_Unify(YAP_ARG2, tf)); return (YAP_Unify(YAP_ARG2, tf));
} }
YAP_PutInSlot(sl, YAP_MkPairTerm(YAP_MkAtomTerm(YAP_LookupAtom(c_file.name)), YAP_GetFromSlot(sl))); YAP_PutInSlot(sl, YAP_MkPairTerm(YAP_MkAtomTerm(YAP_LookupAtom(c_file.name)),
YAP_GetFromSlot(sl)));
while (_findnext(hFile, &c_file) == 0) { while (_findnext(hFile, &c_file) == 0) {
YAP_Term ti = YAP_MkAtomTerm(YAP_LookupAtom(c_file.name)); YAP_Term ti = YAP_MkAtomTerm(YAP_LookupAtom(c_file.name));
YAP_PutInSlot(sl, YAP_MkPairTerm(ti, YAP_GetFromSlot(sl))); YAP_PutInSlot(sl, YAP_MkPairTerm(ti, YAP_GetFromSlot(sl)));
@ -231,9 +238,8 @@ list_directory(void)
#else #else
#if __ANDROID__ #if __ANDROID__
{ {
extern AAssetManager *Yap_assetManager;
const char *dirName = buf + strlen("/assets/"); const char *dirName = buf + strlen("/assets/");
AAssetManager* mgr = Yap_assetManager; AAssetManager *mgr = GLOBAL_VFS->priv[0].mgr;
AAssetDir *de; AAssetDir *de;
const char *dp; const char *dp;
@ -267,9 +273,7 @@ list_directory(void)
return YAP_Unify(YAP_ARG2, tf); return YAP_Unify(YAP_ARG2, tf);
} }
static YAP_Bool static YAP_Bool p_unlink(void) {
p_unlink(void)
{
char *fd = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)); char *fd = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
if (_unlink(fd) == -1) if (_unlink(fd) == -1)
@ -283,9 +287,7 @@ p_unlink(void)
return (TRUE); return (TRUE);
} }
static YAP_Bool static YAP_Bool p_rmdir(void) {
p_rmdir(void)
{
char *fd = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)); char *fd = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
if (_rmdir(fd) == -1) { if (_rmdir(fd) == -1) {
@ -298,9 +300,7 @@ p_rmdir(void)
return (TRUE); return (TRUE);
} }
static YAP_Bool static YAP_Bool rename_file(void) {
rename_file(void)
{
char *s1 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)); char *s1 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
char *s2 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2)); char *s2 = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG2));
#if HAVE_RENAME #if HAVE_RENAME
@ -312,15 +312,11 @@ rename_file(void)
return (TRUE); return (TRUE);
} }
static YAP_Bool static YAP_Bool dir_separator(void) {
dir_separator(void)
{
return (YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom("/")))); return (YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom("/"))));
} }
static YAP_Bool static YAP_Bool file_property(void) {
file_property(void)
{
const char *fd; const char *fd;
#if HAVE_LSTAT #if HAVE_LSTAT
struct stat buf; struct stat buf;
@ -390,18 +386,14 @@ file_property(void)
return (FALSE); return (FALSE);
} }
#endif #endif
return ( return (YAP_Unify(YAP_ARG3, YAP_MkIntTerm(buf.st_size)) &&
YAP_Unify(YAP_ARG3, YAP_MkIntTerm(buf.st_size)) &&
YAP_Unify(YAP_ARG4, YAP_MkIntTerm(buf.st_mtime)) && YAP_Unify(YAP_ARG4, YAP_MkIntTerm(buf.st_mtime)) &&
YAP_Unify(YAP_ARG5, YAP_MkIntTerm(buf.st_mode)) YAP_Unify(YAP_ARG5, YAP_MkIntTerm(buf.st_mode)));
);
} }
/* temporary files */ /* temporary files */
static YAP_Bool static YAP_Bool p_mktemp(void) {
p_mktemp(void)
{
#if HAVE_MKSTEMP || HAVE_MKTEMP || defined(__MINGW32__) || _MSC_VER #if HAVE_MKSTEMP || HAVE_MKTEMP || defined(__MINGW32__) || _MSC_VER
char *s, tmp[BUF_SIZE]; char *s, tmp[BUF_SIZE];
s = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)); s = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
@ -436,9 +428,7 @@ p_mktemp(void)
return (TRUE); return (TRUE);
} }
static YAP_Bool static YAP_Bool p_tmpnam(void) {
p_tmpnam(void)
{
#if HAVE_MKSTEMP #if HAVE_MKSTEMP
char s[21]; char s[21];
strcpy(s, "/tmp/YAP_tmpXXXXXXXX"); strcpy(s, "/tmp/YAP_tmpXXXXXXXX");
@ -460,9 +450,7 @@ p_tmpnam(void)
#endif #endif
} }
static YAP_Bool static YAP_Bool p_tmpdir(void) {
p_tmpdir(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
char buf[512]; char buf[512];
DWORD out = GetTempPath(512, buf); DWORD out = GetTempPath(512, buf);
@ -472,7 +460,8 @@ p_tmpdir(void)
if (out > 511) { if (out > 511) {
char *nbuf = malloc(out + 1); char *nbuf = malloc(out + 1);
if (!nbuf) if (!nbuf)
return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom("no malloc memory"))); return YAP_Unify(YAP_ARG2,
YAP_MkAtomTerm(YAP_LookupAtom("no malloc memory")));
out = GetTempPath(512, nbuf); out = GetTempPath(512, nbuf);
if (!out) { if (!out) {
return YAP_Unify(YAP_ARG2, WinError()); return YAP_Unify(YAP_ARG2, WinError());
@ -492,9 +481,7 @@ p_tmpdir(void)
} }
/* return YAP's environment */ /* return YAP's environment */
static YAP_Bool static YAP_Bool p_environ(void) {
p_environ(void)
{
#if HAVE_ENVIRON && 0 #if HAVE_ENVIRON && 0
#if HAVE__NSGETENVIRON #if HAVE__NSGETENVIRON
char **ptr = _NSGetEnviron(); char **ptr = _NSGetEnviron();
@ -522,9 +509,7 @@ p_environ(void)
} }
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
static HANDLE static HANDLE get_handle(YAP_Term ti, DWORD fd) {
get_handle(YAP_Term ti, DWORD fd)
{
if (YAP_IsAtomTerm(ti)) { if (YAP_IsAtomTerm(ti)) {
HANDLE out; HANDLE out;
SECURITY_ATTRIBUTES satt; SECURITY_ATTRIBUTES satt;
@ -532,25 +517,19 @@ get_handle(YAP_Term ti, DWORD fd)
satt.nLength = sizeof(satt); satt.nLength = sizeof(satt);
satt.lpSecurityDescriptor = NULL; satt.lpSecurityDescriptor = NULL;
satt.bInheritHandle = TRUE; satt.bInheritHandle = TRUE;
out = CreateFile("NUL", out = CreateFile("NUL", GENERIC_READ | GENERIC_WRITE,
GENERIC_READ|GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &satt, OPEN_EXISTING,
FILE_SHARE_READ|FILE_SHARE_WRITE, 0, NULL);
&satt,
OPEN_EXISTING,
0,
NULL);
return (out); return (out);
} else { } else {
if (YAP_IsIntTerm(ti)) { if (YAP_IsIntTerm(ti)) {
return (GetStdHandle(fd)); return (GetStdHandle(fd));
} else } else
return((HANDLE)YAP_StreamToFileNo(ti)); return ((HANDLE)_get_osfhandle(YAP_StreamToFileNo(ti)));
} }
} }
static void static void close_handle(YAP_Term ti, HANDLE h) {
close_handle(YAP_Term ti, HANDLE h)
{
if (YAP_IsAtomTerm(ti)) { if (YAP_IsAtomTerm(ti)) {
CloseHandle(h); CloseHandle(h);
} }
@ -559,9 +538,7 @@ close_handle(YAP_Term ti, HANDLE h)
#endif #endif
/* execute a command as a detached process */ /* execute a command as a detached process */
static YAP_Bool static YAP_Bool execute_command(void) {
execute_command(void)
{
YAP_Term ti = YAP_ARG2, to = YAP_ARG3, te = YAP_ARG4; YAP_Term ti = YAP_ARG2, to = YAP_ARG3, te = YAP_ARG4;
int res; int res;
YAP_Term AtomNull = YAP_MkAtomTerm(YAP_LookupAtom("null")); YAP_Term AtomNull = YAP_MkAtomTerm(YAP_LookupAtom("null"));
@ -601,15 +578,8 @@ execute_command(void)
StartupInfo.hStdOutput = outf; StartupInfo.hStdOutput = outf;
StartupInfo.hStdError = errf; StartupInfo.hStdError = errf;
/* got stdin, stdout and error as I like it */ /* got stdin, stdout and error as I like it */
if (CreateProcess(NULL, if (CreateProcess(NULL, (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), NULL,
(char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)), NULL, TRUE, CreationFlags, NULL, NULL, &StartupInfo,
NULL,
NULL,
TRUE,
CreationFlags,
NULL,
NULL,
&StartupInfo,
&ProcessInformation) == FALSE) { &ProcessInformation) == FALSE) {
close_handle(ti, inpf); close_handle(ti, inpf);
close_handle(to, outf); close_handle(to, outf);
@ -657,7 +627,8 @@ execute_command(void)
} }
if (outf < 0) { if (outf < 0) {
/* return an error number */ /* return an error number */
if (inpf != 0) close(inpf); if (inpf != 0)
close(inpf);
return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno))); return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
} }
/* then error stream */ /* then error stream */
@ -676,17 +647,22 @@ execute_command(void)
} }
if (errf < 0) { if (errf < 0) {
/* return an error number */ /* return an error number */
if (inpf != 0) close(inpf); if (inpf != 0)
if (outf != 1) close(outf); close(inpf);
if (outf != 1)
close(outf);
return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno))); return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
} }
YAP_FlushAllStreams(); YAP_FlushAllStreams();
/* we are now ready to fork */ /* we are now ready to fork */
if ((res = fork()) < 0) { if ((res = fork()) < 0) {
/* close streams we don't need */ /* close streams we don't need */
if (inpf != 0) close(inpf); if (inpf != 0)
if (outf != 1) close(outf); close(inpf);
if (errf != 2) close(errf); if (outf != 1)
close(outf);
if (errf != 2)
close(errf);
/* return an error number */ /* return an error number */
return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno))); return (YAP_Unify(YAP_ARG6, YAP_MkIntTerm(errno)));
} else if (res == 0) { } else if (res == 0) {
@ -721,18 +697,19 @@ execute_command(void)
exit(127); exit(127);
/* we have the streams where we want them, just want to execute now */ /* we have the streams where we want them, just want to execute now */
} else { } else {
if (inpf != 0) close(inpf); if (inpf != 0)
if (outf != 1) close(outf); close(inpf);
if (errf != 2) close(errf); if (outf != 1)
close(outf);
if (errf != 2)
close(errf);
return (YAP_Unify(YAP_ARG5, YAP_MkIntTerm(res))); return (YAP_Unify(YAP_ARG5, YAP_MkIntTerm(res)));
} }
#endif /* UNIX code */ #endif /* UNIX code */
} }
/* execute a command as a detached process */ /* execute a command as a detached process */
static YAP_Bool static YAP_Bool do_system(void) {
do_system(void)
{
char *command = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1)); char *command = (char *)YAP_AtomName(YAP_AtomOfTerm(YAP_ARG1));
#if HAVE_SYSTEM #if HAVE_SYSTEM
int sys = system(command); int sys = system(command);
@ -741,17 +718,14 @@ do_system(void)
} }
return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(sys)); return YAP_Unify(YAP_ARG2, YAP_MkIntTerm(sys));
#else #else
YAP_Error(0,0L,"system not available in this configuration, trying %s", command); YAP_Error(0, 0L, "system not available in this configuration, trying %s",
command);
return FALSE; return FALSE;
#endif #endif
} }
/* execute a command as a detached process */ /* execute a command as a detached process */
static YAP_Bool static YAP_Bool do_shell(void) {
do_shell(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
YAP_Error(0, 0L, "system not available in this configuration"); YAP_Error(0, 0L, "system not available in this configuration");
return (FALSE); return (FALSE);
@ -807,9 +781,7 @@ do_shell(void)
} }
/* execute a command as a detached process */ /* execute a command as a detached process */
static YAP_Bool static YAP_Bool plwait(void) {
plwait(void)
{
long int pid = YAP_IntOfTerm(YAP_ARG1); long int pid = YAP_IntOfTerm(YAP_ARG1);
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
HANDLE proc = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE, FALSE, pid); HANDLE proc = OpenProcess(STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE, FALSE, pid);
@ -851,9 +823,7 @@ plwait(void)
#endif #endif
} }
static YAP_Bool static YAP_Bool p_sleep(void) {
p_sleep(void)
{
YAP_Term ts = YAP_ARG1; YAP_Term ts = YAP_ARG1;
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
{ {
@ -922,9 +892,7 @@ p_sleep(void)
/* host info */ /* host info */
static YAP_Bool static YAP_Bool host_name(void) {
host_name(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
char name[MAX_COMPUTERNAME_LENGTH + 1]; char name[MAX_COMPUTERNAME_LENGTH + 1];
DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1; DWORD nSize = MAX_COMPUTERNAME_LENGTH + 1;
@ -943,9 +911,7 @@ host_name(void)
return (YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(name)))); return (YAP_Unify(YAP_ARG1, YAP_MkAtomTerm(YAP_LookupAtom(name))));
} }
static YAP_Bool static YAP_Bool host_id(void) {
host_id(void)
{
#if HAVE_GETHOSTID #if HAVE_GETHOSTID
return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(gethostid()))); return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(gethostid())));
#else #else
@ -953,9 +919,7 @@ host_id(void)
#endif #endif
} }
static YAP_Bool static YAP_Bool pid(void) {
pid(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(_getpid()))); return (YAP_Unify(YAP_ARG1, YAP_MkIntTerm(_getpid())));
#else #else
@ -963,9 +927,7 @@ pid(void)
#endif #endif
} }
static YAP_Bool static YAP_Bool win(void) {
win(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
return (TRUE); return (TRUE);
#else #else
@ -973,14 +935,13 @@ win(void)
#endif #endif
} }
static YAP_Bool static YAP_Bool p_kill(void) {
p_kill(void)
{
#if defined(__MINGW32__) || _MSC_VER #if defined(__MINGW32__) || _MSC_VER
/* Windows does not support cross-process signals, so we shall do the /* Windows does not support cross-process signals, so we shall do the
SICStus thing and assume that a signal to a process will SICStus thing and assume that a signal to a process will
always kill it */ always kill it */
HANDLE proc = OpenProcess(STANDARD_RIGHTS_REQUIRED|PROCESS_TERMINATE, FALSE, YAP_IntOfTerm(YAP_ARG1)); HANDLE proc = OpenProcess(STANDARD_RIGHTS_REQUIRED | PROCESS_TERMINATE, FALSE,
YAP_IntOfTerm(YAP_ARG1));
if (proc == NULL) { if (proc == NULL) {
return (YAP_Unify(YAP_ARG3, WinError())); return (YAP_Unify(YAP_ARG3, WinError()));
} }
@ -1010,16 +971,13 @@ p_kill(void)
* *
* @return whether ARG1's md5 unifies with the difference liat. * @return whether ARG1's md5 unifies with the difference liat.
*/ */
static YAP_Bool static YAP_Bool md5(void) {
md5(void)
{
unsigned char buf[64]; unsigned char buf[64];
md5_state_t pms; md5_state_t pms;
const char *s; const char *s;
size_t len = -1; size_t len = -1;
if ( ! (s = YAP_StringToBuffer( YAP_ARG1 , NULL, len )) || if (!(s = YAP_StringToBuffer(YAP_ARG1, NULL, len)) || s[0] == 0)
s[0] == 0)
return false; return false;
md5_init(&pms); md5_init(&pms);
@ -1028,8 +986,7 @@ p_kill(void)
// free((void *)s); // free((void *)s);
YAP_Term t = YAP_ARG3; YAP_Term t = YAP_ARG3;
int i = 16; int i = 16;
while (i > 0) while (i > 0) {
{
int top, bop; int top, bop;
i--; i--;
top = buf[i] >> 4; top = buf[i] >> 4;
@ -1048,18 +1005,15 @@ p_kill(void)
return YAP_Unify(YAP_ARG2, t); return YAP_Unify(YAP_ARG2, t);
} }
static YAP_Bool static YAP_Bool error_message(void) {
error_message(void)
{
#if HAVE_STRERROR #if HAVE_STRERROR
return YAP_Unify(YAP_ARG2,YAP_MkAtomTerm(YAP_LookupAtom(strerror(YAP_IntOfTerm(YAP_ARG1))))); return YAP_Unify(YAP_ARG2, YAP_MkAtomTerm(YAP_LookupAtom(
strerror(YAP_IntOfTerm(YAP_ARG1)))));
#else #else
return YAP_Unify(YAP_ARG2, YAP_ARG1); return YAP_Unify(YAP_ARG2, YAP_ARG1);
#endif #endif
} }
void void init_sys(void) {
init_sys(void)
{
#if HAVE_MKTIME #if HAVE_MKTIME
tzset(); tzset();
#endif #endif
@ -1095,10 +1049,8 @@ init_sys(void)
int WINAPI win_sys(HANDLE, DWORD, LPVOID); int WINAPI win_sys(HANDLE, DWORD, LPVOID);
int WINAPI win_sys(HANDLE hinst, DWORD reason, LPVOID reserved) int WINAPI win_sys(HANDLE hinst, DWORD reason, LPVOID reserved) {
{ switch (reason) {
switch (reason)
{
case DLL_PROCESS_ATTACH: case DLL_PROCESS_ATTACH:
break; break;
case DLL_PROCESS_DETACH: case DLL_PROCESS_DETACH:
@ -1111,4 +1063,3 @@ int WINAPI win_sys(HANDLE hinst, DWORD reason, LPVOID reserved)
return 1; return 1;
} }
#endif #endif