path: root/cmds-send.c
diff options
authorQu Wenruo <>2018-06-20 08:38:38 +0800
committerDavid Sterba <>2018-08-06 14:59:45 +0200
commit7fb70440cff73c57a2b3a53f22a6ff023718ea39 (patch)
treee48ad8925cf4bb7b64b73e93cca4ad7efad1a365 /cmds-send.c
parent8aee4b000d4fdf30cab167d5cf78b413af155098 (diff)
btrfs-progs: Fix wrong optind re-initialization to allow mixed option and non-option
In function handle_global_options(), we reset @optind to 1. However according to man page of getopt(3) NOTES section, if we need to rescan options later, @optind should be reset to 0 to initialize the internal variables correctly. This explains the reason why in cmd_check(), getopt_long() doesn't handle the following command correctly: "btrfs check /dev/data/btrfs --check-data-csum" While mkfs.btrfs handles mixed non-option and option correctly: "mkfs.btrfs -f /dev/data/disk1 --data raid1 /dev/data/disk2" Cc: Paul Jones <> Cc: Hugo Mills <> Fixes: 010ceab56e06 ("btrfs-progs: rework option parser to use getopt for global options") Signed-off-by: Qu Wenruo <> Signed-off-by: David Sterba <>
Diffstat (limited to 'cmds-send.c')
1 files changed, 1 insertions, 0 deletions
diff --git a/cmds-send.c b/cmds-send.c
index c5ecdaa1..16b9f8d2 100644
--- a/cmds-send.c
+++ b/cmds-send.c
@@ -508,6 +508,7 @@ int cmd_send(int argc, char **argv)
send.dump_fd = fileno(stdout);
outname[0] = 0;
+ optind = 0;
while (1) {
enum { GETOPT_VAL_SEND_NO_DATA = 256 };
static const struct option long_options[] = {