X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cmds-property.c;h=03bafa054701bea1609c0c30ab7d6b97804d5c88;hb=7cdd58b2e92863f055c70ef7134d3a70760473c7;hp=27631d6cf3429630430620115554e6540d077923;hpb=28831d54895443e5fc795392f23ce3a8b122cb71;p=platform%2Fupstream%2Fbtrfs-progs.git diff --git a/cmds-property.c b/cmds-property.c index 27631d6..03bafa0 100644 --- a/cmds-property.c +++ b/cmds-property.c @@ -26,41 +26,13 @@ #include "props.h" #include "ctree.h" #include "utils.h" +#include "help.h" static const char * const property_cmd_group_usage[] = { "btrfs property get/set/list [-t ] [] [value]", NULL }; -static const char * const cmd_property_get_usage[] = { - "btrfs property get [-t ] []", - "Gets a property from a btrfs object.", - "If no name is specified, all properties for the given object are", - "printed.", - "A filesystem object can be a the filesystem itself, a subvolume,", - "an inode or a device. The '-t ' option can be used to explicitly", - "specify what type of object you meant. This is only needed when a", - "property could be set for more then one object type. Possible types", - "are s[ubvol], f[ilesystem], i[node] and d[evice].", - NULL -}; - -static const char * const cmd_property_set_usage[] = { - "btrfs property set [-t ] ", - "Sets a property on a btrfs object.", - "Please see the help of 'btrfs property get' for a description of", - "objects and object types.", - NULL -}; - -static const char * const cmd_property_list_usage[] = { - "btrfs property list [-t ] ", - "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.", - NULL -}; - static int parse_prop(const char *arg, const struct prop_handler *props, const struct prop_handler **prop_ret) { @@ -76,36 +48,6 @@ static int parse_prop(const char *arg, const struct prop_handler *props, return -1; } -static int get_fsid(const char *path, u8 *fsid, int silent) -{ - int ret; - int fd; - struct btrfs_ioctl_fs_info_args args; - - fd = open(path, O_RDONLY); - if (fd < 0) { - ret = -errno; - if (!silent) - error("failed to open %s: %s", path, - strerror(-ret)); - goto out; - } - - ret = ioctl(fd, BTRFS_IOC_FS_INFO, &args); - if (ret < 0) { - ret = -errno; - goto out; - } - - memcpy(fsid, args.fsid, BTRFS_FSID_SIZE); - ret = 0; - -out: - if (fd != -1) - close(fd); - return ret; -} - static int check_btrfs_object(const char *object) { int ret; @@ -228,12 +170,6 @@ out: return ret; } -static int print_prop_help(const struct prop_handler *prop) -{ - fprintf(stdout, "%-20s%s\n", prop->name, prop->desc); - return 0; -} - static int dump_prop(const struct prop_handler *prop, const char *object, int types, @@ -246,7 +182,7 @@ static int dump_prop(const struct prop_handler *prop, if (!name_and_help) ret = prop->handler(type, object, prop->name, NULL); else - ret = print_prop_help(prop); + printf("%-20s%s\n", prop->name, prop->desc); } return ret; } @@ -323,10 +259,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 = 1; optind = 1; while (1) { @@ -343,6 +280,15 @@ static void parse_args(int argc, char **argv, } } + 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")) { @@ -362,19 +308,13 @@ static void parse_args(int argc, char **argv, } } - if (object && optind < argc) - *object = argv[optind++]; - if (name && optind < argc) + *object = argv[optind++]; + if (optind < argc) *name = argv[optind++]; - if (value && optind < argc) + if (optind < argc) *value = argv[optind++]; - if (optind != argc) { - error("unexpected agruments found"); - usage(usage_str); - } - - if (!*types && object && *object) { + if (!*types) { ret = autodetect_object_types(*object, types); if (ret < 0) { error("failed to detect object type: %s", @@ -388,6 +328,19 @@ static void parse_args(int argc, char **argv, } } +static const char * const cmd_property_get_usage[] = { + "btrfs property get [-t ] []", + "Gets a property from a btrfs object.", + "If no name is specified, all properties for the given object are", + "printed.", + "A filesystem object can be a the filesystem itself, a subvolume,", + "an inode or a device. The '-t ' option can be used to explicitly", + "specify what type of object you meant. This is only needed when a", + "property could be set for more then one object type. Possible types", + "are s[ubvol], f[ilesystem], i[node] and d[evice].", + NULL +}; + static int cmd_property_get(int argc, char **argv) { int ret; @@ -395,15 +348,8 @@ static int cmd_property_get(int argc, char **argv) char *name = NULL; int types = 0; - 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); - if (!object) { - error("invalid arguments"); - usage(cmd_property_set_usage); - } + NULL, 1); if (name) ret = setget_prop(types, object, name, NULL); @@ -413,6 +359,14 @@ static int cmd_property_get(int argc, char **argv) return ret; } +static const char * const cmd_property_set_usage[] = { + "btrfs property set [-t ] ", + "Sets a property on a btrfs object.", + "Please see the help of 'btrfs property get' for a description of", + "objects and object types.", + NULL +}; + static int cmd_property_set(int argc, char **argv) { int ret; @@ -421,36 +375,30 @@ static int cmd_property_set(int argc, char **argv) char *value = NULL; int types = 0; - 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); - if (!object || !name || !value) { - error("invalid arguments"); - usage(cmd_property_set_usage); - } + &object, &name, &value, 3); ret = setget_prop(types, object, name, value); return ret; } +static const char * const cmd_property_list_usage[] = { + "btrfs property list [-t ] ", + "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.", + NULL +}; + static int cmd_property_list(int argc, char **argv) { int ret; char *object = NULL; int types = 0; - 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); - if (!object) { - error("invalid arguments"); - usage(cmd_property_set_usage); - } + &types, &object, NULL, NULL, 1); ret = dump_props(types, object, 1);