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>2002-01-29 05:02:03 +0300
committerChristopher Faylor <me@cgf.cx>2002-01-29 05:02:03 +0300
commit494a66d9c5799091ccefcfd2f3d22226b16f4c38 (patch)
treebbcd6f02ad3860e2cfb35b6065c2beec2bfd5e88 /winsup/cygwin/external.cc
parenta489b37643af9b02d8a31b0e584713f90bbd9ba7 (diff)
* external.cc (cygwin_internal): Initialize various internal settings if
required to allow use of some things from user loaded DLL. (CW_STRACE_ON): Add new feature. (CW_CYGWIN_PID_TO_WINPID): Ditto. * pinfo.cc (set_myself): Call "strace.hello" to initiate possible strace session. (pinfo::init): Guard against dereferencing uninitialized myself. * sigproc.cc (wait_sig): Call strace.hello() when __SIGTRACE "signal" received. * strace.cc (strace::hello): New method. * wincap.cc (wincapc::init): Avoid initializing if already initialized. * wincap.h (wincapc::wincapc): New method. * include/sys/cygwin.h: Add new CW_ enums. Kludge typedefs of {g,u}id_t if required. * strace.h (strace::hello): Declare new method.
Diffstat (limited to 'winsup/cygwin/external.cc')
-rw-r--r--winsup/cygwin/external.cc32
1 files changed, 32 insertions, 0 deletions
diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc
index 1589e92a1..8a9f3bf9b 100644
--- a/winsup/cygwin/external.cc
+++ b/winsup/cygwin/external.cc
@@ -26,6 +26,8 @@ details. */
#include "path.h"
#include "dtable.h"
#include "cygheap.h"
+#include "wincap.h"
+#include "heap.h"
static external_pinfo *
fillout_pinfo (pid_t pid, int winpid)
@@ -121,6 +123,16 @@ cygwin_internal (cygwin_getinfo_types t, ...)
{
va_list arg;
va_start (arg, t);
+ if (t != CW_USER_DATA)
+ {
+ wincap.init ();
+ if (!myself)
+ {
+ memory_init ();
+ malloc_init ();
+ set_myself (1);
+ }
+ }
switch (t)
{
@@ -194,6 +206,26 @@ cygwin_internal (cygwin_getinfo_types t, ...)
# undef cr
}
+ case CW_STRACE_ON:
+ {
+ pid_t pid = va_arg (arg, pid_t);
+ pinfo p (pid);
+ if (p)
+ {
+ sig_send (p, __SIGSTRACE);
+ return 0;
+ }
+ else
+ {
+ set_errno (ESRCH);
+ return (DWORD) -1;
+ }
+ }
+ case CW_CYGWIN_PID_TO_WINPID:
+ {
+ pinfo p (va_arg (arg, pid_t));
+ return p ? p->dwProcessId : 0;
+ }
default:
return (DWORD) -1;
}