blob: 5418aab8b30c978abd37c00c7e6effd283ee3329 [file] [log] [blame]
John Park33858a32018-09-28 23:05:48 -07001#include "aos/util/file.h"
Brian Silverman61175fb2016-03-13 15:35:56 -04002
3#include <fcntl.h>
4#include <unistd.h>
5
Austin Schuhcb108412019-10-13 16:09:54 -07006#include "absl/strings/string_view.h"
Brian Silverman58899fd2019-03-24 11:03:11 -07007#include "aos/logging/logging.h"
John Park33858a32018-09-28 23:05:48 -07008#include "aos/scoped/scoped_fd.h"
Brian Silverman61175fb2016-03-13 15:35:56 -04009
10namespace aos {
11namespace util {
12
Austin Schuhcb108412019-10-13 16:09:54 -070013::std::string ReadFileToStringOrDie(const absl::string_view filename) {
Brian Silverman61175fb2016-03-13 15:35:56 -040014 ::std::string r;
Austin Schuhcb108412019-10-13 16:09:54 -070015 ScopedFD fd(open(::std::string(filename).c_str(), O_RDONLY));
16 if (fd.get() == -1) {
Austin Schuhf257f3c2019-10-27 21:00:43 -070017 AOS_PLOG(FATAL, "opening %*s", static_cast<int>(filename.size()),
18 filename.data());
Austin Schuhcb108412019-10-13 16:09:54 -070019 }
Brian Silverman61175fb2016-03-13 15:35:56 -040020 while (true) {
21 char buffer[1024];
22 const ssize_t result = read(fd.get(), buffer, sizeof(buffer));
23 if (result < 0) {
Austin Schuhf257f3c2019-10-27 21:00:43 -070024 AOS_PLOG(FATAL, "reading from %*s", static_cast<int>(filename.size()),
25 filename.data());
Brian Silverman61175fb2016-03-13 15:35:56 -040026 } else if (result == 0) {
27 break;
28 }
29 r.append(buffer, result);
30 }
31 return r;
32}
33
34} // namespace util
35} // namespace aos