* [PATCH 3/3] Remove unsupported C99 style struct initializers in git-archive.
@ 2006-11-05 5:37 Shawn O. Pearce
2006-11-05 7:32 ` Junio C Hamano
0 siblings, 1 reply; 3+ messages in thread
From: Shawn O. Pearce @ 2006-11-05 5:37 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
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;
}
--
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH 3/3] Remove unsupported C99 style struct initializers in git-archive.
2006-11-05 5:37 [PATCH 3/3] Remove unsupported C99 style struct initializers in git-archive Shawn O. Pearce
@ 2006-11-05 7:32 ` Junio C Hamano
2006-11-05 7:36 ` Shawn Pearce
0 siblings, 1 reply; 3+ messages in thread
From: Junio C Hamano @ 2006-11-05 7:32 UTC (permalink / raw)
To: Shawn O. Pearce; +Cc: git
"Shawn O. Pearce" <spearce@spearce.org> writes:
> +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 },
> };
If this were a struct with bazillions of fields I might have had
trouble swallowing the change, but this is so small that it is
no brainer.
I think this actually is an improvement.
> 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;
But is this change really needed? Shouldn't a structure
assignment just work?
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 3/3] Remove unsupported C99 style struct initializers in git-archive.
2006-11-05 7:32 ` Junio C Hamano
@ 2006-11-05 7:36 ` Shawn Pearce
0 siblings, 0 replies; 3+ messages in thread
From: Shawn Pearce @ 2006-11-05 7:36 UTC (permalink / raw)
To: Junio C Hamano; +Cc: git
Junio C Hamano <junkio@cox.net> wrote:
> "Shawn O. Pearce" <spearce@spearce.org> writes:
>
> > +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 },
> > };
>
> If this were a struct with bazillions of fields I might have had
> trouble swallowing the change, but this is so small that it is
> no brainer.
Right; if it was larger I would have been in trouble. :-)
> I think this actually is an improvement.
>
> > 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;
>
> But is this change really needed? Shouldn't a structure
> assignment just work?
No, they are different structs...
Which I did to reduce the size of the initializer (see above)
so that it was a no brainer for you to swallow. :-)
--
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2006-11-05 7:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-11-05 5:37 [PATCH 3/3] Remove unsupported C99 style struct initializers in git-archive Shawn O. Pearce
2006-11-05 7:32 ` Junio C Hamano
2006-11-05 7:36 ` Shawn Pearce
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).