mirror of
https://github.com/MoreTore/openpilot.git
synced 2026-08-05 00:05:59 +08:00
util::read_file: fix reading from sysfs and add test case (#21325)
* add sysfs test case
* Revert "util.cc: refactor read_file (#21321)"
This reverts commit 8d5c61eefe.
This commit is contained in:
@@ -24,6 +24,10 @@ TEST_CASE("util::read_file") {
|
||||
std::string ret = util::read_file("/proc/version");
|
||||
REQUIRE(ret.find("Linux version") != std::string::npos);
|
||||
}
|
||||
SECTION("read from sysfs") {
|
||||
std::string ret = util::read_file("/sys/power/wakeup_count");
|
||||
REQUIRE(!ret.empty());
|
||||
}
|
||||
SECTION("read file") {
|
||||
char filename[] = "/tmp/test_read_XXXXXX";
|
||||
int fd = mkstemp(filename);
|
||||
|
||||
+13
-12
@@ -54,25 +54,26 @@ int set_core_affinity(int core) {
|
||||
namespace util {
|
||||
|
||||
std::string read_file(const std::string& fn) {
|
||||
std::ifstream f(fn, std::ios::binary | std::ios::in);
|
||||
if (f) {
|
||||
f.seekg(0, std::ios::end);
|
||||
int pos = f.tellg();
|
||||
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);
|
||||
f.seekg(0, std::ios::beg);
|
||||
if (f.read(result.data(), pos)) {
|
||||
ifs.seekg(0, std::ios::beg);
|
||||
ifs.read(result.data(), pos);
|
||||
if (ifs) {
|
||||
return result;
|
||||
}
|
||||
} else {
|
||||
// fallback for files created on read, e.g. procfs
|
||||
std::stringstream buffer;
|
||||
buffer << f.rdbuf();
|
||||
return buffer.str();
|
||||
}
|
||||
}
|
||||
return std::string();
|
||||
ifs.close();
|
||||
|
||||
// fallback for files created on read, e.g. procfs
|
||||
std::ifstream f(fn);
|
||||
std::stringstream buffer;
|
||||
buffer << f.rdbuf();
|
||||
return buffer.str();
|
||||
}
|
||||
|
||||
int read_files_in_dir(const std::string &path, std::map<std::string, std::string> *contents) {
|
||||
|
||||
Reference in New Issue
Block a user