This is the mail archive of the
cygwin-patches@cygwin.com
mailing list for the Cygwin project.
[PATCH] fixes incorrect exit status to windows process
- To: <cygwin-patches at cygwin dot com>
- Subject: [PATCH] fixes incorrect exit status to windows process
- From: "Jason Gouger" <cygwin at jason-gouger dot com>
- Date: Sun, 4 Mar 2001 20:26:22 -0800
Patch to fix the problem described below...
-----Original Message-----
From: Jason Gouger [mailto:cygwin@jason-gouger.com]
Sent: Tuesday, February 27, 2001 11:18 PM
To: cygwin-developers@cygwin.com
Subject: incorrect exit status from cygwin exec to windows process
There appears to be some error when a cygwin process exec's another cygwin
process, and returns the exit status to a windows process. The windows
process receives a return code of '131072'.
To reproduce the error, try the following:
1. Compile the "x.c" program below with a windows compiler, e.g. MSVC or
similar.
cl x.c
#include <stdio.h>
#include <process.h>
int main(int argc, char **argv) {
const char *cmdline = argv[1];
int ret_code;
printf("COMMAND LINE: (%s)\n", cmdline);
fflush(stdout); fflush(stderr);
ret_code = system(cmdline);
fflush(stdout); fflush(stderr);
printf("RETURN CODE: %d\n", ret_code);
fflush(stdout); fflush(stderr);
exit(ret_code);
}
2. From a cygwin shell (bash), type the following command:
./x.exe 'C:\cygwin\bin\bash -c /bin/date'
Results:
COMMAND LINE: (C:\cygwin\bin\bash.exe -c /bin/date)
Tue Feb 27 22:55:39 2001
RETURN CODE: 131072
3. Create a script, e.g.
echo /bin/date > x.sh
Run the command:
./x.exe 'C:\cygwin\bin\bash x.sh'
Results:
COMMAND LINE: (C:\cygwin\bin\bash.exe x.sh)
Tue Feb 27 22:58:34 2001
RETURN CODE: 0
4. Change the script to have an exec, e.g.
echo exec /bin/date > x.sh
Run the command:
./x.exe 'C:\cygwin\bin\bash x.sh'
Results:
COMMAND LINE: (C:\cygwin\bin\bash.exe x.sh)
Tue Feb 27 22:59:47 2001
RETURN CODE: 131072
2001-03-04 Jason Gouger <cygwin@jason-gouger.com>
* pinfo.cc (_pinfo::exit): Clear EXIT_REPARENTING if there is no parent process.
Index: pinfo.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/pinfo.cc,v
retrieving revision 1.41
diff -u -r1.41 pinfo.cc
--- pinfo.cc 2001/01/30 08:10:04 1.41
+++ pinfo.cc 2001/03/05 04:10:16
@@ -126,6 +126,12 @@
fill_rusage (&r, hMainProc);
add_rusage (&rusage_self, &r);
+ if (ppid == 1 && n & EXIT_REPARENTING)
+ {
+ sigproc_printf ("Clearing EXIT_REPARENTING on res, ppid == 1\n");
+ n &= ~EXIT_REPARENTING;
+ }
+
sigproc_printf ("Calling ExitProcess %d", n);
ExitProcess (n);
}