From fb8830a64f267afb8a471f04d13c4eb2eafac810 Mon Sep 17 00:00:00 2001 From: Vitali Lovich Date: Fri, 16 Jul 2010 01:07:43 -0700 Subject: [PATCH] Fix parsing of linux memory If process name contains a space, this parsing fails for no good reason. --- src/platform_linux.cc | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/src/platform_linux.cc b/src/platform_linux.cc index d964d23600..9c4ccc4c99 100644 --- a/src/platform_linux.cc +++ b/src/platform_linux.cc @@ -47,11 +47,26 @@ int OS::GetMemory(size_t *rss, size_t *vsize) { int itmp; char ctmp; size_t page_size = getpagesize(); + char *cbuf; + bool foundExeEnd; /* PID */ if (fscanf(f, "%d ", &itmp) == 0) goto error; /* coverity[secure_coding] */ /* Exec file */ - if (fscanf (f, "%s ", buf) == 0) goto error; /* coverity[secure_coding] */ + cbuf = buf; + foundExeEnd = false; + if (fscanf (f, "%c", cbuf++) == 0) goto error; // ( + while (1) { + if (fscanf(f, "%c", cbuf) == 0) goto error; + if (*cbuf == ')') { + foundExeEnd = true; + } else if (foundExeEnd && *cbuf == ' ') { + *cbuf = 0; + break; + } + + cbuf++; + } /* State */ if (fscanf (f, "%c ", &ctmp) == 0) goto error; /* coverity[secure_coding] */ /* Parent process */