From: Anders Kaseorg Date: Thu, 9 Dec 2010 06:43:32 +0000 (-0500) Subject: describe: Do not use a flex array in struct commit_name X-Git-Tag: v1.7.4-rc0~35^2~2 X-Git-Url: https://git.tokkee.org/?a=commitdiff_plain;h=1e1ade1833db42a75f2792b4472748721f73c827;p=git.git describe: Do not use a flex array in struct commit_name Now add_to_known_names overwrites commit_names in place when multiple tags point to the same commit. This will make it easier to store commit_names in a hash table. Signed-off-by: Anders Kaseorg Signed-off-by: Junio C Hamano --- diff --git a/builtin/describe.c b/builtin/describe.c index 700f74015..5b8461d87 100644 --- a/builtin/describe.c +++ b/builtin/describe.c @@ -38,7 +38,7 @@ struct commit_name { unsigned prio:2; /* annotated tag = 2, tag = 1, head = 0 */ unsigned name_checked:1; unsigned char sha1[20]; - char path[FLEX_ARRAY]; /* more */ + const char *path; }; static const char *prio_names[] = { "head", "lightweight", "annotated", @@ -85,15 +85,15 @@ static void add_to_known_names(const char *path, struct commit_name *e = commit->util; struct tag *tag = NULL; if (replace_name(e, prio, sha1, &tag)) { - size_t len = strlen(path)+1; - free(e); - e = xmalloc(sizeof(struct commit_name) + len); + if (!e) { + e = xmalloc(sizeof(struct commit_name)); + commit->util = e; + } e->tag = tag; e->prio = prio; e->name_checked = 0; hashcpy(e->sha1, sha1); - memcpy(e->path, path, len); - commit->util = e; + e->path = path; } found_names = 1; }