add makeSystemError*() helper functions
[folly.git] / folly / FileUtil.h
index 063fa2385c110d888ba8e07abc5a09f0b8b33529..0913b23d2385510a86928ee2e347e0b3d767df0f 100644 (file)
 
 #pragma once
 
-#include <folly/Conv.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include <cassert>
+#include <limits>
+
 #include <folly/Portability.h>
+#include <folly/Range.h>
 #include <folly/ScopeGuard.h>
 #include <folly/portability/Fcntl.h>
 #include <folly/portability/SysUio.h>
 #include <folly/portability/Unistd.h>
 
-#include <cassert>
-#include <limits>
-#include <sys/stat.h>
-#include <sys/types.h>
-
 namespace folly {
 
 /**
@@ -130,7 +131,9 @@ bool readFile(
 
   // Obtain file size:
   struct stat buf;
-  if (fstat(fd, &buf) == -1) return false;
+  if (fstat(fd, &buf) == -1) {
+    return false;
+  }
   // Some files (notably under /proc and /sys on Linux) lie about
   // their size, so treat the size advertised by fstat under advise
   // but don't rely on it. In particular, if the size is zero, we
@@ -139,8 +142,7 @@ bool readFile(
   constexpr size_t initialAlloc = 1024 * 4;
   out.resize(
     std::min(
-      buf.st_size > 0 ? folly::to<size_t>(buf.st_size + 1) : initialAlloc,
-      num_bytes));
+      buf.st_size > 0 ? (size_t(buf.st_size) + 1) : initialAlloc, num_bytes));
 
   while (soFar < out.size()) {
     const auto actual = readFull(fd, &out[soFar], out.size() - soFar);
@@ -200,11 +202,13 @@ bool readFile(
  * state will be unchanged on error.
  */
 template <class Container>
-bool writeFile(const Container& data, const char* filename,
-              int flags = O_WRONLY | O_CREAT | O_TRUNC) {
+bool writeFile(const Container& data,
+               const char* filename,
+               int flags = O_WRONLY | O_CREAT | O_TRUNC,
+               mode_t mode = 0666) {
   static_assert(sizeof(data[0]) == 1,
                 "writeFile works with element size equal to 1");
-  int fd = open(filename, flags, 0666);
+  int fd = open(filename, flags, mode);
   if (fd == -1) {
     return false;
   }
@@ -250,4 +254,4 @@ int writeFileAtomicNoThrow(
     int count,
     mode_t permissions = 0644);
 
-}  // namespaces
+} // namespace folly