diff options
| author | bors <bors@rust-lang.org> | 2015-12-05 17:58:46 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2015-12-05 17:58:46 +0000 |
| commit | 9f715e98925adbf205bccd8a044266c77197db50 (patch) | |
| tree | 6f37003ab38f788d24d60c858883edb7aa1f1caf /src/libstd | |
| parent | d75f861518cb3b43acd1ae774fd13605a5dfd2d9 (diff) | |
| parent | 507d8caf6de6d38d5cef80b9d129ae3856da3583 (diff) | |
| download | rust-9f715e98925adbf205bccd8a044266c77197db50.tar.gz rust-9f715e98925adbf205bccd8a044266c77197db50.zip | |
Auto merge of #30215 - SimonSapin:ipv6-display-alloc, r=brson
Diffstat (limited to 'src/libstd')
| -rw-r--r-- | src/libstd/net/ip.rs | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs index c657a7aa0bd..c643c069971 100644 --- a/src/libstd/net/ip.rs +++ b/src/libstd/net/ip.rs @@ -13,8 +13,6 @@ be stable", issue = "27709")] -use prelude::v1::*; - use cmp::Ordering; use fmt; use hash; @@ -446,17 +444,19 @@ impl fmt::Display for Ipv6Addr { let (zeros_at, zeros_len) = find_zero_slice(&self.segments()); if zeros_len > 1 { - fn fmt_subslice(segments: &[u16]) -> String { - segments - .iter() - .map(|&seg| format!("{:x}", seg)) - .collect::<Vec<String>>() - .join(":") + fn fmt_subslice(segments: &[u16], fmt: &mut fmt::Formatter) -> fmt::Result { + if !segments.is_empty() { + try!(write!(fmt, "{:x}", segments[0])); + for &seg in &segments[1..] { + try!(write!(fmt, ":{:x}", seg)); + } + } + Ok(()) } - write!(fmt, "{}::{}", - fmt_subslice(&self.segments()[..zeros_at]), - fmt_subslice(&self.segments()[zeros_at + zeros_len..])) + try!(fmt_subslice(&self.segments()[..zeros_at], fmt)); + try!(fmt.write_str("::")); + fmt_subslice(&self.segments()[zeros_at + zeros_len..], fmt) } else { let &[a, b, c, d, e, f, g, h] = &self.segments(); write!(fmt, "{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}:{:x}", |
