blob: 720ef47426b49de4e0d9f1786e9e756b12cf476c [file] [log] [blame]
// Copyright 2019 The Chromium OS 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 "arc/vm/vsock_proxy/file_stream.h"
#include <errno.h>
#include <string>
#include <utility>
#include <base/logging.h>
#include <base/posix/eintr_wrapper.h>
#include "arc/vm/vsock_proxy/message.pb.h"
namespace arc {
FileStream::FileStream(base::ScopedFD file_fd) : file_fd_(std::move(file_fd)) {}
FileStream::~FileStream() = default;
bool FileStream::Read(arc_proxy::VSockMessage* message) {
LOG(ERROR) << "FileStream::Read is unsupported.";
return false;
}
bool FileStream::Write(arc_proxy::Data* data) {
LOG(ERROR) << "FileStream::Write is unsupported.";
return false;
}
bool FileStream::Pread(uint64_t count,
uint64_t offset,
arc_proxy::PreadResponse* response) {
std::string buffer;
buffer.resize(count);
int result = HANDLE_EINTR(pread(file_fd_.get(), &buffer[0], count, offset));
if (result < 0) {
response->set_error_code(errno);
} else {
buffer.resize(result);
response->set_error_code(0);
*response->mutable_blob() = std::move(buffer);
}
return true;
}
} // namespace arc