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

Re: [PATCH 0/5] consistent setup code for external commands

From
Junio C Hamano <gitster@pobox.com>
Date
Jul 6, 2016, 15:17 UTC
Message-ID
<xmqq60sivlrt.fsf@gitster.mtv.corp.google.com>
In-Reply-To
<20160701223912.GB32545@sigill.intra.peff.net>
Jeff King <peff@peff.net> writes:
Show 22 quoted lines
> On Fri, Jul 01, 2016 at 03:19:37PM -0700, Junio C Hamano wrote:
>
>> > Here they are:
>> >
>> >   [1/5]: add an extra level of indirection to main()
>> >   [2/5]: common-main: call git_extract_argv0_path()
>> >   [3/5]: common-main: call sanitize_stdfds()
>> >   [4/5]: common-main: call restore_sigpipe_to_default()
>> >   [5/5]: common-main: call git_setup_gettext()
>> 
>> As this is also a fix to maint-2.8 track, I tweaked them to ensure
>> that they apply there, and queued the result as jk/common-main.  I
>> double checked the result by comparing the result of applying these
>> five patches directly on top of master, and the result of merging
>> that jk/common-main (based on maint-2.8) into master, and they seem
>> to match.
>
> Thanks, this obviously is a regression in v2.8, but I didn't even think
> about that and just built it on top of master.
>
> I think the cleanup that Dscho suggested elsewhere in the thread is a
> good idea on top, but that can also just wait and come separately.
OK.

I think that amounts to the following single patch, which I cherry picked from the topic in Dscho's repository he mentioned earlier.

With this applied on top of jk/common-main-2.8, when I merge it to his b764cdf, the result matches his common-main topic, so we three are on the same page, I'd think, and the result can be fed to the 2.8.x maintenance track.

-- >8 --
From: Johannes Schindelin <johannes.schindelin@gmx.de>
Date: Fri, 1 Jul 2016 15:01:28 +0200
Subject: [PATCH] mingw: declare main()'s argv as const

In 84d32bf (sparse: Fix mingw_main() argument number/type errors, 2013-04-27), we addressed problems identified by the 'sparse' tool where argv was declared inconsistently. The way we addressed it was by casting from the non-const version to the const-version.

This patch is long overdue, fixing compat/mingw.h's declaration to make the "argv" parameter const. This also allows us to lose the "const" trickery introduced earlier to common-main.c:main().

Signed-off-by: Johannes Schindelin <johannes.schindelin@gmx.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
---
 common-main.c  | 8 +-------
 compat/mingw.h | 2 +-
 2 files changed, 2 insertions(+), 8 deletions(-)
diff --git a/common-main.c b/common-main.c
index 3be5ad1..44a29e8 100644
--- a/common-main.c
+++ b/common-main.c
@@ -22,15 +22,9 @@ static void restore_sigpipe_to_default(void)
 	signal(SIGPIPE, SIG_DFL);
 }
 
-int main(int argc, char **av)
+int main(int argc, const char **argv)
 {
 	/*
-	 * This const trickery is explained in
-	 * 84d32bf7678259c08406571cd6ce4b7a6724dcba
-	 */
-	const char **argv = (const char **)av;
-
-	/*
 	 * Always open file descriptors 0/1/2 to avoid clobbering files
 	 * in die().  It also avoids messing up when the pipes are dup'ed
 	 * onto stdin/stdout/stderr in the child processes we spawn.
diff --git a/compat/mingw.h b/compat/mingw.h
index 69bb43d..1ac9086 100644
--- a/compat/mingw.h
+++ b/compat/mingw.h
@@ -535,7 +535,7 @@ extern CRITICAL_SECTION pinfo_cs;
 void mingw_startup();
 #define main(c,v) dummy_decl_mingw_main(); \
 static int mingw_main(c,v); \
-int main(int argc, char **argv) \
+int main(int argc, const char **argv) \
 { \
 	mingw_startup(); \
 	return mingw_main(__argc, (void *)__argv); \
-- 
2.9.0-457-ge524329
Previous: Jeff KingNext: Johannes Schindelin
Message 18 of 21 in “git-credentials-store.exe crash”
  1. dmh@ucar.eduJun 30, 2016
  2. Jeff KingJul 1, 2016
  3. 0/5 consistent setup code for external commandsJeff King, Jul 1, 2016
  4. 1/5 add an extra level of indirection to main()Jeff King, Jul 1, 2016
  5. Johannes SchindelinJul 1, 2016
  6. Jeff KingJul 1, 2016
  7. Johannes SchindelinJul 1, 2016
  8. Jeff KingJul 1, 2016
  9. Johannes SchindelinJul 2, 2016
  10. 2/5 common-main: call git_extract_argv0_path()Jeff King, Jul 1, 2016
  11. Johannes SchindelinJul 1, 2016
  12. 3/5 common-main: call sanitize_stdfds()Jeff King, Jul 1, 2016
  13. 5/5 common-main: call git_setup_gettext()Jeff King, Jul 1, 2016
  14. 4/5 common-main: call restore_sigpipe_to_default()Jeff King, Jul 1, 2016
  15. Johannes SchindelinJul 1, 2016
  16. Junio C HamanoJul 1, 2016
  17. Jeff KingJul 1, 2016
  18. Junio C HamanoJul 6, 2016
  19. Johannes SchindelinJul 6, 2016
  20. Johannes SchindelinJul 1, 2016
  21. Jeff KingJul 1, 2016

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.