blob: 4362eb310ec6f74e40ec64b3c55dfcfb55eeed71 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/storage/fvm/host/file_wrapper.h"
#include <memory>
namespace fvm::host {
ssize_t FdWrapper::Read(void* buffer, size_t count) { return read(fd_, buffer, count); }
ssize_t FdWrapper::Write(const void* buffer, size_t count) { return write(fd_, buffer, count); }
ssize_t FdWrapper::Seek(off_t offset, int whence) { return lseek(fd_, offset, whence); }
ssize_t FdWrapper::Size() {
off_t curr = lseek(fd_, 0, SEEK_CUR);
off_t size = lseek(fd_, 0, SEEK_END);
lseek(fd_, curr, SEEK_SET);
return size;
}
ssize_t FdWrapper::Tell() { return lseek(fd_, 0, SEEK_CUR); }
zx_status_t FdWrapper::Truncate(size_t size) { return ftruncate(fd_, size); }
zx_status_t FdWrapper::Sync() { return fsync(fd_); }
zx_status_t UniqueFdWrapper::Open(const char* path, int flags, mode_t mode,
std::unique_ptr<UniqueFdWrapper>* out) {
fbl::unique_fd fd(open(path, flags, mode));
if (!fd) {
return ZX_ERR_IO;
}
*out = std::make_unique<UniqueFdWrapper>(std::move(fd));
return ZX_OK;
}
ssize_t UniqueFdWrapper::Read(void* buffer, size_t count) { return read(fd_.get(), buffer, count); }
ssize_t UniqueFdWrapper::Write(const void* buffer, size_t count) {
return write(fd_.get(), buffer, count);
}
ssize_t UniqueFdWrapper::Seek(off_t offset, int whence) { return lseek(fd_.get(), offset, whence); }
ssize_t UniqueFdWrapper::Size() {
off_t curr = lseek(fd_.get(), 0, SEEK_CUR);
off_t size = lseek(fd_.get(), 0, SEEK_END);
lseek(fd_.get(), curr, SEEK_SET);
return size;
}
ssize_t UniqueFdWrapper::Tell() { return lseek(fd_.get(), 0, SEEK_CUR); }
zx_status_t UniqueFdWrapper::Truncate(size_t size) { return ftruncate(fd_.get(), size); }
zx_status_t UniqueFdWrapper::Sync() { return fsync(fd_.get()); }
} // namespace fvm::host