diff options
author | Christopher Faylor <me@cgf.cx> | 2002-01-29 02:02:03 +0000 |
---|---|---|
committer | Christopher Faylor <me@cgf.cx> | 2002-01-29 02:02:03 +0000 |
commit | 494a66d9c5799091ccefcfd2f3d22226b16f4c38 (patch) | |
tree | bbcd6f02ad3860e2cfb35b6065c2beec2bfd5e88 /winsup/cygwin/external.cc | |
parent | a489b37643af9b02d8a31b0e584713f90bbd9ba7 (diff) | |
download | cygnal-494a66d9c5799091ccefcfd2f3d22226b16f4c38.tar.gz cygnal-494a66d9c5799091ccefcfd2f3d22226b16f4c38.tar.bz2 cygnal-494a66d9c5799091ccefcfd2f3d22226b16f4c38.zip |
* 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.cc | 32 |
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; } |