From fd8d3cfeba44d7241f91aececbb52d07edaf24e8 Mon Sep 17 00:00:00 2001 From: Mathieu Parent Date: Mon, 14 Jan 2013 12:13:24 +0100 Subject: common: FreeBSD+kFreeBSD: Implement get_process_name (same as in Linux) Signed-off-by: Mathieu Parent (This used to be ctdb commit 258092aaf6b7a9bdc14f0fb35e8bd7f7dc742b3f) --- ctdb/common/system_freebsd.c | 16 +++++++++++++++- ctdb/common/system_kfreebsd.c | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/ctdb/common/system_freebsd.c b/ctdb/common/system_freebsd.c index 2fb3f45ebd..1ce9d3d16d 100644 --- a/ctdb/common/system_freebsd.c +++ b/ctdb/common/system_freebsd.c @@ -372,7 +372,21 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid) char *ctdb_get_process_name(pid_t pid) { - /* FIXME FreeBSD: get_process_name not implemented */ + char path[32]; + char buf[PATH_MAX]; + char *ptr; + int n; + + snprintf(path, sizeof(path), "/proc/%d/exe", pid); + n = readlink(path, buf, sizeof(buf)); + if (n < 0) { + return NULL; + } + + /* Remove any extra fields */ + buf[n] = '\0'; + ptr = strtok(buf, " "); + return strdup(ptr); return NULL; } diff --git a/ctdb/common/system_kfreebsd.c b/ctdb/common/system_kfreebsd.c index 85442ed28d..103c1e0692 100644 --- a/ctdb/common/system_kfreebsd.c +++ b/ctdb/common/system_kfreebsd.c @@ -365,8 +365,21 @@ int ctdb_get_peer_pid(const int fd, pid_t *peer_pid) char *ctdb_get_process_name(pid_t pid) { - /* FIXME kFreeBSD: get_process_name not implemented */ - return NULL; + char path[32]; + char buf[PATH_MAX]; + char *ptr; + int n; + + snprintf(path, sizeof(path), "/proc/%d/exe", pid); + n = readlink(path, buf, sizeof(buf)); + if (n < 0) { + return NULL; + } + + /* Remove any extra fields */ + buf[n] = '\0'; + ptr = strtok(buf, " "); + return strdup(ptr); } bool ctdb_get_lock_info(pid_t req_pid, struct ctdb_lock_info *lock_info) -- cgit