From 13295dec0f567d6795522241fff6817a68b02033 Mon Sep 17 00:00:00 2001 From: Klaus Wenninger Date: Wed, 2 May 2018 20:07:12 +0200 Subject: [PATCH] Refactor: sbd-cluster: let scan do the job of proc-parsing Now it would as well parse names containing spaces properly. --- src/sbd-cluster.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/sbd-cluster.c b/src/sbd-cluster.c index 8512f23..f5e9ff0 100644 --- a/src/sbd-cluster.c +++ b/src/sbd-cluster.c @@ -338,7 +338,7 @@ sbd_membership_destroy(gpointer user_data) * \brief Get process ID and name associated with a /proc directory entry * * \param[in] entry Directory entry (must be result of readdir() on /proc) - * \param[out] name If not NULL, a char[64] to hold the process name + * \param[out] name If not NULL, a char[16] to hold the process name * \param[out] pid If not NULL, will be set to process ID of entry * * \return 0 on success, -1 if entry is not for a process or info not found @@ -353,7 +353,7 @@ sbd_procfs_process_info(struct dirent *entry, char *name, int *pid) int fd, local_pid; FILE *file; struct stat statbuf; - char key[16] = { 0 }, procpath[128] = { 0 }; + char procpath[128] = { 0 }; /* We're only interested in entries whose name is a PID, * so skip anything non-numeric or that is too long. @@ -396,8 +396,7 @@ sbd_procfs_process_info(struct dirent *entry, char *name, int *pid) if (!file) { return -1; } - if ((fscanf(file, "%15s%63s", key, name) != 2) - || safe_str_neq(key, "Name:")) { + if (fscanf(file, "Name:\t%15[a-zA-Z0-9 _-]", name) != 1) { fclose(file); return -1; } @@ -484,7 +483,7 @@ static long unsigned int find_pacemaker_remote(void) { DIR *dp; - char entry_name[64]; + char entry_name[16]; struct dirent *entry; dp = opendir("/proc"); -- 1.8.3.1