summary refs log tree commit diff
path: root/src/argument.rs
diff options
context:
space:
mode:
authorDmitry Torokhov <dtor@chromium.org>2019-12-18 17:42:24 -0800
committerCommit Bot <commit-bot@chromium.org>2019-12-22 10:55:04 +0000
commit9daf7907a36f356fe5c6677e67728b2aa6478fd8 (patch)
tree9f46892903c18fd1877e79acfec3305a4bd7a1b4 /src/argument.rs
parentd65265c63665ee00c8df83c2613e7dbb7b32a3de (diff)
downloadcrosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.tar
crosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.tar.gz
crosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.tar.bz2
crosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.tar.lz
crosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.tar.xz
crosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.tar.zst
crosvm-9daf7907a36f356fe5c6677e67728b2aa6478fd8.zip
When parsing --parameter <value> argument do not clobber parser errors
When parsing arguments in form of "--parameter <value>", because it is
yet unclear whether the parameter needs a value or not, we first try to
parse it together with the next argument, and if that fails, try to
parse it standalone. If both fail, then we should take the error from
the first one, as it is more informative. This way, doing

	crosvm run --plugin ... --plugin-mount bin --plugin-mount lib

will fail with error that "bin is not absolute path" and not that value
is missing for "--plugin-mount".

BUG=None
TEST=cargo test

Change-Id: Icc3bb0fcab4fb90e38eff3d116679091b598120d
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/1975096
Commit-Queue: Dmitry Torokhov <dtor@chromium.org>
Reviewed-by: Dylan Reid <dgreid@chromium.org>
Tested-by: kokoro <noreply+kokoro@google.com>
Diffstat (limited to 'src/argument.rs')
-rw-r--r--src/argument.rs4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/argument.rs b/src/argument.rs
index c933037..2d32083 100644
--- a/src/argument.rs
+++ b/src/argument.rs
@@ -299,9 +299,9 @@ where
                         arg_consumed = false;
                         f(&name, None)?;
                     } else {
-                        if let Err(_) = f(&name, Some(&arg)) {
+                        if let Err(e) = f(&name, Some(&arg)) {
                             arg_consumed = false;
-                            f(&name, None)?;
+                            f(&name, None).map_err(|_| e)?;
                         }
                     }
                     State::Top