Skip to contentSkip to conversation

Btrfs-progs: fix arg parsing for btrfs qgroup limit commands

PATCH New Miao Xie 1 participant 1 message Nov 8, 2012 1 message not in the archive Btrfs file system

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): [email protected]

Miao Xie

author
#1 lore raw

PATCH 1/3 Btrfs-progs: fix arg parsing for btrfs qgroup limit commands

From: Wang Shilong <[email protected]>

We can use this command in two ways.
1. btrfs qgroup limit size qgroupid path
2. btrfs qgroup limit size path

Before applying this patch, we differentiate them by check the parsing result of the second argument. It is not so good because it may make some mistakes, For example:
btrfs qgroup limit 1M 123456
^ It is a subvolume name.

In fact, we can differentiate them just by the number of arguments, so fix it by this way.

---
 cmds-qgroup.c |   14 ++++++--------
 1 files changed, 6 insertions(+), 8 deletions(-)
cmds-qgroup.c +6 -8
index 1525c11..129a4f0 100644
@@ -383,7 +383,6 @@ static int cmd_qgroup_limit(int argc, char **argv)
 	}
 
 	memset(&args, 0, sizeof(args));
-	args.qgroupid = parse_qgroupid(argv[optind + 1]);
 	if (size) {
 		if (compressed)
 			args.lim.flags |= BTRFS_QGROUP_LIMIT_RFER_CMPR |
@@ -397,9 +396,8 @@ static int cmd_qgroup_limit(int argc, char **argv)
 		}
 	}
 
-	if (args.qgroupid == 0) {
-		if (check_argc_exact(argc - optind, 2))
-			usage(cmd_qgroup_limit_usage);
+	if (argc - optind == 2) {
+		args.qgroupid = 0;
 		path = argv[optind + 1];
 		ret = test_issubvolume(path);
 		if (ret < 0) {
@@ -415,11 +413,11 @@ static int cmd_qgroup_limit(int argc, char **argv)
 		 * keep qgroupid at 0, this indicates that the subvolume the
 		 * fd refers to is to be limited
 		 */
-	} else {
-		if (check_argc_exact(argc - optind, 3))
-			usage(cmd_qgroup_limit_usage);
+	} else if (argc - optind == 3) {
+		args.qgroupid = parse_qgroupid(argv[optind + 1]);
 		path = argv[optind + 2];
-	}
+	} else
+		usage(cmd_qgroup_limit_usage);
 
 	fd = open_file_or_dir(path);
 	if (fd < 0) {

-- 1.7.7.6