Sorry, I forgot to add "btrfs-progs: " in the subject line.
---
"property" is considered as working without any options
from the following commit.
commit 176aeca9a148 ("btrfs-progs: add getopt stubs where needed")
However, we can pass -t option to this command.
* actual result
==================================================
$ ./btrfs prop list -t f /btrfs
btrfs property list: invalid option -- 't'
usage: btrfs property list [-t <type>] <object>
Lists available properties with their descriptions for the given object.
Please see the help of 'btrfs property get' for a description of
objects and object types.
==================================================
* expected result
==================================================
$ ./btrfs prop list -t f /btrfs
label Set/get label of device.
==================================================
Signed-off-by: Satoru Takeuchi <takeuchi_satoru@xxxxxxxxxxxxxx
---
v2: Reflect David's comment.
- Check the number of non-option arguments
---
cmds-property.c | 35 ++++++++++++++++-------------------
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/cmds-property.c b/cmds-property.c
index 5b4da26..eed5f4a 100644
--- a/cmds-property.c
+++ b/cmds-property.c
@@ -294,10 +294,11 @@ out:
static void parse_args(int argc, char **argv,
const char * const *usage_str,
int *types, char **object,
- char **name, char **value)
+ char **name, char **value, int min_nonopt_args)
{
int ret;
char *type_str = NULL;
+ int max_nonopt_args = 0;
optind = 1;
while (1) {
@@ -314,6 +315,17 @@ static void parse_args(int argc, char **argv,
}
}
+ if (object)
+ max_nonopt_args++;
+ if (name)
+ max_nonopt_args++;
+ if (value)
+ max_nonopt_args++;
+
+ if (check_argc_min(argc - optind, min_nonopt_args) ||
+ check_argc_max(argc - optind, max_nonopt_args))
+ usage(usage_str);
+
*types = 0;
if (type_str) {
if (!strcmp(type_str, "s") || !strcmp(type_str, "subvol")) {
@@ -379,13 +391,8 @@ static int cmd_property_get(int argc, char **argv)
char *name = NULL;
int types = 0;
- clean_args_no_options(argc, argv, cmd_property_get_usage);
-
- if (check_argc_min(argc, 2) || check_argc_max(argc, 5))
- usage(cmd_property_get_usage);
-
parse_args(argc, argv, cmd_property_get_usage, &types, &object, &name,
- NULL);
+ NULL, 1);
if (!object) {
error("invalid arguments");
usage(cmd_property_get_usage);
@@ -415,13 +422,8 @@ static int cmd_property_set(int argc, char **argv)
char *value = NULL;
int types = 0;
- clean_args_no_options(argc, argv, cmd_property_set_usage);
-
- if (check_argc_min(argc, 4) || check_argc_max(argc, 6))
- usage(cmd_property_set_usage);
-
parse_args(argc, argv, cmd_property_set_usage, &types,
- &object, &name, &value);
+ &object, &name, &value, 3);
if (!object || !name || !value) {
error("invalid arguments");
usage(cmd_property_set_usage);
@@ -446,13 +448,8 @@ static int cmd_property_list(int argc, char **argv)
char *object = NULL;
int types = 0;
- clean_args_no_options(argc, argv, cmd_property_list_usage);
-
- if (check_argc_min(argc, 2) || check_argc_max(argc, 4))
- usage(cmd_property_list_usage);
-
parse_args(argc, argv, cmd_property_list_usage,
- &types, &object, NULL, NULL);
+ &types, &object, NULL, NULL, 1);
if (!object) {
error("invalid arguments");
usage(cmd_property_list_usage);
--
2.5.0
--
To unsubscribe from this list: send the line "unsubscribe linux-btrfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html