Blame sysdeps/freebsd/glibtop_private.c
|
Packit |
d37888 |
#include <config.h>
|
|
Packit |
d37888 |
#include <glibtop.h>
|
|
Packit |
d37888 |
#include <glibtop/error.h>
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
#include "glibtop_private.h"
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
#include <sys/types.h>
|
|
Packit |
d37888 |
#include <unistd.h>
|
|
Packit |
d37888 |
#include <string.h>
|
|
Packit |
d37888 |
#include <glib.h>
|
|
Packit |
d37888 |
#include <errno.h>
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
char *
|
|
Packit |
d37888 |
execute_lsof(pid_t pid) {
|
|
Packit |
d37888 |
char *output = NULL;
|
|
Packit |
d37888 |
char *lsof;
|
|
Packit |
d37888 |
char *command;
|
|
Packit |
d37888 |
int exit_status;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
lsof = g_find_program_in_path("lsof");
|
|
Packit |
d37888 |
if (lsof == NULL)
|
|
Packit |
d37888 |
return NULL;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
command = g_strdup_printf("%s -n -P -Fftn -p %d", lsof, pid);
|
|
Packit |
d37888 |
g_free(lsof);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (g_spawn_command_line_sync (command, &output, NULL, &exit_status, NULL)) {
|
|
Packit |
d37888 |
if (exit_status != 0) {
|
|
Packit |
d37888 |
g_warning("Could not execute \"%s\" (%i)", command,
|
|
Packit |
d37888 |
exit_status);
|
|
Packit |
d37888 |
output = NULL;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
g_free(command);
|
|
Packit |
d37888 |
return output;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
/* Ported from linux/glibtop_private.c */
|
|
Packit |
d37888 |
gboolean
|
|
Packit |
d37888 |
safe_readlink(const char *path, char *buf, int bufsiz)
|
|
Packit |
d37888 |
{
|
|
Packit |
d37888 |
int ret;
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
ret = readlink(path, buf, bufsiz - 1);
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
if (ret == -1) {
|
|
Packit |
d37888 |
g_warning("Could not read link %s : %s", path, strerror(errno));
|
|
Packit |
d37888 |
return FALSE;
|
|
Packit |
d37888 |
}
|
|
Packit |
d37888 |
|
|
Packit |
d37888 |
buf[ret] = '\0';
|
|
Packit |
d37888 |
return TRUE;
|
|
Packit |
d37888 |
}
|