blob: 6f7a383a471f33715fc79b74a8b381fa069e9998 [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 "fvm-host/file-wrapper.h"
namespace fvm::host {
ssize_t FdWrapper::Read(void* buffer, size_t count) {
return read(fd_, buffer, count);
}
ssize_t FdWrapper::Write(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, fbl::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(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