mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-05 10:10:41 +00:00
crosvm: Support cros-rust version crosvm ebuild
To support eclass migration for crosvm ebuild from crate to cros-rust. This CL need to be built with cros-rust version crosvm ebuild. - Upgrage crate cc from 1.0.15 to 1.0.25. - Change local tempdir version from 0.3.5 to 0.3.7 for ebuild integration. - Remove 9s directory since it's moved to platform2. BUG=chromium:781398 BUG=chromium:907520 TEST=Run $ FEATURES=test emerge-eve crosvm in a clean chroot CQ-DEPEND=CL:1421303 Change-Id: Iab615b555a51f8020e5efae1cc40ac6b54ea87f2 Reviewed-on: https://chromium-review.googlesource.com/1421237 Commit-Ready: Chih-Yang Hsia <paulhsia@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Tested-by: Chih-Yang Hsia <paulhsia@chromium.org> Reviewed-by: Zach Reizner <zachr@chromium.org>
This commit is contained in:
parent
284fcac560
commit
b6d842fa56
9 changed files with 38 additions and 458 deletions
|
@ -1,11 +0,0 @@
|
|||
[package]
|
||||
name = "9s"
|
||||
version = "0.1.0"
|
||||
authors = ["The Chromium OS Authors"]
|
||||
|
||||
[dependencies]
|
||||
assertions = { path = "../assertions" }
|
||||
getopts = "=0.2.17"
|
||||
libc = "=0.2.44"
|
||||
p9 = { path = "../p9" }
|
||||
sys_util = { path = "../sys_util" }
|
210
9s/src/main.rs
210
9s/src/main.rs
|
@ -1,210 +0,0 @@
|
|||
// Copyright 2018 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.
|
||||
|
||||
/// Runs a [9P] server.
|
||||
///
|
||||
/// [9P]: http://man.cat-v.org/plan_9/5/0intro
|
||||
extern crate assertions;
|
||||
extern crate getopts;
|
||||
extern crate libc;
|
||||
extern crate p9;
|
||||
#[macro_use]
|
||||
extern crate sys_util;
|
||||
|
||||
mod vsock;
|
||||
|
||||
use std::fmt;
|
||||
use std::io::{self, BufReader, BufWriter};
|
||||
use std::net;
|
||||
use std::num::ParseIntError;
|
||||
use std::os::raw::c_uint;
|
||||
use std::result;
|
||||
use std::str::FromStr;
|
||||
use std::string;
|
||||
use std::sync::Arc;
|
||||
use std::thread;
|
||||
|
||||
use sys_util::syslog;
|
||||
|
||||
use vsock::*;
|
||||
|
||||
const DEFAULT_BUFFER_SIZE: usize = 8192;
|
||||
|
||||
// Address family identifiers.
|
||||
const VSOCK: &'static str = "vsock:";
|
||||
const UNIX: &'static str = "unix:";
|
||||
|
||||
// Usage for this program.
|
||||
const USAGE: &'static str = "9s [options] {vsock:<port>|unix:<path>|<ip>:<port>}";
|
||||
|
||||
enum ListenAddress {
|
||||
Net(net::SocketAddr),
|
||||
Unix(String),
|
||||
Vsock(c_uint),
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum ParseAddressError {
|
||||
MissingUnixPath,
|
||||
MissingVsockPort,
|
||||
Net(net::AddrParseError),
|
||||
Unix(string::ParseError),
|
||||
Vsock(ParseIntError),
|
||||
}
|
||||
|
||||
impl fmt::Display for ParseAddressError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self {
|
||||
&ParseAddressError::MissingUnixPath => write!(f, "missing unix path"),
|
||||
&ParseAddressError::MissingVsockPort => write!(f, "missing vsock port number"),
|
||||
&ParseAddressError::Net(ref e) => e.fmt(f),
|
||||
&ParseAddressError::Unix(ref e) => write!(f, "invalid unix path: {}", e),
|
||||
&ParseAddressError::Vsock(ref e) => write!(f, "invalid vsock port number: {}", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for ListenAddress {
|
||||
type Err = ParseAddressError;
|
||||
|
||||
fn from_str(s: &str) -> result::Result<Self, Self::Err> {
|
||||
if s.starts_with(VSOCK) {
|
||||
if s.len() > VSOCK.len() {
|
||||
Ok(ListenAddress::Vsock(
|
||||
s[VSOCK.len()..].parse().map_err(ParseAddressError::Vsock)?,
|
||||
))
|
||||
} else {
|
||||
Err(ParseAddressError::MissingVsockPort)
|
||||
}
|
||||
} else if s.starts_with(UNIX) {
|
||||
if s.len() > UNIX.len() {
|
||||
Ok(ListenAddress::Unix(
|
||||
s[UNIX.len()..].parse().map_err(ParseAddressError::Unix)?,
|
||||
))
|
||||
} else {
|
||||
Err(ParseAddressError::MissingUnixPath)
|
||||
}
|
||||
} else {
|
||||
Ok(ListenAddress::Net(
|
||||
s.parse().map_err(ParseAddressError::Net)?,
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Error {
|
||||
Address(ParseAddressError),
|
||||
Argument(getopts::Fail),
|
||||
Cid(ParseIntError),
|
||||
IO(io::Error),
|
||||
MissingAcceptCid,
|
||||
Syslog(syslog::Error),
|
||||
}
|
||||
|
||||
impl fmt::Display for Error {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
match self {
|
||||
&Error::Address(ref e) => e.fmt(f),
|
||||
&Error::Argument(ref e) => e.fmt(f),
|
||||
&Error::Cid(ref e) => write!(f, "invalid cid value: {}", e),
|
||||
&Error::IO(ref e) => e.fmt(f),
|
||||
&Error::MissingAcceptCid => write!(f, "`accept_cid` is required for vsock servers"),
|
||||
&Error::Syslog(ref e) => write!(f, "failed to initialize syslog: {:?}", e),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
type Result<T> = result::Result<T, Error>;
|
||||
|
||||
fn handle_client<R: io::Read, W: io::Write>(
|
||||
root: Arc<str>,
|
||||
mut reader: R,
|
||||
mut writer: W,
|
||||
) -> io::Result<()> {
|
||||
let mut server = p9::Server::new(&*root);
|
||||
|
||||
loop {
|
||||
server.handle_message(&mut reader, &mut writer)?;
|
||||
}
|
||||
}
|
||||
|
||||
fn run_vsock_server(root: Arc<str>, port: c_uint, accept_cid: c_uint) -> io::Result<()> {
|
||||
let listener = VsockListener::bind(port)?;
|
||||
|
||||
loop {
|
||||
let (stream, peer) = listener.accept()?;
|
||||
|
||||
if accept_cid != peer.cid {
|
||||
warn!("ignoring connection from {}:{}", peer.cid, peer.port);
|
||||
continue;
|
||||
}
|
||||
|
||||
info!("accepted connection from {}:{}", peer.cid, peer.port);
|
||||
let reader = BufReader::with_capacity(DEFAULT_BUFFER_SIZE, stream.try_clone()?);
|
||||
let writer = BufWriter::with_capacity(DEFAULT_BUFFER_SIZE, stream);
|
||||
let server_root = root.clone();
|
||||
thread::spawn(move || {
|
||||
if let Err(e) = handle_client(server_root, reader, writer) {
|
||||
error!(
|
||||
"error while handling client {}:{}: {}",
|
||||
peer.cid, peer.port, e
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let mut opts = getopts::Options::new();
|
||||
opts.optopt(
|
||||
"",
|
||||
"accept_cid",
|
||||
"only accept connections from this vsock context id",
|
||||
"CID",
|
||||
);
|
||||
opts.optopt(
|
||||
"r",
|
||||
"root",
|
||||
"root directory for clients (default is \"/\")",
|
||||
"PATH",
|
||||
);
|
||||
opts.optflag("h", "help", "print this help menu");
|
||||
|
||||
let matches = opts
|
||||
.parse(std::env::args_os().skip(1))
|
||||
.map_err(Error::Argument)?;
|
||||
|
||||
if matches.opt_present("h") || matches.free.len() == 0 {
|
||||
print!("{}", opts.usage(USAGE));
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
syslog::init().map_err(Error::Syslog)?;
|
||||
|
||||
let root: Arc<str> = Arc::from(matches.opt_str("r").unwrap_or_else(|| "/".into()));
|
||||
|
||||
// We already checked that |matches.free| has at least one item.
|
||||
match matches.free[0]
|
||||
.parse::<ListenAddress>()
|
||||
.map_err(Error::Address)?
|
||||
{
|
||||
ListenAddress::Vsock(port) => {
|
||||
let accept_cid = if let Some(cid) = matches.opt_str("accept_cid") {
|
||||
cid.parse::<c_uint>().map_err(Error::Cid)
|
||||
} else {
|
||||
Err(Error::MissingAcceptCid)
|
||||
}?;
|
||||
run_vsock_server(root, port, accept_cid).map_err(Error::IO)?;
|
||||
}
|
||||
ListenAddress::Net(_) => {
|
||||
error!("Network server unimplemented");
|
||||
}
|
||||
ListenAddress::Unix(_) => {
|
||||
error!("Unix server unimplemented");
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
197
9s/src/vsock.rs
197
9s/src/vsock.rs
|
@ -1,197 +0,0 @@
|
|||
// Copyright 2018 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.
|
||||
|
||||
/// Support for virtual sockets.
|
||||
use std::io;
|
||||
use std::mem::{self, size_of};
|
||||
use std::os::raw::{c_int, c_uchar, c_uint, c_ushort};
|
||||
use std::os::unix::io::RawFd;
|
||||
|
||||
use assertions::const_assert;
|
||||
use libc::{self, c_void, sa_family_t, size_t, sockaddr, socklen_t};
|
||||
|
||||
// The domain for vsock sockets.
|
||||
const AF_VSOCK: sa_family_t = 40;
|
||||
|
||||
// Vsock equivalent of INADDR_ANY. Indicates the context id of the current endpoint.
|
||||
const VMADDR_CID_ANY: c_uint = c_uint::max_value();
|
||||
|
||||
// The number of bytes of padding to be added to the sockaddr_vm struct. Taken directly
|
||||
// from linux/vm_sockets.h.
|
||||
const PADDING: usize = size_of::<sockaddr>()
|
||||
- size_of::<sa_family_t>()
|
||||
- size_of::<c_ushort>()
|
||||
- (2 * size_of::<c_uint>());
|
||||
|
||||
#[repr(C)]
|
||||
struct sockaddr_vm {
|
||||
svm_family: sa_family_t,
|
||||
svm_reserved1: c_ushort,
|
||||
svm_port: c_uint,
|
||||
svm_cid: c_uint,
|
||||
svm_zero: [c_uchar; PADDING],
|
||||
}
|
||||
|
||||
/// An address associated with a virtual socket.
|
||||
pub struct SocketAddr {
|
||||
pub cid: c_uint,
|
||||
pub port: c_uint,
|
||||
}
|
||||
|
||||
/// A virtual stream socket.
|
||||
pub struct VsockStream {
|
||||
fd: RawFd,
|
||||
}
|
||||
|
||||
impl VsockStream {
|
||||
pub fn try_clone(&self) -> io::Result<VsockStream> {
|
||||
// Safe because this doesn't modify any memory and we check the return value.
|
||||
let dup_fd = unsafe { libc::fcntl(self.fd, libc::F_DUPFD_CLOEXEC, 0) };
|
||||
if dup_fd < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
Ok(VsockStream { fd: dup_fd })
|
||||
}
|
||||
}
|
||||
|
||||
impl io::Read for VsockStream {
|
||||
fn read(&mut self, buf: &mut [u8]) -> io::Result<usize> {
|
||||
// Safe because this will only modify the contents of |buf| and we check the return value.
|
||||
let ret = unsafe {
|
||||
handle_eintr_errno!(libc::read(
|
||||
self.fd,
|
||||
buf as *mut [u8] as *mut c_void,
|
||||
buf.len() as size_t
|
||||
))
|
||||
};
|
||||
if ret < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
Ok(ret as usize)
|
||||
}
|
||||
}
|
||||
|
||||
impl io::Write for VsockStream {
|
||||
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
|
||||
// Safe because this doesn't modify any memory and we check the return value.
|
||||
let ret = unsafe {
|
||||
handle_eintr_errno!(libc::write(
|
||||
self.fd,
|
||||
buf as *const [u8] as *const c_void,
|
||||
buf.len() as size_t,
|
||||
))
|
||||
};
|
||||
if ret < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
Ok(ret as usize)
|
||||
}
|
||||
|
||||
fn flush(&mut self) -> io::Result<()> {
|
||||
// No buffered data so nothing to do.
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for VsockStream {
|
||||
fn drop(&mut self) {
|
||||
// Safe because this doesn't modify any memory and we are the only
|
||||
// owner of the file descriptor.
|
||||
unsafe { libc::close(self.fd) };
|
||||
}
|
||||
}
|
||||
|
||||
/// Represents a virtual socket server.
|
||||
pub struct VsockListener {
|
||||
fd: RawFd,
|
||||
}
|
||||
|
||||
impl VsockListener {
|
||||
/// Creates a new `VsockListener` bound to the specified port on the current virtual socket
|
||||
/// endpoint.
|
||||
pub fn bind(port: c_uint) -> io::Result<VsockListener> {
|
||||
const_assert!(size_of::<sockaddr_vm>() == size_of::<sockaddr>());
|
||||
|
||||
// Safe because this doesn't modify any memory and we check the return value.
|
||||
let fd: RawFd =
|
||||
unsafe { libc::socket(AF_VSOCK as c_int, libc::SOCK_STREAM | libc::SOCK_CLOEXEC, 0) };
|
||||
if fd < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
// Safe because we are zero-initializing a struct with only integer fields.
|
||||
let mut svm: sockaddr_vm = unsafe { mem::zeroed() };
|
||||
svm.svm_family = AF_VSOCK;
|
||||
svm.svm_cid = VMADDR_CID_ANY;
|
||||
svm.svm_port = port;
|
||||
|
||||
// Safe because this doesn't modify any memory and we check the return value.
|
||||
let ret = unsafe {
|
||||
libc::bind(
|
||||
fd,
|
||||
&svm as *const sockaddr_vm as *const sockaddr,
|
||||
size_of::<sockaddr_vm>() as socklen_t,
|
||||
)
|
||||
};
|
||||
if ret < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
// Safe because this doesn't modify any memory and we check the return value.
|
||||
let ret = unsafe { libc::listen(fd, 1) };
|
||||
if ret < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
Ok(VsockListener { fd })
|
||||
}
|
||||
|
||||
/// Accepts a new incoming connection on this listener. Blocks the calling thread until a
|
||||
/// new connection is established. When established, returns the corresponding `VsockStream`
|
||||
/// and the remote peer's address.
|
||||
pub fn accept(&self) -> io::Result<(VsockStream, SocketAddr)> {
|
||||
// Safe because we are zero-initializing a struct with only integer fields.
|
||||
let mut svm: sockaddr_vm = unsafe { mem::zeroed() };
|
||||
|
||||
// Safe because this will only modify |svm| and we check the return value.
|
||||
let mut socklen: socklen_t = size_of::<sockaddr_vm>() as socklen_t;
|
||||
let fd = unsafe {
|
||||
libc::accept4(
|
||||
self.fd,
|
||||
&mut svm as *mut sockaddr_vm as *mut sockaddr,
|
||||
&mut socklen as *mut socklen_t,
|
||||
libc::SOCK_CLOEXEC,
|
||||
)
|
||||
};
|
||||
if fd < 0 {
|
||||
return Err(io::Error::last_os_error());
|
||||
}
|
||||
|
||||
if svm.svm_family != AF_VSOCK {
|
||||
return Err(io::Error::new(
|
||||
io::ErrorKind::InvalidData,
|
||||
format!("unexpected address family: {}", svm.svm_family),
|
||||
));
|
||||
}
|
||||
|
||||
Ok((
|
||||
VsockStream { fd },
|
||||
SocketAddr {
|
||||
cid: svm.svm_cid,
|
||||
port: svm.svm_port,
|
||||
},
|
||||
))
|
||||
}
|
||||
}
|
||||
|
||||
impl Drop for VsockListener {
|
||||
fn drop(&mut self) {
|
||||
// Safe because this doesn't modify any memory and we are the only
|
||||
// owner of the file descriptor.
|
||||
unsafe { libc::close(self.fd) };
|
||||
}
|
||||
}
|
68
Cargo.lock
generated
68
Cargo.lock
generated
|
@ -1,14 +1,3 @@
|
|||
[[package]]
|
||||
name = "9s"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"assertions 0.1.0",
|
||||
"getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"p9 0.1.0",
|
||||
"sys_util 0.1.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "aarch64"
|
||||
version = "0.1.0"
|
||||
|
@ -56,7 +45,7 @@ dependencies = [
|
|||
name = "bit_field_derive"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -68,12 +57,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "cc"
|
||||
version = "1.0.15"
|
||||
version = "1.0.25"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "cfg-if"
|
||||
version = "0.1.2"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
|
@ -157,8 +146,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "getopts"
|
||||
version = "0.2.17"
|
||||
version = "0.2.18"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "gpu_buffer"
|
||||
|
@ -172,7 +164,7 @@ dependencies = [
|
|||
name = "gpu_display"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"data_model 0.1.0",
|
||||
"libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"sys_util 0.1.0",
|
||||
|
@ -234,17 +226,17 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
|
||||
[[package]]
|
||||
name = "log"
|
||||
version = "0.4.1"
|
||||
version = "0.4.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "msg_on_socket_derive"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -291,7 +283,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
name = "plugin_proto"
|
||||
version = "0.16.0"
|
||||
dependencies = [
|
||||
"cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"kvm_sys 0.1.0",
|
||||
"protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"protoc-rust 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -301,14 +293,14 @@ dependencies = [
|
|||
name = "poll_token_derive"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "proc-macro2"
|
||||
version = "0.4.24"
|
||||
version = "0.4.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
|
@ -324,7 +316,7 @@ name = "protoc"
|
|||
version = "1.4.3"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -334,7 +326,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||
dependencies = [
|
||||
"protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"protoc 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"tempdir 0.3.5",
|
||||
"tempdir 0.3.7",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -350,7 +342,7 @@ dependencies = [
|
|||
name = "qcow_utils"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"qcow 0.1.0",
|
||||
"sys_util 0.1.0",
|
||||
|
@ -361,7 +353,7 @@ name = "quote"
|
|||
version = "0.6.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
|
@ -383,7 +375,7 @@ name = "syn"
|
|||
version = "0.15.21"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -409,11 +401,16 @@ version = "0.1.0"
|
|||
|
||||
[[package]]
|
||||
name = "tempdir"
|
||||
version = "0.3.5"
|
||||
version = "0.3.7"
|
||||
dependencies = [
|
||||
"rand_ish 0.1.0",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "unicode-width"
|
||||
version = "0.1.5"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
|
||||
[[package]]
|
||||
name = "unicode-xid"
|
||||
version = "0.1.0"
|
||||
|
@ -463,7 +460,7 @@ dependencies = [
|
|||
name = "wire_format_derive"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
]
|
||||
|
@ -474,7 +471,7 @@ version = "0.1.0"
|
|||
dependencies = [
|
||||
"arch 0.1.0",
|
||||
"byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)",
|
||||
"data_model 0.1.0",
|
||||
"devices 0.1.0",
|
||||
"io_jail 0.1.0",
|
||||
|
@ -490,16 +487,17 @@ dependencies = [
|
|||
|
||||
[metadata]
|
||||
"checksum byteorder 1.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ff81738b726f5d099632ceaffe7fb65b90212e8dce59d518729e7e8634032d3d"
|
||||
"checksum cc 1.0.15 (registry+https://github.com/rust-lang/crates.io-index)" = "0ebb87d1116151416c0cf66a0e3fb6430cccd120fd6300794b4dfaa050ac40ba"
|
||||
"checksum cfg-if 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c819a1287eb618df47cc647173c5c4c66ba19d888a6e50d605672aed3140de"
|
||||
"checksum getopts 0.2.17 (registry+https://github.com/rust-lang/crates.io-index)" = "b900c08c1939860ce8b54dc6a89e26e00c04c380fd0e09796799bd7f12861e05"
|
||||
"checksum cc 1.0.25 (registry+https://github.com/rust-lang/crates.io-index)" = "f159dfd43363c4d08055a07703eb7a3406b0dac4d0584d96965a3262db3c9d16"
|
||||
"checksum cfg-if 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "0c4e7bb64a8ebb0d856483e1e682ea3422f883c5f5615a90d51a2c82fe87fdd3"
|
||||
"checksum getopts 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)" = "0a7292d30132fb5424b354f5dc02512a86e4c516fe544bb7a25e7f266951b797"
|
||||
"checksum libc 0.2.44 (registry+https://github.com/rust-lang/crates.io-index)" = "10923947f84a519a45c8fefb7dd1b3e8c08747993381adee176d7a82b4195311"
|
||||
"checksum log 0.4.1 (registry+https://github.com/rust-lang/crates.io-index)" = "89f010e843f2b1a31dbd316b3b8d443758bc634bed37aabade59c686d644e0a2"
|
||||
"checksum log 0.4.5 (registry+https://github.com/rust-lang/crates.io-index)" = "d4fcce5fa49cc693c312001daf1d13411c4a5283796bac1084299ea3e567113f"
|
||||
"checksum pkg-config 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)" = "110d5ee3593dbb73f56294327fe5668bcc997897097cbc76b51e7aed3f52452f"
|
||||
"checksum proc-macro2 0.4.24 (registry+https://github.com/rust-lang/crates.io-index)" = "77619697826f31a02ae974457af0b29b723e5619e113e9397b8b82c6bd253f09"
|
||||
"checksum proc-macro2 0.4.21 (registry+https://github.com/rust-lang/crates.io-index)" = "ab2fc21ba78ac73e4ff6b3818ece00be4e175ffbef4d0a717d978b48b24150c4"
|
||||
"checksum protobuf 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bec26e67194b7d991908145fdf21b7cae8b08423d96dcb9e860cd31f854b9506"
|
||||
"checksum protoc 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "5379c34ea2f9c69b99e6f25f6d0e6619876195ae7a3dcaf69f66bdb6c2e4dceb"
|
||||
"checksum protoc-rust 1.4.3 (registry+https://github.com/rust-lang/crates.io-index)" = "e211a7f56b2d020a59d483f652cfdfa6fd42e37bf544c0231e373807aa316c45"
|
||||
"checksum quote 0.6.10 (registry+https://github.com/rust-lang/crates.io-index)" = "53fa22a1994bd0f9372d7a816207d8a2677ad0325b073f5c5332760f0fb62b5c"
|
||||
"checksum syn 0.15.21 (registry+https://github.com/rust-lang/crates.io-index)" = "816b7af21405b011a23554ea2dc3f6576dc86ca557047c34098c1d741f10f823"
|
||||
"checksum unicode-width 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "882386231c45df4700b275c7ff55b6f3698780a650026380e72dabe76fa46526"
|
||||
"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc"
|
||||
|
|
|
@ -9,7 +9,7 @@ panic = 'abort'
|
|||
overflow-checks = true
|
||||
|
||||
[workspace]
|
||||
members = ["9s", "qcow_utils"]
|
||||
members = ["qcow_utils"]
|
||||
exclude = [
|
||||
"assertions",
|
||||
"data_model",
|
||||
|
|
|
@ -9,4 +9,4 @@ libc = "*"
|
|||
sys_util = { path = "../sys_util" }
|
||||
|
||||
[build-dependencies]
|
||||
cc = "=1.0.15"
|
||||
cc = "=1.0.25"
|
||||
|
|
|
@ -9,5 +9,5 @@ protobuf = "*"
|
|||
kvm_sys = { path = "../kvm_sys" }
|
||||
|
||||
[build-dependencies]
|
||||
cc = "=1.0.15"
|
||||
cc = "=1.0.25"
|
||||
protoc-rust = "=1.4.3"
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "tempdir"
|
||||
version = "0.3.5"
|
||||
version = "0.3.7"
|
||||
authors = ["The Chromium OS Authors"]
|
||||
|
||||
[dependencies]
|
||||
|
|
|
@ -20,5 +20,5 @@ libc = "*"
|
|||
byteorder = "*"
|
||||
|
||||
[build-dependencies]
|
||||
cc = "=1.0.15"
|
||||
cc = "=1.0.25"
|
||||
|
||||
|
|
Loading…
Reference in a new issue