diff options
| author | Dmitry Ermolov <epdmitry@yandex.ru> | 2013-07-30 23:26:52 +0400 |
|---|---|---|
| committer | Dmitry Ermolov <epdmitry@yandex.ru> | 2013-07-30 23:26:52 +0400 |
| commit | ed0f0149350be8363f93be243fe9d85e72d30fae (patch) | |
| tree | c24da20d82f871ee3cfbc3de450993ccdc462ed3 /src/libextra | |
| parent | 0ed8713d79048ef865f8cbdcd2d2939190c75c2a (diff) | |
| download | rust-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.rs | 16 |
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(), _ => () } } |
