From 33be6f1695e8bd450be2e22fbf88b826488186a1 Mon Sep 17 00:00:00 2001 From: Hugo Mills Date: Sun, 30 Oct 2011 20:17:07 +0000 Subject: [PATCH 07/35] Fix sub snap parameter handling btrfs sub snap uses a local copy of optind, which causes the number of parameters to be miscounted, preventing it from working properly. This patch, originally from Arne Jansen , fixes it. Signed-off-by: Hugo Mills --- btrfs_cmds.c | 23 ++++++++++++----------- 1 files changed, 12 insertions(+), 11 deletions(-) diff --git a/btrfs_cmds.c b/btrfs_cmds.c index b59e9cb..9252ffa 100644 --- a/btrfs_cmds.c +++ b/btrfs_cmds.c @@ -304,7 +304,8 @@ int do_subvol_list(int argc, char **argv) int ret; int print_parent = 0; char *subvol; - int optind = 1; + + optind = 1; while(1) { int c = getopt(argc, argv, "p"); @@ -312,7 +313,6 @@ int do_subvol_list(int argc, char **argv) switch(c) { case 'p': print_parent = 1; - optind++; break; } } @@ -347,11 +347,13 @@ int do_subvol_list(int argc, char **argv) int do_clone(int argc, char **argv) { - char *subvol, *dst; - int res, fd, fddst, len, e, optind = 0, readonly = 0; - char *newname; - char *dstdir; - struct btrfs_ioctl_vol_args_v2 args; + char *subvol, *dst; + int res, fd, fddst, len, e, readonly = 0; + char *newname; + char *dstdir; + struct btrfs_ioctl_vol_args_v2 args; + + optind = 1; memset(&args, 0, sizeof(args)); @@ -362,7 +364,6 @@ int do_clone(int argc, char **argv) break; switch (c) { case 'r': - optind++; readonly = 1; break; default: @@ -372,14 +373,14 @@ int do_clone(int argc, char **argv) return 1; } } - if (argc - optind != 3) { + if (argc - optind != 2) { fprintf(stderr, "Invalid arguments for subvolume snapshot\n"); free(argv); return 1; } - subvol = argv[optind+1]; - dst = argv[optind+2]; + subvol = argv[optind]; + dst = argv[optind+1]; res = test_issubvolume(subvol); if(res<0){ -- 1.7.6.233.gd79bc