summary refs log tree commit diff
path: root/src/libstd
diff options
context:
space:
mode:
authorMarijn Haverbeke <marijnh@gmail.com>2012-02-22 13:18:15 +0100
committerMarijn Haverbeke <marijnh@gmail.com>2012-02-22 13:18:15 +0100
commitffd50b9cdfa38bc80f2444d917eef5a02c38c32f (patch)
tree383a83ae49b7690a07d9b546e25b3b43a9adddbe /src/libstd
parent72373438d28eecfa565ad16bd84f800b8c8067c0 (diff)
downloadrust-ffd50b9cdfa38bc80f2444d917eef5a02c38c32f.tar.gz
rust-ffd50b9cdfa38bc80f2444d917eef5a02c38c32f.zip
Make the various from_str functions return options
So that they can be used with user input without causing task
failures.

Closes #1335
Diffstat (limited to 'src/libstd')
-rw-r--r--src/libstd/net.rs9
1 files changed, 6 insertions, 3 deletions
diff --git a/src/libstd/net.rs b/src/libstd/net.rs
index 68f8f29748a..2325598a2d3 100644
--- a/src/libstd/net.rs
+++ b/src/libstd/net.rs
@@ -49,10 +49,13 @@ Failure:
 String must be a valid IPv4 address
 */
 fn parse_addr(ip: str) -> ip_addr {
-    let parts = vec::map(str::split_byte(ip, "."[0]),
-                         {|s| uint::from_str(s) });
+    let parts = vec::map(str::split_byte(ip, "."[0]), {|s|
+        alt uint::from_str(s) {
+          some(n) if n <= 255u { n }
+          _ { fail "Invalid IP Address part." }
+        }
+    });
     if vec::len(parts) != 4u { fail "Too many dots in IP address"; }
-    for i in parts { if i > 255u { fail "Invalid IP Address part."; } }
     ipv4(parts[0] as u8, parts[1] as u8, parts[2] as u8, parts[3] as u8)
 }