* win32-nat.c (child_pid_to_exec_file): New function.

(init_child_ops): Add child_pid_to_exec_file as to_pid_to_exec_file
	functionality.
This commit is contained in:
Corinna Vinschen 2004-06-29 15:37:31 +00:00
parent f03b584349
commit 47216e5118
3 changed files with 68 additions and 0 deletions

View file

@ -1,3 +1,9 @@
2004-06-29 Corinna Vinschen <vinschen@redhat.com>
* win32-nat.c (child_pid_to_exec_file): New function.
(init_child_ops): Add child_pid_to_exec_file as to_pid_to_exec_file
functionality.
2004-06-28 Andrew Cagney <cagney@gnu.org>
* defs.h (xstrvprintf): Declare.

View file

@ -1656,6 +1656,36 @@ child_detach (char *args, int from_tty)
unpush_target (&child_ops);
}
char *
child_pid_to_exec_file (int pid)
{
/* Try to find the process path using the Cygwin internal process list
pid isn't a valid pid, unfortunately. Use current_event.dwProcessId
instead. */
/* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */
static char path[MAX_PATH + 1];
char *path_ptr = NULL;
int cpid;
struct external_pinfo *pinfo;
cygwin_internal (CW_LOCK_PINFO, 1000);
for (cpid = 0;
(pinfo = (struct external_pinfo *)
cygwin_internal (CW_GETPINFO, cpid | CW_NEXTPID));
cpid = pinfo->pid)
{
if (pinfo->dwProcessId == current_event.dwProcessId) /* Got it */
{
cygwin_conv_to_full_posix_path (pinfo->progname, path);
path_ptr = path;
break;
}
}
cygwin_internal (CW_UNLOCK_PINFO);
return path_ptr;
}
/* Print status information about what we're accessing. */
static void
@ -2078,6 +2108,7 @@ init_child_ops (void)
child_ops.to_has_registers = 1;
child_ops.to_has_execution = 1;
child_ops.to_magic = OPS_MAGIC;
child_ops.to_pid_to_exec_file = child_pid_to_exec_file;
}
void

View file

@ -1656,6 +1656,36 @@ child_detach (char *args, int from_tty)
unpush_target (&child_ops);
}
char *
child_pid_to_exec_file (int pid)
{
/* Try to find the process path using the Cygwin internal process list
pid isn't a valid pid, unfortunately. Use current_event.dwProcessId
instead. */
/* TODO: Also find native Windows processes using CW_GETPINFO_FULL. */
static char path[MAX_PATH + 1];
char *path_ptr = NULL;
int cpid;
struct external_pinfo *pinfo;
cygwin_internal (CW_LOCK_PINFO, 1000);
for (cpid = 0;
(pinfo = (struct external_pinfo *)
cygwin_internal (CW_GETPINFO, cpid | CW_NEXTPID));
cpid = pinfo->pid)
{
if (pinfo->dwProcessId == current_event.dwProcessId) /* Got it */
{
cygwin_conv_to_full_posix_path (pinfo->progname, path);
path_ptr = path;
break;
}
}
cygwin_internal (CW_UNLOCK_PINFO);
return path_ptr;
}
/* Print status information about what we're accessing. */
static void
@ -2078,6 +2108,7 @@ init_child_ops (void)
child_ops.to_has_registers = 1;
child_ops.to_has_execution = 1;
child_ops.to_magic = OPS_MAGIC;
child_ops.to_pid_to_exec_file = child_pid_to_exec_file;
}
void