From f03ca47c9c9ee2683a87d3c7d92754236ec92efd Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Wed, 23 Jun 2021 04:48:41 +0800 Subject: [PATCH] util.cc: refactor read_file (#21350) old-commit-hash: ac71384a28cda46126ea5d699697bb7ab701d972 --- selfdrive/common/util.cc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/selfdrive/common/util.cc b/selfdrive/common/util.cc index af87d9c22f..777e047c6a 100644 --- a/selfdrive/common/util.cc +++ b/selfdrive/common/util.cc @@ -54,26 +54,26 @@ int set_core_affinity(int core) { namespace util { std::string read_file(const std::string& fn) { - std::ifstream ifs(fn, std::ios::binary | std::ios::ate); - if (ifs) { - int pos = ifs.tellg(); - if (pos > 0) { - std::string result; - result.resize(pos); - ifs.seekg(0, std::ios::beg); - ifs.read(result.data(), pos); - if (ifs) { + std::ifstream f(fn, std::ios::binary | std::ios::in); + if (f.is_open()) { + f.seekg(0, std::ios::end); + int size = f.tellg(); + if (f.good() && size > 0) { + std::string result(size, '\0'); + f.seekg(0, std::ios::beg); + f.read(result.data(), size); + // return either good() or has reached end-of-file (e.g. /sys/power/wakeup_count) + if (f.good() || f.eof()) { + result.resize(f.gcount()); return result; } } + // fallback for files created on read, e.g. procfs + std::stringstream buffer; + buffer << f.rdbuf(); + return buffer.str(); } - ifs.close(); - - // fallback for files created on read, e.g. procfs - std::ifstream f(fn); - std::stringstream buffer; - buffer << f.rdbuf(); - return buffer.str(); + return std::string(); } int read_files_in_dir(const std::string &path, std::map *contents) {