* fbsd-nat.c: Include <sys/sysctl.h>.
(fbsd_pid_to_exec_file): Use KERN_PROC_PATHNAME sysctl if available. Plug memory leak. Fixes PR gdb/1922.
This commit is contained in:
parent
5308fd89d5
commit
68b9939aec
2 changed files with 28 additions and 9 deletions
|
@ -1,3 +1,9 @@
|
|||
2005-05-01 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* fbsd-nat.c: Include <sys/sysctl.h>.
|
||||
(fbsd_pid_to_exec_file): Use KERN_PROC_PATHNAME sysctl if
|
||||
available. Plug memory leak. Fixes PR gdb/1922.
|
||||
|
||||
2005-04-29 Mark Kettenis <kettenis@gnu.org>
|
||||
|
||||
* solist.h (TARGET_SO_FREE_SO, TARGET_SO_CLEAR_SOLIB)
|
||||
|
|
|
@ -27,8 +27,9 @@
|
|||
|
||||
#include "gdb_assert.h"
|
||||
#include "gdb_string.h"
|
||||
#include <sys/procfs.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/procfs.h>
|
||||
#include <sys/sysctl.h>
|
||||
|
||||
#include "elf-bfd.h"
|
||||
#include "fbsd-nat.h"
|
||||
|
@ -39,18 +40,30 @@
|
|||
char *
|
||||
fbsd_pid_to_exec_file (int pid)
|
||||
{
|
||||
size_t len = MAXPATHLEN;
|
||||
char *buf = xcalloc (len, sizeof (char));
|
||||
char *path;
|
||||
char *buf;
|
||||
|
||||
#ifdef KERN_PROC_PATHNAME
|
||||
int mib[4];
|
||||
|
||||
mib[0] = CTL_KERN;
|
||||
mib[1] = KERN_PROC;
|
||||
mib[2] = KERN_PROC_PATHNAME;
|
||||
mib[3] = pid;
|
||||
if (sysctl (mib, 4, buf, &len, NULL, 0) == 0)
|
||||
return buf;
|
||||
#endif
|
||||
|
||||
path = xstrprintf ("/proc/%d/file", pid);
|
||||
buf = xcalloc (MAXPATHLEN, sizeof (char));
|
||||
make_cleanup (xfree, path);
|
||||
make_cleanup (xfree, buf);
|
||||
if (readlink (path, buf, MAXPATHLEN) == -1)
|
||||
{
|
||||
xfree (buf);
|
||||
buf = NULL;
|
||||
}
|
||||
|
||||
if (readlink (path, buf, MAXPATHLEN) > 0)
|
||||
return buf;
|
||||
|
||||
return NULL;
|
||||
xfree (path);
|
||||
return buf;
|
||||
}
|
||||
|
||||
static int
|
||||
|
|
Loading…
Reference in a new issue