21 #include <system_error> 34 using namespace fileutil_detail;
37 return int(
wrapNoInt(open, name, flags, mode));
50 if (r == -1 && errno == EINTR) {
73 return int(
wrapNoInt(dup2, oldfd, newfd));
77 #if defined(__APPLE__) 78 return int(
wrapNoInt(fcntl, fd, F_FULLFSYNC));
79 #elif defined(__FreeBSD__) || defined(_MSC_VER) 87 return int(
wrapNoInt(ftruncate, fd, len));
91 return int(
wrapNoInt(truncate, path, len));
95 return int(
wrapNoInt(flock, fd, operation));
107 return wrapNoInt(pread, fd, buf, count, offset);
119 return wrapNoInt(pwrite, fd, buf, count, offset);
123 return wrapNoInt(writev, fd, iov, count);
131 return wrapFull(pread, fd, buf, count, offset);
139 return wrapFull(pwrite, fd, const_cast<void*>(buf), count, offset);
151 return wrapvFull(writev, fd, iov, count);
162 mode_t permissions) {
170 std::vector<char> pathBuffer;
174 pathBuffer.resize((2 * filename.
size()) + 1 + suffix.size());
176 memcpy(pathBuffer.data(), filename.
data(), filename.
size());
177 pathBuffer[filename.
size()] =
'\0';
178 const char*
const filenameCStr = pathBuffer.data();
180 char*
const tempPath = pathBuffer.data() + filename.
size() + 1;
181 memcpy(tempPath, filename.
data(), filename.
size());
182 memcpy(tempPath + filename.
size(), suffix.data(), suffix.size());
184 auto tmpFD = mkstemp(tempPath);
203 rc = fchmod(tmpFD, permissions);
216 rc = rename(tempPath, filenameCStr);
228 mode_t permissions) {
231 auto msg =
std::string(__func__) +
"() failed to update " + filename.
str();
232 throw std::system_error(rc, std::generic_category(), msg);
238 iov.iov_base =
const_cast<unsigned char*
>(data.
data());
239 iov.iov_len = data.
size();
246 mode_t permissions) {
ssize_t wrapNoInt(F f, Args...args)
ssize_t readvFull(int fd, iovec *iov, int count)
void write(const T &in, folly::io::Appender &appender)
int shutdownNoInt(NetworkSocket fd, int how)
int writeFileAtomicNoThrow(StringPiece filename, iovec *iov, int count, mode_t permissions)
ssize_t preadNoInt(int fd, void *buf, size_t count, off_t offset)
ssize_t pwriteFull(int fd, const void *buf, size_t count, off_t offset)
int fdatasyncNoInt(int fd)
ssize_t readNoInt(int fd, void *buf, size_t count)
ssize_t readFull(int fd, void *buf, size_t count)
static int filterCloseReturn(int r)
constexpr size_type size() const
—— Concurrent Priority Queue Implementation ——
ssize_t pwritev(int fd, const iovec *iov, int count, off_t offset)
int truncateNoInt(const char *path, off_t len)
ssize_t writevFull(int fd, iovec *iov, int count)
folly::Optional< PskKeyExchangeMode > mode
ssize_t writevNoInt(int fd, const iovec *iov, int count)
int shutdown(NetworkSocket s, int how)
ssize_t preadFull(int fd, void *buf, size_t count, off_t offset)
ssize_t readvNoInt(int fd, const iovec *iov, int count)
size_t read(T &out, folly::io::Cursor &cursor)
ssize_t wrapvFull(F f, int fd, iovec *iov, int count, Offset...offset)
constexpr Iter data() const
constexpr auto data(C &c) -> decltype(c.data())
ssize_t writeNoInt(int fd, const void *buf, size_t count)
ssize_t writeFull(int fd, const void *buf, size_t count)
int flockNoInt(int fd, int operation)
ssize_t preadv(int fd, const iovec *iov, int count, off_t offset)
ssize_t wrapFull(F f, int fd, void *buf, size_t count, Offset...offset)
void writeFileAtomic(StringPiece filename, iovec *iov, int count, mode_t permissions)
int openNoInt(const char *name, int flags, mode_t mode)
ssize_t pwriteNoInt(int fd, const void *buf, size_t count, off_t offset)
Range< const unsigned char * > ByteRange
int dup2NoInt(int oldfd, int newfd)
int ftruncateNoInt(int fd, off_t len)
ssize_t pwritevFull(int fd, iovec *iov, int count, off_t offset)
int close(NetworkSocket s)
ssize_t preadvFull(int fd, iovec *iov, int count, off_t offset)