Welcome to mirror list, hosted at ThFree Co, Russian Federation.

cygwin.com/git/newlib-cygwin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristopher Faylor <me@cgf.cx>2006-05-24 20:50:50 +0400
committerChristopher Faylor <me@cgf.cx>2006-05-24 20:50:50 +0400
commit6265ac10be7c0df26a1f4193de8c16e9ca00b3c4 (patch)
tree23abc781649a151965fb8d2c9bc89b0f72447bfd
parent89af1688ef418fd52f6bfe505fc789c3fc981dba (diff)
* strace.cc (proc_child): Propagate return code from child process.
(dostrace): Ditto. (main): Ditto.
-rw-r--r--winsup/utils/ChangeLog6
-rw-r--r--winsup/utils/strace.cc15
2 files changed, 16 insertions, 5 deletions
diff --git a/winsup/utils/ChangeLog b/winsup/utils/ChangeLog
index cbfe9b5f9..f25ce4c43 100644
--- a/winsup/utils/ChangeLog
+++ b/winsup/utils/ChangeLog
@@ -1,3 +1,9 @@
+2006-05-24 Christopher Faylor <cgf@timesys.com>
+
+ * strace.cc (proc_child): Propagate return code from child process.
+ (dostrace): Ditto.
+ (main): Ditto.
+
2006-03-03 Christian Franke <franke@computer.org>
* regtool.cc (options): Add 'binary'.
diff --git a/winsup/utils/strace.cc b/winsup/utils/strace.cc
index 5347b7ab5..d8a2ed82b 100644
--- a/winsup/utils/strace.cc
+++ b/winsup/utils/strace.cc
@@ -588,9 +588,10 @@ handle_output_debug_string (DWORD id, LPVOID p, unsigned mask, FILE *ofile)
fflush (ofile);
}
-static void
+static DWORD
proc_child (unsigned mask, FILE *ofile, pid_t pid)
{
+ DWORD res = 0;
DEBUG_EVENT ev;
time_t cur_time, last_time;
@@ -640,6 +641,7 @@ proc_child (unsigned mask, FILE *ofile, pid_t pid)
break;
case EXIT_PROCESS_DEBUG_EVENT:
+ res = ev.u.ExitProcess.dwExitCode >> 8;
remove_child (ev.dwProcessId);
break;
case EXCEPTION_DEBUG_EVENT:
@@ -659,6 +661,8 @@ proc_child (unsigned mask, FILE *ofile, pid_t pid)
if (!processes)
break;
}
+
+ return res;
}
static void
@@ -676,16 +680,15 @@ dotoggle (pid_t pid)
return;
}
-static void
+static DWORD
dostrace (unsigned mask, FILE *ofile, pid_t pid, char **argv)
{
if (!pid)
create_child (argv);
else
attach_process (pid);
- proc_child (mask, ofile, pid);
- return;
+ return proc_child (mask, ofile, pid);
}
typedef struct tag_mask_mnemonic
@@ -1035,10 +1038,12 @@ character #%d.\n", optarg, (int) (endptr - optarg), endptr);
if (!ofile)
ofile = stdout;
+ DWORD res = 0;
if (toggle)
dotoggle (pid);
else
- dostrace (mask, ofile, pid, argv + optind);
+ res = dostrace (mask, ofile, pid, argv + optind);
+ return res;
}
#undef CloseHandle