Don't instantiate structures with FAMs.
Since structures with `flexible array members' are an incomplete datatype ANSI C99 forbids creating instances of them. This patch removes such an instance from `diff-lib.c' and replaces it with a pointer to a `struct combine_diff_path'. Since all neccessary memory is allocated at once the number of calls to `xmalloc' is not increased. Signed-off-by: Florian Forster <octo@verplant.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
63f175693e
commit
b4b1550315
41
diff-lib.c
41
diff-lib.c
@ -34,21 +34,23 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (ce_stage(ce)) {
|
if (ce_stage(ce)) {
|
||||||
struct {
|
struct combine_diff_path *dpath;
|
||||||
struct combine_diff_path p;
|
|
||||||
struct combine_diff_parent filler[5];
|
|
||||||
} combine;
|
|
||||||
int num_compare_stages = 0;
|
int num_compare_stages = 0;
|
||||||
|
size_t path_len;
|
||||||
|
|
||||||
combine.p.next = NULL;
|
path_len = ce_namelen(ce);
|
||||||
combine.p.len = ce_namelen(ce);
|
|
||||||
combine.p.path = xmalloc(combine.p.len + 1);
|
dpath = xmalloc (combine_diff_path_size (5, path_len));
|
||||||
memcpy(combine.p.path, ce->name, combine.p.len);
|
dpath->path = (char *) &(dpath->parent[5]);
|
||||||
combine.p.path[combine.p.len] = 0;
|
|
||||||
combine.p.mode = 0;
|
dpath->next = NULL;
|
||||||
memset(combine.p.sha1, 0, 20);
|
dpath->len = path_len;
|
||||||
memset(&combine.p.parent[0], 0,
|
memcpy(dpath->path, ce->name, path_len);
|
||||||
sizeof(combine.filler));
|
dpath->path[path_len] = '\0';
|
||||||
|
dpath->mode = 0;
|
||||||
|
memset(dpath->sha1, 0, 20);
|
||||||
|
memset(&(dpath->parent[0]), 0,
|
||||||
|
sizeof(struct combine_diff_parent)*5);
|
||||||
|
|
||||||
while (i < entries) {
|
while (i < entries) {
|
||||||
struct cache_entry *nce = active_cache[i];
|
struct cache_entry *nce = active_cache[i];
|
||||||
@ -64,11 +66,11 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
|
|||||||
if (2 <= stage) {
|
if (2 <= stage) {
|
||||||
int mode = ntohl(nce->ce_mode);
|
int mode = ntohl(nce->ce_mode);
|
||||||
num_compare_stages++;
|
num_compare_stages++;
|
||||||
memcpy(combine.p.parent[stage-2].sha1,
|
memcpy(dpath->parent[stage-2].sha1,
|
||||||
nce->sha1, 20);
|
nce->sha1, 20);
|
||||||
combine.p.parent[stage-2].mode =
|
dpath->parent[stage-2].mode =
|
||||||
canon_mode(mode);
|
canon_mode(mode);
|
||||||
combine.p.parent[stage-2].status =
|
dpath->parent[stage-2].status =
|
||||||
DIFF_STATUS_MODIFIED;
|
DIFF_STATUS_MODIFIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -83,13 +85,14 @@ int run_diff_files(struct rev_info *revs, int silent_on_removed)
|
|||||||
i--;
|
i--;
|
||||||
|
|
||||||
if (revs->combine_merges && num_compare_stages == 2) {
|
if (revs->combine_merges && num_compare_stages == 2) {
|
||||||
show_combined_diff(&combine.p, 2,
|
show_combined_diff(dpath, 2,
|
||||||
revs->dense_combined_merges,
|
revs->dense_combined_merges,
|
||||||
revs);
|
revs);
|
||||||
free(combine.p.path);
|
free(dpath);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
free(combine.p.path);
|
free(dpath);
|
||||||
|
dpath = NULL;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Show the diff for the 'ce' if we found the one
|
* Show the diff for the 'ce' if we found the one
|
||||||
|
Loading…
Reference in New Issue
Block a user