From 27350122b2cb3338fc716bb481bf28a379aece93 Mon Sep 17 00:00:00 2001 From: Drath Date: Fri, 2 Jan 2026 13:43:56 +0100 Subject: [PATCH] simplify readFile, use std::array instead of c-style bufs --- include/utils.hpp | 33 +++++++++++++++++++++++---------- src/utils.cpp | 21 --------------------- 2 files changed, 23 insertions(+), 31 deletions(-) diff --git a/include/utils.hpp b/include/utils.hpp index e765aad..c213a1f 100644 --- a/include/utils.hpp +++ b/include/utils.hpp @@ -1,6 +1,8 @@ #ifndef UTILS_HPP #define UTILS_HPP +#include +#include #include #include #include @@ -10,27 +12,38 @@ namespace utils { constexpr char fill_char = ' '; +enum just { right, left }; -enum just { right, - left }; - -std::string pad(std::string s, uint8_t len, just j = just::right); +std::string pad(std::string s, uint8_t len, just j = right); std::string center(std::string str, uint8_t len); std::string pBytes(double bytes, bool isKbytes = false); -ssize_t readFile(const std::string& path, char* buffer, size_t maxlen); -ssize_t readFile(const char* path, char* buffer, size_t maxlen); std::string getFirstDir(const std::string_view& path); +/* reads file into a std::array buffer */ +template +inline ssize_t readFile(const std::string& path, std::array& buffer) { + const int fd = open(path.c_str(), O_RDONLY | O_CLOEXEC); + if (fd < 0) { + applog(LOG::ERR, "Error reading {}", path); + return 0; + } + const ssize_t len = read(fd, buffer.data(), buffer.size()); + if (len >= 0) buffer[len] = '\0'; + close(fd); + return len; +} + + /* reads a number fast and divides it if needed */ template -inline void fastReadNum(const std::string& path, char (&buf)[N], T& result) { - readFile(path, buf, N); +inline void fastReadNum(const std::string& path, std::array& buf, T& result) { + readFile(path, buf); if constexpr (Divider == 1) { - std::from_chars(buf, buf + N, result); + std::from_chars(buf.data(), buf.data() + N, result); return; } uint64_t temp{}; - std::from_chars(buf, buf + N, temp); + std::from_chars(buf.data(), buf.data() + N, temp); if constexpr (std::is_floating_point_v) result = temp / static_cast(Divider); else diff --git a/src/utils.cpp b/src/utils.cpp index 5fdc9a3..490449b 100644 --- a/src/utils.cpp +++ b/src/utils.cpp @@ -1,10 +1,6 @@ -#include -#include - #include #include #include -#include #include #include #include @@ -41,23 +37,6 @@ std::string pBytes(double bytes, const bool isKbytes) { return "++++"; } -/* reads maxlen of chars of the file in path into buffer */ -ssize_t readFile(const char* path, char* buffer, const size_t maxlen) { - const int fd = open(path, O_RDONLY | O_CLOEXEC); - if (fd < 0) { - applog(LOG::ERR, "Error reading {}", path); - return 0; - } - const ssize_t len = read(fd, buffer, maxlen - 1); - if (len >= 0) buffer[len] = '\0'; - close(fd); - return len; -} - -/* overload so it takes std::string as path */ -ssize_t readFile(const std::string& path, char* buffer, const size_t maxlen) { - return readFile(path.c_str(), buffer, maxlen); -} /* finds first dir in path and returns it. don't refactor, you don't understand it, its fast enough, and you only use it on init */ std::string getFirstDir(const std::string_view& path) {