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:
paulhsia 2019-01-18 20:00:36 +08:00 committed by chrome-bot
parent 284fcac560
commit b6d842fa56
9 changed files with 38 additions and 458 deletions

View file

@ -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" }

View file

@ -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(())
}

View file

@ -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
View file

@ -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"

View file

@ -9,7 +9,7 @@ panic = 'abort'
overflow-checks = true
[workspace]
members = ["9s", "qcow_utils"]
members = ["qcow_utils"]
exclude = [
"assertions",
"data_model",

View file

@ -9,4 +9,4 @@ libc = "*"
sys_util = { path = "../sys_util" }
[build-dependencies]
cc = "=1.0.15"
cc = "=1.0.25"

View file

@ -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"

View file

@ -1,6 +1,6 @@
[package]
name = "tempdir"
version = "0.3.5"
version = "0.3.7"
authors = ["The Chromium OS Authors"]
[dependencies]

View file

@ -20,5 +20,5 @@ libc = "*"
byteorder = "*"
[build-dependencies]
cc = "=1.0.15"
cc = "=1.0.25"