From a03a82e5e0ae59b0c0b11b671e058fda9f7bb3d0 Mon Sep 17 00:00:00 2001 From: Tobias Bucher Date: Sat, 4 Jun 2016 20:09:19 +0200 Subject: Convert a simple tail call to a loop --- src/libstd/sys/common/net.rs | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) (limited to 'src/libstd/sys') diff --git a/src/libstd/sys/common/net.rs b/src/libstd/sys/common/net.rs index 3e2a0a8f39a..274e495d70e 100644 --- a/src/libstd/sys/common/net.rs +++ b/src/libstd/sys/common/net.rs @@ -121,16 +121,20 @@ pub struct LookupHost { impl Iterator for LookupHost { type Item = SocketAddr; fn next(&mut self) -> Option { - let result; - unsafe { - if self.cur.is_null() { return None } - result = sockaddr_to_addr(mem::transmute((*self.cur).ai_addr), - (*self.cur).ai_addrlen as usize).ok(); - self.cur = (*self.cur).ai_next as *mut c::addrinfo; - } - match result { - Some(r) => Some(r), - None => self.next(), + loop { + unsafe { + let cur = match self.cur.as_ref() { + None => return None, + Some(c) => c, + }; + self.cur = cur.ai_next; + match sockaddr_to_addr(mem::transmute(cur.ai_addr), + cur.ai_addrlen as usize) + { + Ok(addr) => return Some(addr), + Err(_) => continue, + } + } } } } -- cgit 1.4.1-3-g733a5