From: Karel Zak Date: Wed, 25 Nov 2015 13:17:22 +0000 (+0100) Subject: lslocks: use stuff from lib/procutils X-Git-Tag: v2.28-rc1~265 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0e756daeb64ab62a8e9296e5156e17bb5cf6720a;p=thirdparty%2Futil-linux.git lslocks: use stuff from lib/procutils Signed-off-by: Karel Zak --- diff --git a/include/procutils.h b/include/procutils.h index 3040d197b2..9f8dd76ec1 100644 --- a/include/procutils.h +++ b/include/procutils.h @@ -29,5 +29,6 @@ extern void proc_processes_filter_by_uid(struct proc_processes *ps, uid_t uid); extern int proc_next_pid(struct proc_processes *ps, pid_t *pid); extern char *proc_get_command(pid_t pid); +extern char *proc_get_command_name(pid_t pid); #endif /* UTIL_LINUX_PROCUTILS */ diff --git a/lib/procutils.c b/lib/procutils.c index 48ee7cf06e..2e9a0537aa 100644 --- a/lib/procutils.c +++ b/lib/procutils.c @@ -97,15 +97,15 @@ int proc_next_tid(struct proc_tasks *tasks, pid_t *tid) return 0; } -/* returns process command name, use free() for result */ -char *proc_get_command(pid_t pid) +/* returns process command path, use free() for result */ +static char *proc_file_strdup(pid_t pid, const char *name) { char buf[BUFSIZ], *res = NULL; ssize_t sz = 0; size_t i; int fd; - snprintf(buf, sizeof(buf), "/proc/%d/cmdline", (int) pid); + snprintf(buf, sizeof(buf), "/proc/%d/%s", (int) pid, name); fd = open(buf, O_RDONLY); if (fd < 0) goto done; @@ -127,6 +127,18 @@ done: return res; } +/* returns process command path, use free() for result */ +char *proc_get_command(pid_t pid) +{ + return proc_file_strdup(pid, "cmdline"); +} + +/* returns process command name, use free() for result */ +char *proc_get_command_name(pid_t pid) +{ + return proc_file_strdup(pid, "comm"); +} + struct proc_processes *proc_open_processes(void) { struct proc_processes *ps; diff --git a/misc-utils/lslocks.c b/misc-utils/lslocks.c index 35ca5c75a2..389a3e42f7 100644 --- a/misc-utils/lslocks.c +++ b/misc-utils/lslocks.c @@ -45,6 +45,7 @@ #include "list.h" #include "closestream.h" #include "optutils.h" +#include "procutils.h" /* column IDs */ enum { @@ -118,28 +119,6 @@ static void disable_columns_truncate(void) infos[i].flags &= ~SCOLS_FL_TRUNC; } -/* - * Return a PID's command name - */ -static char *get_cmdname(pid_t id) -{ - FILE *fp; - char path[PATH_MAX], *ret = NULL; - - sprintf(path, "/proc/%d/comm", id); - if (!(fp = fopen(path, "r"))) - return NULL; - - if (!fgets(path, sizeof(path), fp)) - goto out; - - path[strlen(path) - 1] = '\0'; - ret = xstrdup(path); -out: - fclose(fp); - return ret; -} - /* * Associate the device's mountpoint for a filename */ @@ -285,7 +264,7 @@ static int get_local_locks(struct list_head *locks) * to the list, no need to worry now. */ l->pid = strtos32_or_err(tok, _("failed to parse pid")); - l->cmdname = get_cmdname(l->pid); + l->cmdname = proc_get_command_name(l->pid); if (!l->cmdname) l->cmdname = xstrdup(_("(unknown)")); break;