Add wrappers for ExitProcess, TerminateProcess

Charles Wilson
Tue Oct 6 19:51:00 GMT 2009

Christopher Faylor wrote:
> On Tue, Oct 06, 2009 at 02:45:22PM -0400, Charles Wilson wrote:
>> Christopher Faylor wrote:
>>> Looks good with a minor kvetch: Could you use "bool" instead of "BOOL"
>>> for variables that don't have to be passed to a Windows function that
>>> takes a BOOL argument?
>> For the static function exit_process(), sure. But the argument list
>> accepted by cygwin_internal() should be C-compatible, shouldn't it? So,
>> how about the following?
> "bool" is C-compatible.  You just have to #include <stdbool.h> .

I keep forgetting about stdbool.

> But now that you mention it, I wonder if we really should have to
> require an #include <windows.h> to use this.  Maybe it should just
> be unsigned long.

I don't see that /that/ makes much difference. Some of the existing
cygwin_internal calls already expect DWORD argument (sure, you could
pass them as unsigned long instead).  Or

So, it's really a question of what do we want the user to have to
#include when they call, specifically, cygwin_internal(CW_EXIT_PROCESS,...).

Well, obviously, <sys/cygwin.h>.  They may or may not require <ntdef.h>
if they want to use pre-defined STATUS_* values.  But to me, the kicker
is: this is a wrapper/replacement for the w32 functions ExitProcess and
TerminateProcess. So...if someone *was* going to include <windows.h> in
order to call /those/ functions, I don't see why they'd object to doing
so to call the cygwin_internal(CW_EXIT_PROCESS,...) wrapper.

OTOH, this particular value is not even passed to those underlying w32
functions -- it's only used as part of the *cygwin* cygwin_internal
implementation.  Since we no longer pass a HANDLE to the
TerminateProcess wrapper, it does seem a bit icky to #include
<windows.h> only for a BOOL type that we don't even pass to the w32
functions.  Why should *cygwin* deliberately choose to use braindead w32
"types" when it doesn't need to?


Having said all that, I really don't care one way or the other. We have
three possibilities:

1) current iteration (BOOL in cygwin_internal coerced to bool for static
function exit_process)
2) use bool throughout, and expect caller to use C++ bool,
C99 bool, or stdbool.h bool.
3) use bool in static function exit_process, use unsigned long in
cygwin_internal and callers.

You guys pick one, and I'll do it that way.


More information about the Cygwin-patches mailing list