Browse Source

use MOVE_ARRAY

Simplify the code for moving members inside of an array and make it more
robust by using the helper macro MOVE_ARRAY.  It calculates the size
based on the specified number of elements for us and supports NULL
pointers when that number is zero.  Raw memmove(3) calls with NULL can
cause the compiler to (over-eagerly) optimize out later NULL checks.

This patch was generated with contrib/coccinelle/array.cocci and spatch
(Coccinelle).

Signed-off-by: Rene Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
René Scharfe 8 years ago committed by Junio C Hamano
parent
commit
f331ab9d4c
  1. 3
      builtin/ls-files.c
  2. 2
      builtin/merge.c
  3. 5
      builtin/pack-objects.c
  4. 5
      cache-tree.c
  5. 5
      commit.c
  6. 3
      notes-merge.c
  7. 5
      read-cache.c
  8. 7
      reflog-walk.c
  9. 8
      string-list.c

3
builtin/ls-files.c

@ -378,8 +378,7 @@ static void prune_index(struct index_state *istate, @@ -378,8 +378,7 @@ static void prune_index(struct index_state *istate,
}
last = next;
}
memmove(istate->cache, istate->cache + pos,
(last - pos) * sizeof(struct cache_entry *));
MOVE_ARRAY(istate->cache, istate->cache + pos, last - pos);
istate->cache_nr = last - pos;
}


2
builtin/merge.c

@ -537,7 +537,7 @@ static void parse_branch_merge_options(char *bmo) @@ -537,7 +537,7 @@ static void parse_branch_merge_options(char *bmo)
die(_("Bad branch.%s.mergeoptions string: %s"), branch,
split_cmdline_strerror(argc));
REALLOC_ARRAY(argv, argc + 2);
memmove(argv + 1, argv, sizeof(*argv) * (argc + 1));
MOVE_ARRAY(argv + 1, argv, argc + 1);
argc++;
argv[0] = "branch.*.mergeoptions";
parse_options(argc, argv, NULL, builtin_merge_options,

5
builtin/pack-objects.c

@ -1298,9 +1298,8 @@ static int check_pbase_path(unsigned hash) @@ -1298,9 +1298,8 @@ static int check_pbase_path(unsigned hash)
done_pbase_paths_alloc);
done_pbase_paths_num++;
if (pos < done_pbase_paths_num)
memmove(done_pbase_paths + pos + 1,
done_pbase_paths + pos,
(done_pbase_paths_num - pos - 1) * sizeof(unsigned));
MOVE_ARRAY(done_pbase_paths + pos + 1, done_pbase_paths + pos,
done_pbase_paths_num - pos - 1);
done_pbase_paths[pos] = hash;
return 0;
}

5
cache-tree.c

@ -131,9 +131,8 @@ static int do_invalidate_path(struct cache_tree *it, const char *path) @@ -131,9 +131,8 @@ static int do_invalidate_path(struct cache_tree *it, const char *path)
* move 4 and 5 up one place (2 entries)
* 2 = 6 - 3 - 1 = subtree_nr - pos - 1
*/
memmove(it->down+pos, it->down+pos+1,
sizeof(struct cache_tree_sub *) *
(it->subtree_nr - pos - 1));
MOVE_ARRAY(it->down + pos, it->down + pos + 1,
it->subtree_nr - pos - 1);
it->subtree_nr--;
}
return 1;

5
commit.c

@ -223,9 +223,8 @@ int unregister_shallow(const struct object_id *oid) @@ -223,9 +223,8 @@ int unregister_shallow(const struct object_id *oid)
if (pos < 0)
return -1;
if (pos + 1 < commit_graft_nr)
memmove(commit_graft + pos, commit_graft + pos + 1,
sizeof(struct commit_graft *)
* (commit_graft_nr - pos - 1));
MOVE_ARRAY(commit_graft + pos, commit_graft + pos + 1,
commit_graft_nr - pos - 1);
commit_graft_nr--;
return 0;
}

3
notes-merge.c

@ -99,8 +99,7 @@ static struct notes_merge_pair *find_notes_merge_pair_pos( @@ -99,8 +99,7 @@ static struct notes_merge_pair *find_notes_merge_pair_pos(
else {
*occupied = 0;
if (insert_new && i < len) {
memmove(list + i + 1, list + i,
(len - i) * sizeof(struct notes_merge_pair));
MOVE_ARRAY(list + i + 1, list + i, len - i);
memset(list + i, 0, sizeof(struct notes_merge_pair));
}
}

5
read-cache.c

@ -515,9 +515,8 @@ int remove_index_entry_at(struct index_state *istate, int pos) @@ -515,9 +515,8 @@ int remove_index_entry_at(struct index_state *istate, int pos)
istate->cache_nr--;
if (pos >= istate->cache_nr)
return 0;
memmove(istate->cache + pos,
istate->cache + pos + 1,
(istate->cache_nr - pos) * sizeof(struct cache_entry *));
MOVE_ARRAY(istate->cache + pos, istate->cache + pos + 1,
istate->cache_nr - pos);
return 1;
}


7
reflog-walk.c

@ -111,10 +111,9 @@ static struct commit_info *get_commit_info(struct commit *commit, @@ -111,10 +111,9 @@ static struct commit_info *get_commit_info(struct commit *commit,
struct commit_info *result = &lifo->items[i];
if (pop) {
if (i + 1 < lifo->nr)
memmove(lifo->items + i,
lifo->items + i + 1,
(lifo->nr - i) *
sizeof(struct commit_info));
MOVE_ARRAY(lifo->items + i,
lifo->items + i + 1,
lifo->nr - i);
lifo->nr--;
}
return result;

8
string-list.c

@ -43,9 +43,8 @@ static int add_entry(int insert_at, struct string_list *list, const char *string @@ -43,9 +43,8 @@ static int add_entry(int insert_at, struct string_list *list, const char *string

ALLOC_GROW(list->items, list->nr+1, list->alloc);
if (index < list->nr)
memmove(list->items + index + 1, list->items + index,
(list->nr - index)
* sizeof(struct string_list_item));
MOVE_ARRAY(list->items + index + 1, list->items + index,
list->nr - index);
list->items[index].string = list->strdup_strings ?
xstrdup(string) : (char *)string;
list->items[index].util = NULL;
@ -77,8 +76,7 @@ void string_list_remove(struct string_list *list, const char *string, @@ -77,8 +76,7 @@ void string_list_remove(struct string_list *list, const char *string,
free(list->items[i].util);

list->nr--;
memmove(list->items + i, list->items + i + 1,
(list->nr - i) * sizeof(struct string_list_item));
MOVE_ARRAY(list->items + i, list->items + i + 1, list->nr - i);
}
}


Loading…
Cancel
Save