Eli Zaretskii <e...@gnu.org> skribis: > commit 44f8eebf9850431790b23b031f5b6e90fb3de777 > Author: Eli Zaretskii <e...@gnu.org> > Date: Fri Jun 24 12:45:02 2016 +0300 > > Provide support for open-process and related functions on MS-Windows > > * libguile/w32-proc.c: New file, with MinGW support code for > scm_open_process, scm_getpriority, scm_setpriority, > scm_getaffinity, and scm_setaffinity. Also, provides macros that > on Posix hosts are in sys/wait.h, like WIFEXITED and WTERMSIG, and > simple definitions for getuid, getgid, setuid, setgid, and > waitpid.
This is a good idea (I cannot comment on the content of w32-proc.c since I’m not familiar with the Windows API, but I obviously trust you). > diff --git a/libguile/posix.c b/libguile/posix.c > index 2654716..35b920f 100644 > --- a/libguile/posix.c > +++ b/libguile/posix.c > @@ -84,6 +84,10 @@ > #if HAVE_SYS_WAIT_H > # include <sys/wait.h> > #endif > +#ifdef __MINGW32__ > +# include "w32-proc.c" > +#endif /* __MINGW32__ */ I’d have a slight preference for using AC_LIBSOURCE or a Makefile.am snippet to compile w32-proc.c separately (which means w32-proc.h should be added to provide declarations). However this shouldn’t be a blocker (if the current approach is kept, use <w32-proc.c> rather than "w32-proc.c"). > @@ -659,7 +663,7 @@ SCM_DEFINE (scm_kill, "kill", 2, 0, 0, > #else > /* Mingw has raise(), but not kill(). (Other raw DOS environments might > be similar.) Use raise() when the requested pid is our own process, > - otherwise bomb. */ > + otherwise TerminateProcess. */ > if (scm_to_int (pid) == getpid ()) > { > if (raise (scm_to_int (sig)) != 0) > @@ -673,6 +677,25 @@ SCM_DEFINE (scm_kill, "kill", 2, 0, 0, > goto err; > } > } > +#ifdef __MINGW32__ > + else > + { > + HANDLE ph = OpenProcess (PROCESS_TERMINATE, 0, scm_to_int (pid)); > + int s = scm_to_int (sig); > + > + if (!ph) > + { > + errno = EPERM; > + goto err; > + } > + if (!TerminateProcess (ph, w32_signal_to_status (s))) > + { > + errno = EINVAL; > + goto err; > + } > + CloseHandle (ph); > + } > +#endif /* __MINGW32__ */ > #endif > return SCM_UNSPECIFIED; For consistency maybe this should go in a ‘kill’ function in w32-proc.c? The rest looks good to me. Thanks a lot for taking the time to update the patch, and for forgiving our failure to handle it earlier. Ludo’.