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

[PATCH 3/3] Remove unsupported C99 style struct initializers in git-archive.

From
Shawn O. Pearce <spearce@spearce.org>
Date
Nov 5, 2006, 05:37 UTC
Message-ID
<20061105053723.GC4193@spearce.org>

At least one older version of the Solaris C compiler doesn't support the newer C99 style struct initializers. To allow Git to compile on those systems use an archive description struct which is easier to initialize without the C99 struct initializer syntax.

Also since the archives array is not used by anyone other than archive.c we can make it static.

Signed-off-by: Shawn O. Pearce <spearce@spearce.org>
---
 archive.h         |    2 --
 builtin-archive.c |   23 ++++++++++++-----------
 2 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/archive.h b/archive.h
index 16dcdb8..6838dc7 100644
--- a/archive.h
+++ b/archive.h
@@ -25,8 +25,6 @@ struct archiver {
 	parse_extra_args_fn_t parse_extra;
 };
 
-extern struct archiver archivers[];
-
 extern int parse_archive_args(int argc,
 			      const char **argv,
 			      struct archiver *ar);
diff --git a/builtin-archive.c b/builtin-archive.c
index 9177379..2df1a84 100644
--- a/builtin-archive.c
+++ b/builtin-archive.c
@@ -15,16 +15,14 @@
 static const char archive_usage[] = \
 "git-archive --format=<fmt> [--prefix=<prefix>/] [--verbose] [<extra>] <tree-ish> [path...]";
 
-struct archiver archivers[] = {
-	{
-		.name		= "tar",
-		.write_archive	= write_tar_archive,
-	},
-	{
-		.name		= "zip",
-		.write_archive	= write_zip_archive,
-		.parse_extra	= parse_extra_zip_args,
-	},
+static struct archiver_desc
+{
+	const char *name;
+	write_archive_fn_t write_archive;
+	parse_extra_args_fn_t parse_extra;
+} archivers[] = {
+	{ "tar", write_tar_archive, NULL },
+	{ "zip", write_zip_archive, parse_extra_zip_args },
 };
 
 static int run_remote_archiver(const char *remote, int argc,
@@ -88,7 +86,10 @@ static int init_archiver(const char *nam
 
 	for (i = 0; i < ARRAY_SIZE(archivers); i++) {
 		if (!strcmp(name, archivers[i].name)) {
-			memcpy(ar, &archivers[i], sizeof(struct archiver));
+			memset(ar, 0, sizeof(*ar));
+			ar->name = archivers[i].name;
+			ar->write_archive = archivers[i].write_archive;
+			ar->parse_extra = archivers[i].parse_extra;
 			rv = 0;
 			break;
 		}
Next: Junio C Hamano
Message 1 of 3 in “Remove unsupported C99 style struct initializers in git-archive.”
  1. 3/3 Remove unsupported C99 style struct initializers in git-archive.Shawn O. Pearce, Nov 5, 2006
  2. Junio C HamanoNov 5, 2006
  3. Shawn PearceNov 5, 2006

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.