summary refs log tree commit diff
path: root/src/libextra
diff options
context:
space:
mode:
authorDmitry Ermolov <epdmitry@yandex.ru>2013-07-30 23:26:52 +0400
committerDmitry Ermolov <epdmitry@yandex.ru>2013-07-30 23:26:52 +0400
commited0f0149350be8363f93be243fe9d85e72d30fae (patch)
treec24da20d82f871ee3cfbc3de450993ccdc462ed3 /src/libextra
parent0ed8713d79048ef865f8cbdcd2d2939190c75c2a (diff)
downloadrust-ed0f0149350be8363f93be243fe9d85e72d30fae.tar.gz
rust-ed0f0149350be8363f93be243fe9d85e72d30fae.zip
Fix opts_str.
opt_val doesn't not fail! for missing options.

Closes #6492
Diffstat (limited to 'src/libextra')
-rw-r--r--src/libextra/getopts.rs16
1 files changed, 13 insertions, 3 deletions
diff --git a/src/libextra/getopts.rs b/src/libextra/getopts.rs
index 0ae4887f783..7e6551fbf5b 100644
--- a/src/libextra/getopts.rs
+++ b/src/libextra/getopts.rs
@@ -369,7 +369,14 @@ fn opt_vals(mm: &Matches, nm: &str) -> ~[Optval] {
     };
 }
 
-fn opt_val(mm: &Matches, nm: &str) -> Optval { opt_vals(mm, nm)[0].clone() }
+fn opt_val(mm: &Matches, nm: &str) -> Option<Optval> {
+    let vals = opt_vals(mm, nm);
+    if (vals.is_empty()) {
+        None
+    } else {
+        Some(opt_vals(mm, nm)[0].clone())
+    }
+}
 
 /// Returns true if an option was matched
 pub fn opt_present(mm: &Matches, nm: &str) -> bool {
@@ -400,7 +407,10 @@ pub fn opts_present(mm: &Matches, names: &[~str]) -> bool {
  * argument
  */
 pub fn opt_str(mm: &Matches, nm: &str) -> ~str {
-    return match opt_val(mm, nm) { Val(s) => s, _ => fail!() };
+    return match opt_val(mm, nm) {
+        Some(Val(s)) => s,
+        _ => fail!()
+    };
 }
 
 /**
@@ -412,7 +422,7 @@ pub fn opt_str(mm: &Matches, nm: &str) -> ~str {
 pub fn opts_str(mm: &Matches, names: &[~str]) -> ~str {
     for names.iter().advance |nm| {
         match opt_val(mm, *nm) {
-          Val(ref s) => return (*s).clone(),
+          Some(Val(ref s)) => return (*s).clone(),
           _ => ()
         }
     }