From 3fcb44b90847f47cc0fd3e97f6cf9107fff38e09 Mon Sep 17 00:00:00 2001 From: Sandeep Patil Date: Mon, 14 Jan 2019 17:44:34 -0800 Subject: [PATCH] procmeminfo: use getline() instead of fgets() everywhere Bug: 111694435 Test: libmeminfo_test 1 --gtest_filter=TestProcMemInfo.* Change-Id: Idfc797aa65f45e0152765605c14622e2110dfdc1 Signed-off-by: Sandeep Patil --- libmeminfo/procmeminfo.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/libmeminfo/procmeminfo.cpp b/libmeminfo/procmeminfo.cpp index 347a293a9..d6332a32e 100644 --- a/libmeminfo/procmeminfo.cpp +++ b/libmeminfo/procmeminfo.cpp @@ -406,9 +406,10 @@ bool SmapsOrRollupFromFile(const std::string& path, MemUsage* stats) { return false; } - char line[1024]; + char* line = nullptr; + size_t line_alloc = 0; stats->clear(); - while (fgets(line, sizeof(line), fp.get()) != nullptr) { + while (getline(&line, &line_alloc, fp.get()) > 0) { switch (line[0]) { case 'P': if (strncmp(line, "Pss:", 4) == 0) { @@ -441,6 +442,8 @@ bool SmapsOrRollupFromFile(const std::string& path, MemUsage* stats) { } } + // free getline() managed buffer + free(line); return true; } @@ -450,14 +453,17 @@ bool SmapsOrRollupPssFromFile(const std::string& path, uint64_t* pss) { return false; } *pss = 0; - char line[1024]; - while (fgets(line, sizeof(line), fp.get()) != nullptr) { + char* line = nullptr; + size_t line_alloc = 0; + while (getline(&line, &line_alloc, fp.get()) > 0) { uint64_t v; if (sscanf(line, "Pss: %" SCNu64 " kB", &v) == 1) { *pss += v; } } + // free getline() managed buffer + free(line); return true; }