Code

Remove unsupported C99 style struct initializers in git-archive. v1.4.3.4
authorShawn O. Pearce <spearce@spearce.org>
Sun, 5 Nov 2006 05:37:23 +0000 (00:37 -0500)
committerJunio C Hamano <junkio@cox.net>
Sun, 5 Nov 2006 07:48:36 +0000 (23:48 -0800)
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>
Signed-off-by: Junio C Hamano <junkio@cox.net>
archive.h
builtin-archive.c

index 16dcdb875c3715556ce8561e9ee9f7ae8b3766da..6838dc788f7620b0807a7044b611efc623bdcf0c 100644 (file)
--- 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);
index 9177379122ea29152e1213cc533f7cd7c569f8d3..2df1a84b85207961a44ce2c81665c5d473e20a9c 100644 (file)
 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 *name, struct archiver *ar)
 
        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;
                }