about summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorbors <bors@rust-lang.org>2015-12-05 17:58:46 +0000
committerbors <bors@rust-lang.org>2015-12-05 17:58:46 +0000
commit9f715e98925adbf205bccd8a044266c77197db50 (patch)
tree6f37003ab38f788d24d60c858883edb7aa1f1caf /src/libstd
parentd75f861518cb3b43acd1ae774fd13605a5dfd2d9 (diff)
parent507d8caf6de6d38d5cef80b9d129ae3856da3583 (diff)
downloadrust-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.rs22
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}",