* 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:
Mark Kettenis 2005-05-01 10:06:12 +00:00
parent 5308fd89d5
commit 68b9939aec
2 changed files with 28 additions and 9 deletions

View File

@ -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)

View File

@ -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