summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarel Zak2015-11-25 14:17:22 +0100
committerKarel Zak2015-11-25 14:17:22 +0100
commit0e756daeb64ab62a8e9296e5156e17bb5cf6720a (patch)
tree3c659781890f34cc4874c8de3425c68b04d5f4c8
parentagetty: don't ignore netlink on select() (diff)
downloadkernel-qcow2-util-linux-0e756daeb64ab62a8e9296e5156e17bb5cf6720a.tar.gz
kernel-qcow2-util-linux-0e756daeb64ab62a8e9296e5156e17bb5cf6720a.tar.xz
kernel-qcow2-util-linux-0e756daeb64ab62a8e9296e5156e17bb5cf6720a.zip
lslocks: use stuff from lib/procutils
Signed-off-by: Karel Zak <kzak@redhat.com>
-rw-r--r--include/procutils.h1
-rw-r--r--lib/procutils.c18
-rw-r--r--misc-utils/lslocks.c25
3 files changed, 18 insertions, 26 deletions
diff --git a/include/procutils.h b/include/procutils.h
index 3040d197b..9f8dd76ec 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 48ee7cf06..2e9a0537a 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 35ca5c75a..389a3e42f 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 {
@@ -119,28 +120,6 @@ static void disable_columns_truncate(void)
}
/*
- * 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
*/
static char *get_fallback_filename(dev_t dev)
@@ -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;