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

Re: [PATCH] MSVC: fix t0040-parse-options

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 28, 2014, 18:19 UTC
Message-ID
<xmqq7g7eb2zv.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1396008298-1434-1-git-send-email-marat@slonopotamus.org>
Marat Radchenko <marat@slonopotamus.org> writes:
Show 14 quoted lines
> Signed-off-by: Marat Radchenko <marat@slonopotamus.org>
> ---
>  test-parse-options.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/test-parse-options.c b/test-parse-options.c
> index 434e8b8..7840493 100644
> --- a/test-parse-options.c
> +++ b/test-parse-options.c
> @@ -11,6 +11,7 @@ static char *string = NULL;
>  static char *file = NULL;
>  static int ambiguous;
>  static struct string_list list;
> +static const char *default_string = "default";
That wastes 4 or 8 bytes compared to
	static const char default_string[] = "default";
no?
Show 11 quoted lines
>  static int length_callback(const struct option *opt, const char *arg, int unset)
>  {
> @@ -60,7 +61,7 @@ int main(int argc, char **argv)
>  		OPT_STRING('o', NULL, &string, "str", "get another string"),
>  		OPT_NOOP_NOARG(0, "obsolete"),
>  		OPT_SET_PTR(0, "default-string", &string,
> -			"set string to default", (unsigned long)"default"),
> +			"set string to default", default_string),
>  		OPT_STRING_LIST(0, "list", &list, "str", "add str to list"),
>  		OPT_GROUP("Magic arguments"),
>  		OPT_ARGUMENT("quux", "means --quux"),

I can see how this patch would not hurt, but at the same time, I cannot see why this patch is a "FIX". A string literal "default" is a pointer to constant string, and being able to cast a pointer to "unsigned long" is something that is done fairly commonly without problems [*1*]. It needs to be explained why this change is needed along the lines of...

	We prepare an element in an array of "struct option" with
	OPT_SET_PTR to point a variable to a literal string
	"default", but MSVC compiler fails to distim the doshes for
	such and such reasons.
        Work it around by moving the literal string outside the
	definition of the struct option, which MSVC can understand
	it.
in the log message.
[Footnote]
*1* The cast should actually be intptr_t for it to be kosher.  I
    also suspect that the cast should happen inside OPT_SET_PTR()
    macro defintion, like in the attached patch.
 parse-options.h      | 2 +-
 test-parse-options.c | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/parse-options.h b/parse-options.h
index d670cb9..7a24d2e 100644
--- a/parse-options.h
+++ b/parse-options.h
@@ -129,7 +129,7 @@ struct option {
 #define OPT_HIDDEN_BOOL(s, l, v, h) { OPTION_SET_INT, (s), (l), (v), NULL, \
 				      (h), PARSE_OPT_NOARG | PARSE_OPT_HIDDEN, NULL, 1}
 #define OPT_SET_PTR(s, l, v, h, p)  { OPTION_SET_PTR, (s), (l), (v), NULL, \
-				      (h), PARSE_OPT_NOARG, NULL, (p) }
+				      (h), PARSE_OPT_NOARG, NULL, (intptr_t)(p) }
 #define OPT_CMDMODE(s, l, v, h, i) { OPTION_CMDMODE, (s), (l), (v), NULL, \
 				      (h), PARSE_OPT_NOARG|PARSE_OPT_NONEG, NULL, (i) }
 #define OPT_INTEGER(s, l, v, h)     { OPTION_INTEGER, (s), (l), (v), N_("n"), (h) }
diff --git a/test-parse-options.c b/test-parse-options.c
index 434e8b8..10da63e 100644
--- a/test-parse-options.c
+++ b/test-parse-options.c
@@ -60,7 +60,7 @@ int main(int argc, char **argv)
 		OPT_STRING('o', NULL, &string, "str", "get another string"),
 		OPT_NOOP_NOARG(0, "obsolete"),
 		OPT_SET_PTR(0, "default-string", &string,
-			"set string to default", (unsigned long)"default"),
+			"set string to default", "default"),
 		OPT_STRING_LIST(0, "list", &list, "str", "add str to list"),
 		OPT_GROUP("Magic arguments"),
 		OPT_ARGUMENT("quux", "means --quux"),
Previous: Marat RadchenkoNext: Marat Radchenko
Message 2 of 17 in “MSVC: fix t0040-parse-options”
  1. MSVC: fix t0040-parse-optionsMarat Radchenko, Mar 28, 2014
  2. Junio C HamanoMar 28, 2014
  3. MSVC: fix t0040-parse-options crashMarat Radchenko, Mar 29, 2014
  4. MSVC: fix t0040-parse-options crashMarat Radchenko, Mar 29, 2014
  5. Andreas SchwabMar 29, 2014
  6. René ScharfeMar 29, 2014
  7. Junio C HamanoMar 30, 2014
  8. Andreas SchwabMar 30, 2014
  9. Jeff KingMar 31, 2014
  10. 0/3 Take four on fixing OPT_SET_PTR issuesMarat Radchenko, Mar 30, 2014
  11. 1/3 MSVC: fix t0040-parse-options crashMarat Radchenko, Mar 30, 2014
  12. 2/3 parse-options: add cast to correct pointer type to OPT_SET_PTRMarat Radchenko, Mar 30, 2014
  13. Junio C HamanoMar 31, 2014
  14. 3/3 parse-options: remove unused OPT_SET_PTRMarat Radchenko, Mar 30, 2014
  15. Junio C HamanoMar 31, 2014
  16. Jeff KingMar 31, 2014
  17. Junio C HamanoMar 31, 2014

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.