Re: [PATCH 13/20] btrfs-progs: use cmd_struct as command entry point
On 3/7/18 9:40 PM, je...@suse.com wrote: > diff --git a/cmds-filesystem.c b/cmds-filesystem.c > index 62112705..ec038f2f 100644 > --- a/cmds-filesystem.c > +++ b/cmds-filesystem.c > @@ -1075,6 +1078,7 @@ next: > > return !!defrag_global_errors; > } > +static DEFINE_SIMPLE_COMMAND(filesystem_defrag, "defrag"); "defragment" -Jeff -- Jeff Mahoney SUSE Labs signature.asc Description: OpenPGP digital signature
Re: [PATCH 13/20] btrfs-progs: use cmd_struct as command entry point
On 3/7/18 9:40 PM, je...@suse.com wrote: > From: Jeff Mahoney> diff --git a/cmds-inspect.c b/cmds-inspect.c > index afd7fe48..12f200b3 100644 > --- a/cmds-inspect.c > +++ b/cmds-inspect.c > @@ -625,33 +629,27 @@ static int cmd_inspect_min_dev_size(int argc, char > **argv) > out: > return !!ret; > } > +static DEFINE_SIMPLE_COMMAND(inspect_min_dev_size, "min-dev-size"); > > static const char inspect_cmd_group_info[] = > "query various internal information"; > > -const struct cmd_group inspect_cmd_group = { > +static const struct cmd_group inspect_cmd_group = { > inspect_cmd_group_usage, inspect_cmd_group_info, { > - { "inode-resolve", cmd_inspect_inode_resolve, > - cmd_inspect_inode_resolve_usage, NULL, 0 }, > - { "logical-resolve", cmd_inspect_logical_resolve, > - cmd_inspect_logical_resolve_usage, NULL, 0 }, > - { "subvolid-resolve", cmd_inspect_subvolid_resolve, > - cmd_inspect_subvolid_resolve_usage, NULL, 0 }, > - { "rootid", cmd_inspect_rootid, cmd_inspect_rootid_usage, NULL, > - 0 }, > - { "min-dev-size", cmd_inspect_min_dev_size, > - cmd_inspect_min_dev_size_usage, NULL, 0 }, > - { "dump-tree", cmd_inspect_dump_tree, > - cmd_inspect_dump_tree_usage, NULL, 0 }, > - { "dump-super", cmd_inspect_dump_super, > - cmd_inspect_dump_super_usage, NULL, 0 }, > - { "tree-stats", cmd_inspect_tree_stats, > - cmd_inspect_tree_stats_usage, NULL, 0 }, > - NULL_CMD_STRUCT > + _struct_inspect_inode_resolve, > + _struct_inspect_logical_resolve, > + _struct_inspect_subvolid_resolve, > + _struct_inspect_rootid, > + _struct_inspect_min_dev_size, > + _struct_inspect_dump_tree, > + _struct_inspect_dump_super, > + _struct_inspect_tree_stats, > + NULL > } > }; > > -int cmd_inspect(int argc, char **argv) > +static int cmd_inspect(int argc, char **argv) > { > return handle_command_group(_cmd_group, argc, argv); > } > +DEFINE_GROUP_COMMAND(inspect, "inspect"); "inspect-internal" -Jeff -- Jeff Mahoney SUSE Labs signature.asc Description: OpenPGP digital signature
[PATCH 13/20] btrfs-progs: use cmd_struct as command entry point
From: Jeff MahoneyRather than having global command usage and callbacks used to create cmd_structs in the command array, establish the cmd_struct structures separately and use those. The next commit in the series passes the cmd_struct to the command callbacks such that we can access flags and determine which of several potential command we were called as. This establishes several macros to more easily define the commands within each command's source. Signed-off-by: Jeff Mahoney --- btrfs-calc-size.c | 5 +- btrfs-debug-tree.c| 5 +- btrfs-show-super.c| 6 +-- btrfs.c | 48 ++ check/main.c | 5 +- cmds-balance.c| 27 ++ cmds-device.c | 31 ++- cmds-fi-du.c | 5 +- cmds-fi-usage.c | 5 +- cmds-filesystem.c | 52 ++- cmds-inspect-dump-super.c | 5 +- cmds-inspect-dump-tree.c | 5 +- cmds-inspect-tree-stats.c | 5 +- cmds-inspect.c| 36 +++-- cmds-property.c | 19 +++ cmds-qgroup.c | 31 +-- cmds-quota.c | 17 --- cmds-receive.c| 5 +- cmds-replace.c| 19 +++ cmds-rescue.c | 22 cmds-restore.c| 5 +- cmds-scrub.c | 20 +--- cmds-send.c | 6 +-- cmds-subvolume.c | 38 -- commands.h| 127 +++--- help.c| 21 +--- 26 files changed, 326 insertions(+), 244 deletions(-) diff --git a/btrfs-calc-size.c b/btrfs-calc-size.c index d2d68ab2..908e830f 100644 --- a/btrfs-calc-size.c +++ b/btrfs-calc-size.c @@ -23,15 +23,16 @@ int main(int argc, char **argv) { + const struct cmd_struct *cmd = _struct_inspect_tree_stats; int ret; warning( "\nthe tool has been deprecated, please use 'btrfs inspect-internal tree-stats' instead\n"); if (argc > 1 && !strcmp(argv[1], "--help")) - usage(cmd_inspect_tree_stats_usage); + usage(cmd->usagestr); - ret = cmd_inspect_tree_stats(argc, argv); + ret = cmd_execute(cmd, argc, argv); btrfs_close_all_devices(); diff --git a/btrfs-debug-tree.c b/btrfs-debug-tree.c index 7bee018f..7f254519 100644 --- a/btrfs-debug-tree.c +++ b/btrfs-debug-tree.c @@ -24,16 +24,17 @@ int main(int argc, char **argv) { + const struct cmd_struct *cmd = _struct_inspect_dump_tree; int ret; set_argv0(argv); if (argc > 1 && !strcmp(argv[1], "--help")) - usage(cmd_inspect_dump_tree_usage); + usage(cmd->usagestr); radix_tree_init(); - ret = cmd_inspect_dump_tree(argc, argv); + ret = cmd_execute(cmd, argc, argv); btrfs_close_all_devices(); diff --git a/btrfs-show-super.c b/btrfs-show-super.c index 4273e42d..ee717c33 100644 --- a/btrfs-show-super.c +++ b/btrfs-show-super.c @@ -22,7 +22,7 @@ int main(int argc, char **argv) { - + const struct cmd_struct *cmd = _struct_inspect_dump_super; int ret; set_argv0(argv); @@ -31,9 +31,9 @@ int main(int argc, char **argv) "\nthe tool has been deprecated, please use 'btrfs inspect-internal dump-super' instead\n"); if (argc > 1 && !strcmp(argv[1], "--help")) - usage(cmd_inspect_dump_super_usage); + usage(cmd->usagestr); - ret = cmd_inspect_dump_super(argc, argv); + ret = cmd_execute(cmd, argc, argv); return ret; } diff --git a/btrfs.c b/btrfs.c index fec1a135..1e68b0c0 100644 --- a/btrfs.c +++ b/btrfs.c @@ -42,10 +42,11 @@ static inline const char *skip_prefix(const char *str, const char *prefix) static int parse_one_token(const char *arg, const struct cmd_group *grp, const struct cmd_struct **cmd_ret) { - const struct cmd_struct *cmd = grp->commands; const struct cmd_struct *abbrev_cmd = NULL, *ambiguous_cmd = NULL; + int i = 0; - for (; cmd->token; cmd++) { + for (i = 0; grp->commands[i]; i++) { + const struct cmd_struct *cmd = grp->commands[i]; const char *rest; rest = skip_prefix(arg, cmd->token); @@ -134,7 +135,7 @@ int handle_command_group(const struct cmd_group *grp, int argc, handle_help_options_next_level(cmd, argc, argv); fixup_argv0(argv, cmd->token); - return cmd->fn(argc, argv); + return cmd_execute(cmd, argc, argv); } static const struct cmd_group btrfs_cmd_group; @@ -153,6 +154,8 @@ static int cmd_help(int argc, char **argv) return 0; } +static DEFINE_SIMPLE_COMMAND(help, "help"); + static const char * const cmd_version_usage[] = { "btrfs version", "Display btrfs-progs version", @@ -164,6 +167,7 @@ static int cmd_version(int