diff options
| author | Tobias Bucher <tobiasbucher5991@gmail.com> | 2016-06-04 20:09:19 +0200 |
|---|---|---|
| committer | Tobias Bucher <tobiasbucher5991@gmail.com> | 2016-06-29 11:39:56 +0200 |
| commit | a03a82e5e0ae59b0c0b11b671e058fda9f7bb3d0 (patch) | |
| tree | a986dcf5b6a79d2013a078159e4d2ac0a358d610 /src/libstd/sys/common | |
| parent | d6237cefcb9fae0286a920b182e9bbc928a57c8a (diff) | |
| download | rust-a03a82e5e0ae59b0c0b11b671e058fda9f7bb3d0.tar.gz rust-a03a82e5e0ae59b0c0b11b671e058fda9f7bb3d0.zip | |
Convert a simple tail call to a loop
Diffstat (limited to 'src/libstd/sys/common')
| -rw-r--r-- | src/libstd/sys/common/net.rs | 24 |
1 files changed, 14 insertions, 10 deletions
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<SocketAddr> { - 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, + } + } } } } |
