diff options
author | Gui Hecheng <guihc.fnst@cn.fujitsu.com> | 2014-06-24 11:16:12 +0800 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-08-22 14:43:10 +0200 |
commit | 08b0fdced1af19e6c10c94a74ec8fb9e64562def (patch) | |
tree | c880e2a65486cf357ec7b8dec30569de83aeba2d | |
parent | 729c0da10338caba5be7c22b842610223d661883 (diff) |
btrfs-progs: deal with invalid option combinations for btrfs-image
For btrfs-image,
dump may not come with option '-o'
-r may not come with option '-c', '-s', '-w', dev_cnt != 1
-m may not come with dev_cnt < 2
All of the above should be regarded as invalid combinations,
and the usage will show up.
Signed-off-by: Gui Hecheng <guihc.fnst@cn.fujitsu.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
-rw-r--r-- | btrfs-image.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/btrfs-image.c b/btrfs-image.c index c9dd0232..8ad488d5 100644 --- a/btrfs-image.c +++ b/btrfs-image.c @@ -2463,6 +2463,7 @@ int main(int argc, char *argv[]) int ret; int sanitize = 0; int dev_cnt = 0; + int usage_error = 0; FILE *out; while (1) { @@ -2501,15 +2502,30 @@ int main(int argc, char *argv[]) } } - if ((old_restore) && create) - print_usage(); - argc = argc - optind; dev_cnt = argc - 1; - if (multi_devices && dev_cnt < 2) - print_usage(); - if (!multi_devices && dev_cnt != 1) + if (create) { + if (old_restore) { + fprintf(stderr, "Usage error: create and restore cannot be used at the same time\n"); + usage_error++; + } + } else { + if (walk_trees || sanitize || compress_level) { + fprintf(stderr, "Usage error: use -w, -s, -c options for restore makes no sense\n"); + usage_error++; + } + if (multi_devices && dev_cnt < 2) { + fprintf(stderr, "Usage error: not enough devices specified for -m option\n"); + usage_error++; + } + if (!multi_devices && dev_cnt != 1) { + fprintf(stderr, "Usage error: accepts only 1 device without -m option\n"); + usage_error++; + } + } + + if (usage_error) print_usage(); source = argv[optind]; |