git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH 03/10] env--helper: write to opt->value in parseopt helper

From
Jeff King <peff@peff.net>
Date
Sep 30, 2020, 12:28 UTC
Message-ID
<20200930122832.GC1901279@coredump.intra.peff.net>
In-Reply-To
<20200930122732.GA1901036@coredump.intra.peff.net>

We use OPT_CALLBACK_F() to call the option_parse_type() callback, passing it the address of "cmdmode" as the value to write to. But the callback doesn't look at opt->value at all, and instead writes to a global variable.

This works out because that's the same global variable we happen to pass in, but it's rather confusing. Let's use the passed-in value instead. We'll also make "cmdmode" a local variable of the main function, ensuring we can't make the same mistake again.

Signed-off-by: Jeff King <peff@peff.net>
---
 builtin/env--helper.c | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/builtin/env--helper.c b/builtin/env--helper.c
index 23c214fff6..3aa4282114 100644
--- a/builtin/env--helper.c
+++ b/builtin/env--helper.c
@@ -7,18 +7,20 @@ static char const * const env__helper_usage[] = {
 	NULL
 };
 
-static enum {
+enum cmdmode {
 	ENV_HELPER_TYPE_BOOL = 1,
 	ENV_HELPER_TYPE_ULONG
-} cmdmode = 0;
+};
 
 static int option_parse_type(const struct option *opt, const char *arg,
 			     int unset)
 {
+	enum cmdmode *cmdmode = opt->value;
+
 	if (!strcmp(arg, "bool"))
-		cmdmode = ENV_HELPER_TYPE_BOOL;
+		*cmdmode = ENV_HELPER_TYPE_BOOL;
 	else if (!strcmp(arg, "ulong"))
-		cmdmode = ENV_HELPER_TYPE_ULONG;
+		*cmdmode = ENV_HELPER_TYPE_ULONG;
 	else
 		die(_("unrecognized --type argument, %s"), arg);
 
@@ -33,6 +35,7 @@ int cmd_env__helper(int argc, const char **argv, const char *prefix)
 	int ret;
 	int ret_int, default_int;
 	unsigned long ret_ulong, default_ulong;
+	enum cmdmode cmdmode = 0;
 	struct option opts[] = {
 		OPT_CALLBACK_F(0, "type", &cmdmode, N_("type"),
 			       N_("value is given this type"), PARSE_OPT_NONEG,
-- 
2.28.0.1173.gad90222cf0
Previous: Jeff KingNext: Jeff King
Message 4 of 11 in “dropping more unused parameters”
  1. 0/10 dropping more unused parametersJeff King, Sep 30, 2020
  2. 01/10 convert: drop unused crlf_action from check_global_conv_flags_eol()Jeff King, Sep 30, 2020
  3. 02/10 drop unused argc parametersJeff King, Sep 30, 2020
  4. 03/10 env--helper: write to opt->value in parseopt helperJeff King, Sep 30, 2020
  5. 04/10 assert PARSE_OPT_NONEG in parse-options callbacksJeff King, Sep 30, 2020
  6. 05/10 push: drop unused repo argument to do_push()Jeff King, Sep 30, 2020
  7. 06/10 sequencer: drop repository argument from run_git_commit()Jeff King, Sep 30, 2020
  8. 07/10 sparse-checkout: fill in some options boilerplateJeff King, Sep 30, 2020
  9. 08/10 test-advise: check argument count with argc instead of argvJeff King, Sep 30, 2020
  10. 09/10 sequencer: handle ignore_footer when parsing trailersJeff King, Sep 30, 2020
  11. 10/10 dir.c: drop unused "untracked" from treat_path_fast()Jeff King, Sep 30, 2020

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.