win32: unicode and small fixes
This commit is contained in:
parent
b932008946
commit
6462a09e59
60
C/sysbits.c
60
C/sysbits.c
@ -1328,6 +1328,8 @@ SearchForTrailFault(void *ptr, int sure)
|
|||||||
static void
|
static void
|
||||||
HandleSIGSEGV(int sig, void *sipv, void *uap)
|
HandleSIGSEGV(int sig, void *sipv, void *uap)
|
||||||
{
|
{
|
||||||
|
CACHE_REGS
|
||||||
|
|
||||||
void *ptr = TR;
|
void *ptr = TR;
|
||||||
int sure = FALSE;
|
int sure = FALSE;
|
||||||
if (LOCAL_PrologMode & ExtendStackMode) {
|
if (LOCAL_PrologMode & ExtendStackMode) {
|
||||||
@ -1444,9 +1446,7 @@ my_signal(int sig, void (*handler)(int, void *, void *))
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
my_signal_info(sig, handler)
|
my_signal_info(int sig, void (*handler)(int, void *, void *))
|
||||||
int sig;
|
|
||||||
void (*handler)(int, void *, void *);
|
|
||||||
{
|
{
|
||||||
if(signal(sig, (void *)handler) == SIG_ERR)
|
if(signal(sig, (void *)handler) == SIG_ERR)
|
||||||
exit(1);
|
exit(1);
|
||||||
@ -1703,17 +1703,11 @@ InitSignals (void)
|
|||||||
#ifdef HAVE_SIGFPE
|
#ifdef HAVE_SIGFPE
|
||||||
my_signal (SIGFPE, HandleMatherr);
|
my_signal (SIGFPE, HandleMatherr);
|
||||||
#endif
|
#endif
|
||||||
#if HAVE_SIGSEGV && !defined(THREADS)
|
#if HAVE_SIGSEGV
|
||||||
my_signal_info (SIGSEGV, HandleSIGSEGV);
|
my_signal_info (SIGSEGV, HandleSIGSEGV);
|
||||||
#endif
|
#endif
|
||||||
#ifdef YAPOR_COW
|
#ifdef YAPOR_COW
|
||||||
signal(SIGCHLD, SIG_IGN); /* avoid ghosts */
|
signal(SIGCHLD, SIG_IGN); /* avoid ghosts */
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
#if OS_HANDLES_TR_OVERFLOW
|
|
||||||
#if HAVE_SIGSEGV && !defined(THREADS)
|
|
||||||
my_signal_info (SIGSEGV, HandleSIGSEGV);
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2144,7 +2138,49 @@ Run an external command and wait for its completion.
|
|||||||
static Int
|
static Int
|
||||||
p_system ( USES_REGS1 )
|
p_system ( USES_REGS1 )
|
||||||
{ /* '$system'(+SystCommand) */
|
{ /* '$system'(+SystCommand) */
|
||||||
#ifdef HAVE_SYSTEM
|
#if _MSC_VER || defined(__MINGW32__)
|
||||||
|
/** shell(+Command:text, -Status:integer) is det.
|
||||||
|
|
||||||
|
Run an external command and wait for its completion.
|
||||||
|
*/
|
||||||
|
char *cmd;
|
||||||
|
term_t A1 = Yap_InitSlot(ARG1 PASS_REGS);
|
||||||
|
if ( PL_get_chars(A1, &cmd, CVT_ALL|REP_FN|CVT_EXCEPTION) )
|
||||||
|
{ STARTUPINFO si;
|
||||||
|
PROCESS_INFORMATION pi;
|
||||||
|
|
||||||
|
ZeroMemory( &si, sizeof(si) );
|
||||||
|
si.cb = sizeof(si);
|
||||||
|
ZeroMemory( &pi, sizeof(pi) );
|
||||||
|
|
||||||
|
// Start the child process.
|
||||||
|
if( !CreateProcess( NULL, // No module name (use command line)
|
||||||
|
cmd, // Command line
|
||||||
|
NULL, // Process handle not inheritable
|
||||||
|
NULL, // Thread handle not inheritable
|
||||||
|
FALSE, // Set handle inheritance to FALSE
|
||||||
|
0, // No creation flags
|
||||||
|
NULL, // Use parent's environment block
|
||||||
|
NULL, // Use parent's starting directory
|
||||||
|
&si, // Pointer to STARTUPINFO structure
|
||||||
|
&pi ) // Pointer to PROCESS_INFORMATION structure
|
||||||
|
)
|
||||||
|
{
|
||||||
|
Yap_Error( SYSTEM_ERROR, ARG1, "CreateProcess failed (%d).\n", GetLastError() );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
// Wait until child process exits.
|
||||||
|
WaitForSingleObject( pi.hProcess, INFINITE );
|
||||||
|
|
||||||
|
// Close process and thread handles.
|
||||||
|
CloseHandle( pi.hProcess );
|
||||||
|
CloseHandle( pi.hThread );
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
return FALSE;
|
||||||
|
#elif HAVE_SYSTEM
|
||||||
Term t1 = Deref (ARG1);
|
Term t1 = Deref (ARG1);
|
||||||
char *s;
|
char *s;
|
||||||
|
|
||||||
@ -2971,7 +3007,7 @@ Yap_InitSysPreds(void)
|
|||||||
Yap_InitCPred ("srandom", 1, p_srandom, SafePredFlag);
|
Yap_InitCPred ("srandom", 1, p_srandom, SafePredFlag);
|
||||||
Yap_InitCPred ("sh", 0, p_sh, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("sh", 0, p_sh, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("$shell", 1, p_shell, SafePredFlag|SyncPredFlag|UserCPredFlag);
|
Yap_InitCPred ("$shell", 1, p_shell, SafePredFlag|SyncPredFlag|UserCPredFlag);
|
||||||
Yap_InitCPred ("system", 1, p_system, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("system", 1, p_system, SafePredFlag|SyncPredFlag|UserCPredFlag);
|
||||||
Yap_InitCPred ("rename", 2, p_mv, SafePredFlag|SyncPredFlag);
|
Yap_InitCPred ("rename", 2, p_mv, SafePredFlag|SyncPredFlag);
|
||||||
Yap_InitCPred ("$yap_home", 1, p_yap_home, SafePredFlag);
|
Yap_InitCPred ("$yap_home", 1, p_yap_home, SafePredFlag);
|
||||||
Yap_InitCPred ("$yap_paths", 3, p_yap_paths, SafePredFlag);
|
Yap_InitCPred ("$yap_paths", 3, p_yap_paths, SafePredFlag);
|
||||||
|
@ -23,6 +23,9 @@
|
|||||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define _UNICODE 1
|
||||||
|
#define UNICODE 1
|
||||||
|
|
||||||
#define WINDOWS_LEAN_AND_MEAN 1
|
#define WINDOWS_LEAN_AND_MEAN 1
|
||||||
#if (_MSC_VER >= 1300) || defined(__MINGW32__)
|
#if (_MSC_VER >= 1300) || defined(__MINGW32__)
|
||||||
#include <winsock2.h> /* Needed on VC8 */
|
#include <winsock2.h> /* Needed on VC8 */
|
||||||
|
@ -49,7 +49,7 @@ LIBS=-lgdi32 -lcomdlg32
|
|||||||
all: ../../plterm.dll
|
all: ../../plterm.dll
|
||||||
|
|
||||||
../../plterm.dll: libplterm.a
|
../../plterm.dll: libplterm.a
|
||||||
$(CC) $(CFLAGS) -shared -o ../../plterm.dll \
|
$(CC) -municode $(CFLAGS) -shared -o ../../plterm.dll \
|
||||||
-Wl,--export-all-symbols \
|
-Wl,--export-all-symbols \
|
||||||
-Wl,--enable-auto-import \
|
-Wl,--enable-auto-import \
|
||||||
-Wl,--whole-archive libplterm.a \
|
-Wl,--whole-archive libplterm.a \
|
||||||
|
Reference in New Issue
Block a user