blob: f78239adb166ee304019ff2ef0ebbd163170ceee [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"
John Park33858a32018-09-28 23:05:48 -07007#include "aos/scoped/scoped_fd.h"
Alex Perrycb7da4b2019-08-28 19:35:56 -07008#include "glog/logging.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));
Alex Perrycb7da4b2019-08-28 19:35:56 -070016 PCHECK(fd.get() != -1) << ": opening " << filename;
Brian Silverman61175fb2016-03-13 15:35:56 -040017 while (true) {
18 char buffer[1024];
19 const ssize_t result = read(fd.get(), buffer, sizeof(buffer));
Alex Perrycb7da4b2019-08-28 19:35:56 -070020 PCHECK(result >= 0) << ": reading from " << filename;
21 if (result == 0) {
Brian Silverman61175fb2016-03-13 15:35:56 -040022 break;
23 }
24 r.append(buffer, result);
25 }
26 return r;
27}
28
Alex Perrycb7da4b2019-08-28 19:35:56 -070029void WriteStringToFileOrDie(const absl::string_view filename,
30 const absl::string_view contents) {
31 ::std::string r;
32 ScopedFD fd(open(::std::string(filename).c_str(),
33 O_CREAT | O_WRONLY | O_TRUNC, S_IRWXU));
34 PCHECK(fd.get() != -1) << ": opening " << filename;
35 size_t size_written = 0;
36 while (size_written != contents.size()) {
37 const ssize_t result = write(fd.get(), contents.data() + size_written,
38 contents.size() - size_written);
39 PCHECK(result >= 0) << ": reading from " << filename;
40 if (result == 0) {
41 break;
42 }
43
44 size_written += result;
45 }
46}
47
Brian Silverman61175fb2016-03-13 15:35:56 -040048} // namespace util
49} // namespace aos