mirror of https://github.com/git/git.git
Merge branch 'jk/tighten-alloc'
Update various codepaths to avoid manually-counted malloc(). * jk/tighten-alloc: (22 commits) ewah: convert to REALLOC_ARRAY, etc convert ewah/bitmap code to use xmalloc diff_populate_gitlink: use a strbuf transport_anonymize_url: use xstrfmt git-compat-util: drop mempcpy compat code sequencer: simplify memory allocation of get_message test-path-utils: fix normalize_path_copy output buffer size fetch-pack: simplify add_sought_entry fast-import: simplify allocation in start_packfile write_untracked_extension: use FLEX_ALLOC helper prepare_{git,shell}_cmd: use argv_array use st_add and st_mult for allocation size computation convert trivial cases to FLEX_ARRAY macros use xmallocz to avoid size arithmetic convert trivial cases to ALLOC_ARRAY convert manual allocations to argv_array argv-array: add detach function add helpers for allocating flex-array structs harden REALLOC_ARRAY and xcalloc against size_t overflow tree-diff: catch integer overflow in combine_diff_path allocation ...
This commit is contained in:
commit
11529ecec9
|
@ -56,3 +56,10 @@ Functions
|
|||
`argv_array_clear`::
|
||||
Free all memory associated with the array and return it to the
|
||||
initial, empty state.
|
||||
|
||||
`argv_array_detach`::
|
||||
Disconnect the `argv` member from the `argv_array` struct and
|
||||
return it. The caller is responsible for freeing the memory used
|
||||
by the array, and by the strings it references. After detaching,
|
||||
the `argv_array` is in a reinitialized state and can be pushed
|
||||
into again.
|
||||
|
|
2
alias.c
2
alias.c
|
@ -23,7 +23,7 @@ int split_cmdline(char *cmdline, const char ***argv)
|
|||
int src, dst, count = 0, size = 16;
|
||||
char quoted = 0;
|
||||
|
||||
*argv = xmalloc(sizeof(**argv) * size);
|
||||
ALLOC_ARRAY(*argv, size);
|
||||
|
||||
/* split alias_string */
|
||||
(*argv)[count++] = cmdline;
|
||||
|
|
|
@ -171,8 +171,8 @@ static void queue_directory(const unsigned char *sha1,
|
|||
unsigned mode, int stage, struct archiver_context *c)
|
||||
{
|
||||
struct directory *d;
|
||||
size_t len = base->len + 1 + strlen(filename) + 1;
|
||||
d = xmalloc(sizeof(*d) + len);
|
||||
size_t len = st_add4(base->len, 1, strlen(filename), 1);
|
||||
d = xmalloc(st_add(sizeof(*d), len));
|
||||
d->up = c->bottom;
|
||||
d->baselen = base->len;
|
||||
d->mode = mode;
|
||||
|
|
11
argv-array.c
11
argv-array.c
|
@ -74,3 +74,14 @@ void argv_array_clear(struct argv_array *array)
|
|||
}
|
||||
argv_array_init(array);
|
||||
}
|
||||
|
||||
const char **argv_array_detach(struct argv_array *array)
|
||||
{
|
||||
if (array->argv == empty_argv)
|
||||
return xcalloc(1, sizeof(const char *));
|
||||
else {
|
||||
const char **ret = array->argv;
|
||||
argv_array_init(array);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,5 +20,6 @@ void argv_array_pushl(struct argv_array *, ...);
|
|||
void argv_array_pushv(struct argv_array *, const char **);
|
||||
void argv_array_pop(struct argv_array *);
|
||||
void argv_array_clear(struct argv_array *);
|
||||
const char **argv_array_detach(struct argv_array *);
|
||||
|
||||
#endif /* ARGV_ARRAY_H */
|
||||
|
|
6
attr.c
6
attr.c
|
@ -93,9 +93,7 @@ static struct git_attr *git_attr_internal(const char *name, int len)
|
|||
if (invalid_attr_name(name, len))
|
||||
return NULL;
|
||||
|
||||
a = xmalloc(sizeof(*a) + len + 1);
|
||||
memcpy(a->name, name, len);
|
||||
a->name[len] = 0;
|
||||
FLEX_ALLOC_MEM(a, name, name, len);
|
||||
a->h = hval;
|
||||
a->next = git_attr_hash[pos];
|
||||
a->attr_nr = attr_nr++;
|
||||
|
@ -799,7 +797,7 @@ int git_all_attrs(const char *path, int *num, struct git_attr_check **check)
|
|||
++count;
|
||||
}
|
||||
*num = count;
|
||||
*check = xmalloc(sizeof(**check) * count);
|
||||
ALLOC_ARRAY(*check, count);
|
||||
j = 0;
|
||||
for (i = 0; i < attr_nr; i++) {
|
||||
const char *value = check_all_attr[i].value;
|
||||
|
|
4
bisect.c
4
bisect.c
|
@ -708,10 +708,10 @@ static struct commit *get_commit_reference(const unsigned char *sha1)
|
|||
|
||||
static struct commit **get_bad_and_good_commits(int *rev_nr)
|
||||
{
|
||||
int len = 1 + good_revs.nr;
|
||||
struct commit **rev = xmalloc(len * sizeof(*rev));
|
||||
struct commit **rev;
|
||||
int i, n = 0;
|
||||
|
||||
ALLOC_ARRAY(rev, 1 + good_revs.nr);
|
||||
rev[n++] = get_commit_reference(current_bad_oid->hash);
|
||||
for (i = 0; i < good_revs.nr; i++)
|
||||
rev[n++] = get_commit_reference(good_revs.sha1[i]);
|
||||
|
|
|
@ -2632,7 +2632,7 @@ static void update_image(struct image *img,
|
|||
insert_count = postimage->len;
|
||||
|
||||
/* Adjust the contents */
|
||||
result = xmalloc(img->len + insert_count - remove_count + 1);
|
||||
result = xmalloc(st_add3(st_sub(img->len, remove_count), insert_count, 1));
|
||||
memcpy(result, img->buf, applied_at);
|
||||
memcpy(result + applied_at, postimage->buf, postimage->len);
|
||||
memcpy(result + applied_at + postimage->len,
|
||||
|
|
|
@ -466,13 +466,11 @@ static void queue_blames(struct scoreboard *sb, struct origin *porigin,
|
|||
static struct origin *make_origin(struct commit *commit, const char *path)
|
||||
{
|
||||
struct origin *o;
|
||||
size_t pathlen = strlen(path) + 1;
|
||||
o = xcalloc(1, sizeof(*o) + pathlen);
|
||||
FLEX_ALLOC_STR(o, path, path);
|
||||
o->commit = commit;
|
||||
o->refcnt = 1;
|
||||
o->next = commit->util;
|
||||
commit->util = o;
|
||||
memcpy(o->path, path, pathlen); /* includes NUL */
|
||||
return o;
|
||||
}
|
||||
|
||||
|
@ -2059,7 +2057,8 @@ static int prepare_lines(struct scoreboard *sb)
|
|||
for (p = buf; p < end; p = get_next_line(p, end))
|
||||
num++;
|
||||
|
||||
sb->lineno = lineno = xmalloc(sizeof(*sb->lineno) * (num + 1));
|
||||
ALLOC_ARRAY(sb->lineno, num + 1);
|
||||
lineno = sb->lineno;
|
||||
|
||||
for (p = buf; p < end; p = get_next_line(p, end))
|
||||
*lineno++ = p - buf;
|
||||
|
|
|
@ -20,7 +20,7 @@ static const char builtin_check_ref_format_usage[] =
|
|||
*/
|
||||
static char *collapse_slashes(const char *refname)
|
||||
{
|
||||
char *ret = xmalloc(strlen(refname) + 1);
|
||||
char *ret = xmallocz(strlen(refname));
|
||||
char ch;
|
||||
char prev = '/';
|
||||
char *cp = ret;
|
||||
|
|
|
@ -543,7 +543,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
|
|||
int eof = 0;
|
||||
int i;
|
||||
|
||||
chosen = xmalloc(sizeof(int) * stuff->nr);
|
||||
ALLOC_ARRAY(chosen, stuff->nr);
|
||||
/* set chosen as uninitialized */
|
||||
for (i = 0; i < stuff->nr; i++)
|
||||
chosen[i] = -1;
|
||||
|
@ -615,7 +615,7 @@ static int *list_and_choose(struct menu_opts *opts, struct menu_stuff *stuff)
|
|||
nr += chosen[i];
|
||||
}
|
||||
|
||||
result = xcalloc(nr + 1, sizeof(int));
|
||||
result = xcalloc(st_add(nr, 1), sizeof(int));
|
||||
for (i = 0; i < stuff->nr && j < nr; i++) {
|
||||
if (chosen[i])
|
||||
result[j++] = i;
|
||||
|
|
|
@ -1021,7 +1021,7 @@ int cmd_fast_export(int argc, const char **argv, const char *prefix)
|
|||
const char **refspecs_str;
|
||||
int i;
|
||||
|
||||
refspecs_str = xmalloc(sizeof(*refspecs_str) * refspecs_list.nr);
|
||||
ALLOC_ARRAY(refspecs_str, refspecs_list.nr);
|
||||
for (i = 0; i < refspecs_list.nr; i++)
|
||||
refspecs_str[i] = refspecs_list.items[i].string;
|
||||
|
||||
|
|
|
@ -10,33 +10,24 @@ static const char fetch_pack_usage[] =
|
|||
"[--include-tag] [--upload-pack=<git-upload-pack>] [--depth=<n>] "
|
||||
"[--no-progress] [--diag-url] [-v] [<host>:]<directory> [<refs>...]";
|
||||
|
||||
static void add_sought_entry_mem(struct ref ***sought, int *nr, int *alloc,
|
||||
const char *name, int namelen)
|
||||
static void add_sought_entry(struct ref ***sought, int *nr, int *alloc,
|
||||
const char *name)
|
||||
{
|
||||
struct ref *ref = xcalloc(1, sizeof(*ref) + namelen + 1);
|
||||
struct ref *ref;
|
||||
struct object_id oid;
|
||||
const int chunksz = GIT_SHA1_HEXSZ + 1;
|
||||
|
||||
if (namelen > chunksz && name[chunksz - 1] == ' ' &&
|
||||
!get_oid_hex(name, &oid)) {
|
||||
oidcpy(&ref->old_oid, &oid);
|
||||
name += chunksz;
|
||||
namelen -= chunksz;
|
||||
}
|
||||
if (!get_oid_hex(name, &oid) && name[GIT_SHA1_HEXSZ] == ' ')
|
||||
name += GIT_SHA1_HEXSZ + 1;
|
||||
else
|
||||
oidclr(&oid);
|
||||
|
||||
memcpy(ref->name, name, namelen);
|
||||
ref->name[namelen] = '\0';
|
||||
ref = alloc_ref(name);
|
||||
oidcpy(&ref->old_oid, &oid);
|
||||
(*nr)++;
|
||||
ALLOC_GROW(*sought, *nr, *alloc);
|
||||
(*sought)[*nr - 1] = ref;
|
||||
}
|
||||
|
||||
static void add_sought_entry(struct ref ***sought, int *nr, int *alloc,
|
||||
const char *string)
|
||||
{
|
||||
add_sought_entry_mem(sought, nr, alloc, string, strlen(string));
|
||||
}
|
||||
|
||||
int cmd_fetch_pack(int argc, const char **argv, const char *prefix)
|
||||
{
|
||||
int i, ret;
|
||||
|
|
|
@ -1115,7 +1115,7 @@ static int fetch_one(struct remote *remote, int argc, const char **argv)
|
|||
if (argc > 0) {
|
||||
int j = 0;
|
||||
int i;
|
||||
refs = xcalloc(argc + 1, sizeof(const char *));
|
||||
refs = xcalloc(st_add(argc, 1), sizeof(const char *));
|
||||
for (i = 0; i < argc; i++) {
|
||||
if (!strcmp(argv[i], "tag")) {
|
||||
i++;
|
||||
|
|
|
@ -365,17 +365,17 @@ static void append_path(struct grep_opt *opt, const void *data, size_t len)
|
|||
static void run_pager(struct grep_opt *opt, const char *prefix)
|
||||
{
|
||||
struct string_list *path_list = opt->output_priv;
|
||||
const char **argv = xmalloc(sizeof(const char *) * (path_list->nr + 1));
|
||||
struct child_process child = CHILD_PROCESS_INIT;
|
||||
int i, status;
|
||||
|
||||
for (i = 0; i < path_list->nr; i++)
|
||||
argv[i] = path_list->items[i].string;
|
||||
argv[path_list->nr] = NULL;
|
||||
argv_array_push(&child.args, path_list->items[i].string);
|
||||
child.dir = prefix;
|
||||
child.use_shell = 1;
|
||||
|
||||
status = run_command_v_opt_cd_env(argv, RUN_USING_SHELL, prefix, NULL);
|
||||
status = run_command(&child);
|
||||
if (status)
|
||||
exit(status);
|
||||
free(argv);
|
||||
}
|
||||
|
||||
static int grep_cache(struct grep_opt *opt, const struct pathspec *pathspec, int cached)
|
||||
|
|
|
@ -171,12 +171,10 @@ static void exec_man_cmd(const char *cmd, const char *page)
|
|||
static void add_man_viewer(const char *name)
|
||||
{
|
||||
struct man_viewer_list **p = &man_viewer_list;
|
||||
size_t len = strlen(name);
|
||||
|
||||
while (*p)
|
||||
p = &((*p)->next);
|
||||
*p = xcalloc(1, (sizeof(**p) + len + 1));
|
||||
memcpy((*p)->name, name, len); /* NUL-terminated by xcalloc */
|
||||
FLEX_ALLOC_STR(*p, name, name);
|
||||
}
|
||||
|
||||
static int supported_man_viewer(const char *name, size_t len)
|
||||
|
@ -190,9 +188,8 @@ static void do_add_man_viewer_info(const char *name,
|
|||
size_t len,
|
||||
const char *value)
|
||||
{
|
||||
struct man_viewer_info_list *new = xcalloc(1, sizeof(*new) + len + 1);
|
||||
|
||||
memcpy(new->name, name, len); /* NUL-terminated by xcalloc */
|
||||
struct man_viewer_info_list *new;
|
||||
FLEX_ALLOC_MEM(new, name, name, len);
|
||||
new->info = xstrdup(value);
|
||||
new->next = man_viewer_info_list;
|
||||
man_viewer_info_list = new;
|
||||
|
|
|
@ -1346,7 +1346,7 @@ static void fix_unresolved_deltas(struct sha1file *f)
|
|||
* before deltas depending on them, a good heuristic is to start
|
||||
* resolving deltas in the same order as their position in the pack.
|
||||
*/
|
||||
sorted_by_pos = xmalloc(nr_ref_deltas * sizeof(*sorted_by_pos));
|
||||
ALLOC_ARRAY(sorted_by_pos, nr_ref_deltas);
|
||||
for (i = 0; i < nr_ref_deltas; i++)
|
||||
sorted_by_pos[i] = &ref_deltas[i];
|
||||
qsort(sorted_by_pos, nr_ref_deltas, sizeof(*sorted_by_pos), delta_pos_compare);
|
||||
|
@ -1744,9 +1744,9 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
|
|||
|
||||
curr_pack = open_pack_file(pack_name);
|
||||
parse_pack_header();
|
||||
objects = xcalloc(nr_objects + 1, sizeof(struct object_entry));
|
||||
objects = xcalloc(st_add(nr_objects, 1), sizeof(struct object_entry));
|
||||
if (show_stat)
|
||||
obj_stat = xcalloc(nr_objects + 1, sizeof(struct object_stat));
|
||||
obj_stat = xcalloc(st_add(nr_objects, 1), sizeof(struct object_stat));
|
||||
ofs_deltas = xcalloc(nr_objects, sizeof(struct ofs_delta_entry));
|
||||
parse_pack_objects(pack_sha1);
|
||||
resolve_deltas();
|
||||
|
@ -1759,7 +1759,7 @@ int cmd_index_pack(int argc, const char **argv, const char *prefix)
|
|||
if (show_stat)
|
||||
show_pack_info(stat_only);
|
||||
|
||||
idx_objects = xmalloc((nr_objects) * sizeof(struct pack_idx_entry *));
|
||||
ALLOC_ARRAY(idx_objects, nr_objects);
|
||||
for (i = 0; i < nr_objects; i++)
|
||||
idx_objects[i] = &objects[i].idx;
|
||||
curr_index = write_idx_file(index_name, idx_objects, nr_objects, &opts, pack_sha1);
|
||||
|
|
|
@ -252,7 +252,7 @@ int cmd_merge_base(int argc, const char **argv, const char *prefix)
|
|||
if (argc < 2)
|
||||
usage_with_options(merge_base_usage, options);
|
||||
|
||||
rev = xmalloc(argc * sizeof(*rev));
|
||||
ALLOC_ARRAY(rev, argc);
|
||||
while (argc-- > 0)
|
||||
rev[rev_nr++] = get_commit_reference(*argv++);
|
||||
return show_merge_base(rev, rev_nr, show_all);
|
||||
|
|
|
@ -174,7 +174,7 @@ static struct merge_list *create_entry(unsigned stage, unsigned mode, const unsi
|
|||
|
||||
static char *traverse_path(const struct traverse_info *info, const struct name_entry *n)
|
||||
{
|
||||
char *path = xmalloc(traverse_path_len(info, n) + 1);
|
||||
char *path = xmallocz(traverse_path_len(info, n));
|
||||
return make_traverse_path(path, info, n);
|
||||
}
|
||||
|
||||
|
|
|
@ -939,7 +939,7 @@ static int setup_with_upstream(const char ***argv)
|
|||
if (!branch->merge_nr)
|
||||
die(_("No default upstream defined for the current branch."));
|
||||
|
||||
args = xcalloc(branch->merge_nr + 1, sizeof(char *));
|
||||
args = xcalloc(st_add(branch->merge_nr, 1), sizeof(char *));
|
||||
for (i = 0; i < branch->merge_nr; i++) {
|
||||
if (!branch->merge[i]->dst)
|
||||
die(_("No remote-tracking branch for %s from %s"),
|
||||
|
|
|
@ -19,16 +19,17 @@ static int alloc, used;
|
|||
static void append_to_tree(unsigned mode, unsigned char *sha1, char *path)
|
||||
{
|
||||
struct treeent *ent;
|
||||
int len = strlen(path);
|
||||
size_t len = strlen(path);
|
||||
if (strchr(path, '/'))
|
||||
die("path %s contains slash", path);
|
||||
|
||||
ALLOC_GROW(entries, used + 1, alloc);
|
||||
ent = entries[used++] = xmalloc(sizeof(**entries) + len + 1);
|
||||
FLEX_ALLOC_MEM(ent, name, path, len);
|
||||
ent->mode = mode;
|
||||
ent->len = len;
|
||||
hashcpy(ent->sha1, sha1);
|
||||
memcpy(ent->name, path, len+1);
|
||||
|
||||
ALLOC_GROW(entries, used + 1, alloc);
|
||||
entries[used++] = ent;
|
||||
}
|
||||
|
||||
static int ent_compare(const void *a_, const void *b_)
|
||||
|
|
|
@ -24,7 +24,8 @@ static const char **internal_copy_pathspec(const char *prefix,
|
|||
int count, unsigned flags)
|
||||
{
|
||||
int i;
|
||||
const char **result = xmalloc((count + 1) * sizeof(const char *));
|
||||
const char **result;
|
||||
ALLOC_ARRAY(result, count + 1);
|
||||
memcpy(result, pathspec, count * sizeof(const char *));
|
||||
result[count] = NULL;
|
||||
for (i = 0; i < count; i++) {
|
||||
|
@ -47,9 +48,9 @@ static const char **internal_copy_pathspec(const char *prefix,
|
|||
|
||||
static const char *add_slash(const char *path)
|
||||
{
|
||||
int len = strlen(path);
|
||||
size_t len = strlen(path);
|
||||
if (path[len - 1] != '/') {
|
||||
char *with_slash = xmalloc(len + 2);
|
||||
char *with_slash = xmalloc(st_add(len, 2));
|
||||
memcpy(with_slash, path, len);
|
||||
with_slash[len++] = '/';
|
||||
with_slash[len] = 0;
|
||||
|
|
|
@ -624,7 +624,7 @@ static struct object_entry **compute_write_order(void)
|
|||
{
|
||||
unsigned int i, wo_end, last_untagged;
|
||||
|
||||
struct object_entry **wo = xmalloc(to_pack.nr_objects * sizeof(*wo));
|
||||
struct object_entry **wo;
|
||||
struct object_entry *objects = to_pack.objects;
|
||||
|
||||
for (i = 0; i < to_pack.nr_objects; i++) {
|
||||
|
@ -657,6 +657,7 @@ static struct object_entry **compute_write_order(void)
|
|||
* Give the objects in the original recency order until
|
||||
* we see a tagged tip.
|
||||
*/
|
||||
ALLOC_ARRAY(wo, to_pack.nr_objects);
|
||||
for (i = wo_end = 0; i < to_pack.nr_objects; i++) {
|
||||
if (objects[i].tagged)
|
||||
break;
|
||||
|
@ -769,7 +770,7 @@ static void write_pack_file(void)
|
|||
|
||||
if (progress > pack_to_stdout)
|
||||
progress_state = start_progress(_("Writing objects"), nr_result);
|
||||
written_list = xmalloc(to_pack.nr_objects * sizeof(*written_list));
|
||||
ALLOC_ARRAY(written_list, to_pack.nr_objects);
|
||||
write_order = compute_write_order();
|
||||
|
||||
do {
|
||||
|
@ -2129,7 +2130,7 @@ static void prepare_pack(int window, int depth)
|
|||
if (!to_pack.nr_objects || !window || !depth)
|
||||
return;
|
||||
|
||||
delta_list = xmalloc(to_pack.nr_objects * sizeof(*delta_list));
|
||||
ALLOC_ARRAY(delta_list, to_pack.nr_objects);
|
||||
nr_deltas = n = 0;
|
||||
|
||||
for (i = 0; i < to_pack.nr_objects; i++) {
|
||||
|
|
|
@ -53,7 +53,7 @@ static inline struct llist_item *llist_item_get(void)
|
|||
free_nodes = free_nodes->next;
|
||||
} else {
|
||||
int i = 1;
|
||||
new = xmalloc(sizeof(struct llist_item) * BLKSIZE);
|
||||
ALLOC_ARRAY(new, BLKSIZE);
|
||||
for (; i < BLKSIZE; i++)
|
||||
llist_item_put(&new[i]);
|
||||
}
|
||||
|
|
|
@ -1031,7 +1031,6 @@ static void run_update_post_hook(struct command *commands)
|
|||
{
|
||||
struct command *cmd;
|
||||
int argc;
|
||||
const char **argv;
|
||||
struct child_process proc = CHILD_PROCESS_INIT;
|
||||
const char *hook;
|
||||
|
||||
|
@ -1044,21 +1043,16 @@ static void run_update_post_hook(struct command *commands)
|
|||
if (!argc || !hook)
|
||||
return;
|
||||
|
||||
argv = xmalloc(sizeof(*argv) * (2 + argc));
|
||||
argv[0] = hook;
|
||||
|
||||
for (argc = 1, cmd = commands; cmd; cmd = cmd->next) {
|
||||
argv_array_push(&proc.args, hook);
|
||||
for (cmd = commands; cmd; cmd = cmd->next) {
|
||||
if (cmd->error_string || cmd->did_not_exist)
|
||||
continue;
|
||||
argv[argc] = xstrdup(cmd->ref_name);
|
||||
argc++;
|
||||
argv_array_push(&proc.args, cmd->ref_name);
|
||||
}
|
||||
argv[argc] = NULL;
|
||||
|
||||
proc.no_stdin = 1;
|
||||
proc.stdout_to_stderr = 1;
|
||||
proc.err = use_sideband ? -1 : 0;
|
||||
proc.argv = argv;
|
||||
|
||||
if (!start_command(&proc)) {
|
||||
if (use_sideband)
|
||||
|
@ -1378,7 +1372,7 @@ static struct command **queue_command(struct command **tail,
|
|||
|
||||
refname = line + 82;
|
||||
reflen = linelen - 82;
|
||||
cmd = xcalloc(1, sizeof(struct command) + reflen + 1);
|
||||
cmd = xcalloc(1, st_add3(sizeof(struct command), reflen, 1));
|
||||
hashcpy(cmd->old_sha1, old_sha1);
|
||||
hashcpy(cmd->new_sha1, new_sha1);
|
||||
memcpy(cmd->ref_name, refname, reflen);
|
||||
|
@ -1597,8 +1591,7 @@ static void prepare_shallow_update(struct command *commands,
|
|||
{
|
||||
int i, j, k, bitmap_size = (si->ref->nr + 31) / 32;
|
||||
|
||||
si->used_shallow = xmalloc(sizeof(*si->used_shallow) *
|
||||
si->shallow->nr);
|
||||
ALLOC_ARRAY(si->used_shallow, si->shallow->nr);
|
||||
assign_shallow_commits_to_refs(si, si->used_shallow, NULL);
|
||||
|
||||
si->need_reachability_test =
|
||||
|
@ -1664,7 +1657,7 @@ static void update_shallow_info(struct command *commands,
|
|||
return;
|
||||
}
|
||||
|
||||
ref_status = xmalloc(sizeof(*ref_status) * ref->nr);
|
||||
ALLOC_ARRAY(ref_status, ref->nr);
|
||||
assign_shallow_commits_to_refs(si, NULL, ref_status);
|
||||
for (cmd = commands; cmd; cmd = cmd->next) {
|
||||
if (is_null_sha1(cmd->new_sha1))
|
||||
|
|
|
@ -382,11 +382,9 @@ static int collect_reflog(const char *ref, const struct object_id *oid, int unus
|
|||
{
|
||||
struct collected_reflog *e;
|
||||
struct collect_reflog_cb *cb = cb_data;
|
||||
size_t namelen = strlen(ref);
|
||||
|
||||
e = xmalloc(sizeof(*e) + namelen + 1);
|
||||
FLEX_ALLOC_STR(e, reflog, ref);
|
||||
hashcpy(e->sha1, oid->hash);
|
||||
memcpy(e->reflog, ref, namelen + 1);
|
||||
ALLOC_GROW(cb->e, cb->nr + 1, cb->alloc);
|
||||
cb->e[cb->nr++] = e;
|
||||
return 0;
|
||||
|
@ -396,7 +394,6 @@ static struct reflog_expire_cfg {
|
|||
struct reflog_expire_cfg *next;
|
||||
unsigned long expire_total;
|
||||
unsigned long expire_unreachable;
|
||||
size_t len;
|
||||
char pattern[FLEX_ARRAY];
|
||||
} *reflog_expire_cfg, **reflog_expire_cfg_tail;
|
||||
|
||||
|
@ -408,13 +405,11 @@ static struct reflog_expire_cfg *find_cfg_ent(const char *pattern, size_t len)
|
|||
reflog_expire_cfg_tail = &reflog_expire_cfg;
|
||||
|
||||
for (ent = reflog_expire_cfg; ent; ent = ent->next)
|
||||
if (ent->len == len &&
|
||||
!memcmp(ent->pattern, pattern, len))
|
||||
if (!strncmp(ent->pattern, pattern, len) &&
|
||||
ent->pattern[len] == '\0')
|
||||
return ent;
|
||||
|
||||
ent = xcalloc(1, (sizeof(*ent) + len));
|
||||
memcpy(ent->pattern, pattern, len);
|
||||
ent->len = len;
|
||||
FLEX_ALLOC_MEM(ent, pattern, pattern, len);
|
||||
*reflog_expire_cfg_tail = ent;
|
||||
reflog_expire_cfg_tail = &(ent->next);
|
||||
return ent;
|
||||
|
|
|
@ -114,30 +114,14 @@ static char *strip_escapes(const char *str, const char *service,
|
|||
}
|
||||
}
|
||||
|
||||
/* Should be enough... */
|
||||
#define MAXARGUMENTS 256
|
||||
|
||||
static const char **parse_argv(const char *arg, const char *service)
|
||||
static void parse_argv(struct argv_array *out, const char *arg, const char *service)
|
||||
{
|
||||
int arguments = 0;
|
||||
int i;
|
||||
const char **ret;
|
||||
char *temparray[MAXARGUMENTS + 1];
|
||||
|
||||
while (*arg) {
|
||||
char *expanded;
|
||||
if (arguments == MAXARGUMENTS)
|
||||
die("remote-ext command has too many arguments");
|
||||
expanded = strip_escapes(arg, service, &arg);
|
||||
char *expanded = strip_escapes(arg, service, &arg);
|
||||
if (expanded)
|
||||
temparray[arguments++] = expanded;
|
||||
argv_array_push(out, expanded);
|
||||
free(expanded);
|
||||
}
|
||||
|
||||
ret = xmalloc((arguments + 1) * sizeof(char *));
|
||||
for (i = 0; i < arguments; i++)
|
||||
ret[i] = temparray[i];
|
||||
ret[arguments] = NULL;
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void send_git_request(int stdin_fd, const char *serv, const char *repo,
|
||||
|
@ -158,7 +142,7 @@ static int run_child(const char *arg, const char *service)
|
|||
child.in = -1;
|
||||
child.out = -1;
|
||||
child.err = 0;
|
||||
child.argv = parse_argv(arg, service);
|
||||
parse_argv(&child.args, arg, service);
|
||||
|
||||
if (start_command(&child) < 0)
|
||||
die("Can't run specified command");
|
||||
|
|
|
@ -52,7 +52,7 @@ static int prune_worktree(const char *id, struct strbuf *reason)
|
|||
return 1;
|
||||
}
|
||||
len = st.st_size;
|
||||
path = xmalloc(len + 1);
|
||||
path = xmallocz(len);
|
||||
read_in_full(fd, path, len);
|
||||
close(fd);
|
||||
while (len && (path[len - 1] == '\n' || path[len - 1] == '\r'))
|
||||
|
|
|
@ -79,11 +79,9 @@ static struct cache_tree_sub *find_subtree(struct cache_tree *it,
|
|||
ALLOC_GROW(it->down, it->subtree_nr + 1, it->subtree_alloc);
|
||||
it->subtree_nr++;
|
||||
|
||||
down = xmalloc(sizeof(*down) + pathlen + 1);
|
||||
FLEX_ALLOC_MEM(down, name, path, pathlen);
|
||||
down->cache_tree = NULL;
|
||||
down->namelen = pathlen;
|
||||
memcpy(down->name, path, pathlen);
|
||||
down->name[pathlen] = 0;
|
||||
|
||||
if (pos < it->subtree_nr)
|
||||
memmove(it->down + pos + 1,
|
||||
|
|
5
column.c
5
column.c
|
@ -164,7 +164,7 @@ static void display_table(const struct string_list *list,
|
|||
data.colopts = colopts;
|
||||
data.opts = *opts;
|
||||
|
||||
data.len = xmalloc(sizeof(*data.len) * list->nr);
|
||||
ALLOC_ARRAY(data.len, list->nr);
|
||||
for (i = 0; i < list->nr; i++)
|
||||
data.len[i] = item_length(colopts, list->items[i].string);
|
||||
|
||||
|
@ -173,9 +173,8 @@ static void display_table(const struct string_list *list,
|
|||
if (colopts & COL_DENSE)
|
||||
shrink_columns(&data);
|
||||
|
||||
empty_cell = xmalloc(initial_width + 1);
|
||||
empty_cell = xmallocz(initial_width);
|
||||
memset(empty_cell, ' ', initial_width);
|
||||
empty_cell[initial_width] = '\0';
|
||||
for (y = 0; y < data.rows; y++) {
|
||||
for (x = 0; x < data.cols; x++)
|
||||
if (display_cell(&data, initial_width, empty_cell, x, y))
|
||||
|
|
|
@ -189,11 +189,11 @@ static struct lline *coalesce_lines(struct lline *base, int *lenbase,
|
|||
* - Else if we have NEW, insert newend lline into base and
|
||||
* consume newend
|
||||
*/
|
||||
lcs = xcalloc(origbaselen + 1, sizeof(int*));
|
||||
directions = xcalloc(origbaselen + 1, sizeof(enum coalesce_direction*));
|
||||
lcs = xcalloc(st_add(origbaselen, 1), sizeof(int*));
|
||||
directions = xcalloc(st_add(origbaselen, 1), sizeof(enum coalesce_direction*));
|
||||
for (i = 0; i < origbaselen + 1; i++) {
|
||||
lcs[i] = xcalloc(lennew + 1, sizeof(int));
|
||||
directions[i] = xcalloc(lennew + 1, sizeof(enum coalesce_direction));
|
||||
lcs[i] = xcalloc(st_add(lennew, 1), sizeof(int));
|
||||
directions[i] = xcalloc(st_add(lennew, 1), sizeof(enum coalesce_direction));
|
||||
directions[i][0] = BASE;
|
||||
}
|
||||
for (j = 1; j < lennew + 1; j++)
|
||||
|
@ -319,7 +319,7 @@ static void append_lost(struct sline *sline, int n, const char *line, int len)
|
|||
if (line[len-1] == '\n')
|
||||
len--;
|
||||
|
||||
lline = xmalloc(sizeof(*lline) + len + 1);
|
||||
FLEX_ALLOC_MEM(lline, line, line, len);
|
||||
lline->len = len;
|
||||
lline->next = NULL;
|
||||
lline->prev = sline->plost.lost_tail;
|
||||
|
@ -330,8 +330,6 @@ static void append_lost(struct sline *sline, int n, const char *line, int len)
|
|||
sline->plost.lost_tail = lline;
|
||||
sline->plost.len++;
|
||||
lline->parent_map = this_mask;
|
||||
memcpy(lline->line, line, len);
|
||||
lline->line[len] = 0;
|
||||
}
|
||||
|
||||
struct combine_diff_state {
|
||||
|
@ -1043,7 +1041,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
|
|||
elem->mode = canon_mode(S_IFLNK);
|
||||
|
||||
result_size = len;
|
||||
result = xmalloc(len + 1);
|
||||
result = xmallocz(len);
|
||||
|
||||
done = read_in_full(fd, result, len);
|
||||
if (done < 0)
|
||||
|
@ -1051,8 +1049,6 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
|
|||
else if (done < len)
|
||||
die("early EOF '%s'", elem->path);
|
||||
|
||||
result[len] = 0;
|
||||
|
||||
/* If not a fake symlink, apply filters, e.g. autocrlf */
|
||||
if (is_file) {
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
|
@ -1115,7 +1111,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
|
|||
if (result_size && result[result_size-1] != '\n')
|
||||
cnt++; /* incomplete line */
|
||||
|
||||
sline = xcalloc(cnt+2, sizeof(*sline));
|
||||
sline = xcalloc(st_add(cnt, 2), sizeof(*sline));
|
||||
sline[0].bol = result;
|
||||
for (lno = 0, cp = result; cp < result + result_size; cp++) {
|
||||
if (*cp == '\n') {
|
||||
|
@ -1134,7 +1130,7 @@ static void show_patch_diff(struct combine_diff_path *elem, int num_parent,
|
|||
/* Even p_lno[cnt+1] is valid -- that is for the end line number
|
||||
* for deletion hunk at the end.
|
||||
*/
|
||||
sline[0].p_lno = xcalloc((cnt+2) * num_parent, sizeof(unsigned long));
|
||||
sline[0].p_lno = xcalloc(st_mult(st_add(cnt, 2), num_parent), sizeof(unsigned long));
|
||||
for (lno = 0; lno <= cnt; lno++)
|
||||
sline[lno+1].p_lno = sline[lno].p_lno + num_parent;
|
||||
|
||||
|
@ -1266,7 +1262,7 @@ static struct diff_filepair *combined_pair(struct combine_diff_path *p,
|
|||
struct diff_filespec *pool;
|
||||
|
||||
pair = xmalloc(sizeof(*pair));
|
||||
pool = xcalloc(num_parent + 1, sizeof(struct diff_filespec));
|
||||
pool = xcalloc(st_add(num_parent, 1), sizeof(struct diff_filespec));
|
||||
pair->one = pool + 1;
|
||||
pair->two = pool;
|
||||
|
||||
|
@ -1372,7 +1368,7 @@ static struct combine_diff_path *find_paths_multitree(
|
|||
struct combine_diff_path paths_head;
|
||||
struct strbuf base;
|
||||
|
||||
parents_sha1 = xmalloc(nparent * sizeof(parents_sha1[0]));
|
||||
ALLOC_ARRAY(parents_sha1, nparent);
|
||||
for (i = 0; i < nparent; i++)
|
||||
parents_sha1[i] = parents->sha1[i];
|
||||
|
||||
|
@ -1483,7 +1479,7 @@ void diff_tree_combined(const unsigned char *sha1,
|
|||
if (opt->orderfile && num_paths) {
|
||||
struct obj_order *o;
|
||||
|
||||
o = xmalloc(sizeof(*o) * num_paths);
|
||||
ALLOC_ARRAY(o, num_paths);
|
||||
for (i = 0, p = paths; p; p = p->next, i++)
|
||||
o[i].obj = p;
|
||||
order_objects(opt->orderfile, path_path, o, num_paths);
|
||||
|
|
4
commit.c
4
commit.c
|
@ -147,7 +147,7 @@ struct commit_graft *read_graft_line(char *buf, int len)
|
|||
if ((len + 1) % entry_size)
|
||||
goto bad_graft_data;
|
||||
i = (len + 1) / entry_size - 1;
|
||||
graft = xmalloc(sizeof(*graft) + GIT_SHA1_RAWSZ * i);
|
||||
graft = xmalloc(st_add(sizeof(*graft), st_mult(GIT_SHA1_RAWSZ, i)));
|
||||
graft->nr_parent = i;
|
||||
if (get_oid_hex(buf, &graft->oid))
|
||||
goto bad_graft_data;
|
||||
|
@ -903,7 +903,7 @@ static int remove_redundant(struct commit **array, int cnt)
|
|||
|
||||
work = xcalloc(cnt, sizeof(*work));
|
||||
redundant = xcalloc(cnt, 1);
|
||||
filled_index = xmalloc(sizeof(*filled_index) * (cnt - 1));
|
||||
ALLOC_ARRAY(filled_index, cnt - 1);
|
||||
|
||||
for (i = 0; i < cnt; i++)
|
||||
parse_commit(array[i]);
|
||||
|
|
|
@ -810,7 +810,7 @@ static const char *quote_arg(const char *arg)
|
|||
return arg;
|
||||
|
||||
/* insert \ where necessary */
|
||||
d = q = xmalloc(len+n+3);
|
||||
d = q = xmalloc(st_add3(len, n, 3));
|
||||
*d++ = '"';
|
||||
while (*arg) {
|
||||
if (*arg == '"')
|
||||
|
@ -893,7 +893,7 @@ static char **get_path_split(void)
|
|||
if (!n)
|
||||
return NULL;
|
||||
|
||||
path = xmalloc((n+1)*sizeof(char *));
|
||||
ALLOC_ARRAY(path, n + 1);
|
||||
p = envpath;
|
||||
i = 0;
|
||||
do {
|
||||
|
@ -978,7 +978,7 @@ static wchar_t *make_environment_block(char **deltaenv)
|
|||
i++;
|
||||
|
||||
/* copy the environment, leaving space for changes */
|
||||
tmpenv = xmalloc((size + i) * sizeof(char*));
|
||||
ALLOC_ARRAY(tmpenv, size + i);
|
||||
memcpy(tmpenv, environ, size * sizeof(char*));
|
||||
|
||||
/* merge supplied environment changes into the temporary environment */
|
||||
|
@ -1069,7 +1069,7 @@ static pid_t mingw_spawnve_fd(const char *cmd, const char **argv, char **deltaen
|
|||
free(quoted);
|
||||
}
|
||||
|
||||
wargs = xmalloc((2 * args.len + 1) * sizeof(wchar_t));
|
||||
wargs = xmalloc_array(st_add(st_mult(2, args.len), 1), sizeof(wchar_t));
|
||||
xutftowcs(wargs, args.buf, 2 * args.len + 1);
|
||||
strbuf_release(&args);
|
||||
|
||||
|
@ -1168,7 +1168,7 @@ static int try_shell_exec(const char *cmd, char *const *argv)
|
|||
int argc = 0;
|
||||
const char **argv2;
|
||||
while (argv[argc]) argc++;
|
||||
argv2 = xmalloc(sizeof(*argv) * (argc+1));
|
||||
ALLOC_ARRAY(argv2, argc + 1);
|
||||
argv2[0] = (char *)cmd; /* full path to the script file */
|
||||
memcpy(&argv2[1], &argv[1], sizeof(*argv) * argc);
|
||||
pid = mingw_spawnv(prog, argv2, 1);
|
||||
|
|
|
@ -47,7 +47,7 @@ static void msort_with_tmp(void *b, size_t n, size_t s,
|
|||
void git_qsort(void *b, size_t n, size_t s,
|
||||
int (*cmp)(const void *, const void *))
|
||||
{
|
||||
const size_t size = n * s;
|
||||
const size_t size = st_mult(n, s);
|
||||
char buf[1024];
|
||||
|
||||
if (size < sizeof(buf)) {
|
||||
|
|
|
@ -18,7 +18,7 @@ int gitsetenv(const char *name, const char *value, int replace)
|
|||
|
||||
namelen = strlen(name);
|
||||
valuelen = strlen(value);
|
||||
envstr = malloc((namelen + valuelen + 2));
|
||||
envstr = malloc(st_add3(namelen, valuelen, 2));
|
||||
if (!envstr) {
|
||||
errno = ENOMEM;
|
||||
return -1;
|
||||
|
|
|
@ -32,7 +32,7 @@ void syslog(int priority, const char *fmt, ...)
|
|||
return;
|
||||
}
|
||||
|
||||
str = malloc(str_len + 1);
|
||||
str = malloc(st_add(str_len, 1));
|
||||
if (!str) {
|
||||
warning("malloc failed: '%s'", strerror(errno));
|
||||
return;
|
||||
|
@ -43,7 +43,7 @@ void syslog(int priority, const char *fmt, ...)
|
|||
va_end(ap);
|
||||
|
||||
while ((pos = strstr(str, "%1")) != NULL) {
|
||||
str = realloc(str, ++str_len + 1);
|
||||
str = realloc(str, st_add(++str_len, 1));
|
||||
if (!str) {
|
||||
warning("realloc failed: '%s'", strerror(errno));
|
||||
return;
|
||||
|
|
4
config.c
4
config.c
|
@ -1902,7 +1902,7 @@ static int git_config_parse_key_1(const char *key, char **store_key, int *basele
|
|||
* Validate the key and while at it, lower case it for matching.
|
||||
*/
|
||||
if (store_key)
|
||||
*store_key = xmalloc(strlen(key) + 1);
|
||||
*store_key = xmallocz(strlen(key));
|
||||
|
||||
dot = 0;
|
||||
for (i = 0; key[i]; i++) {
|
||||
|
@ -1926,8 +1926,6 @@ static int git_config_parse_key_1(const char *key, char **store_key, int *basele
|
|||
if (store_key)
|
||||
(*store_key)[i] = c;
|
||||
}
|
||||
if (store_key)
|
||||
(*store_key)[i] = 0;
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
12
daemon.c
12
daemon.c
|
@ -808,7 +808,7 @@ static void check_dead_children(void)
|
|||
cradle = &blanket->next;
|
||||
}
|
||||
|
||||
static char **cld_argv;
|
||||
static struct argv_array cld_argv = ARGV_ARRAY_INIT;
|
||||
static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
|
||||
{
|
||||
struct child_process cld = CHILD_PROCESS_INIT;
|
||||
|
@ -842,7 +842,7 @@ static void handle(int incoming, struct sockaddr *addr, socklen_t addrlen)
|
|||
#endif
|
||||
}
|
||||
|
||||
cld.argv = (const char **)cld_argv;
|
||||
cld.argv = cld_argv.argv;
|
||||
cld.in = incoming;
|
||||
cld.out = dup(incoming);
|
||||
|
||||
|
@ -1374,12 +1374,10 @@ int main(int argc, char **argv)
|
|||
write_file(pid_file, "%"PRIuMAX, (uintmax_t) getpid());
|
||||
|
||||
/* prepare argv for serving-processes */
|
||||
cld_argv = xmalloc(sizeof (char *) * (argc + 2));
|
||||
cld_argv[0] = argv[0]; /* git-daemon */
|
||||
cld_argv[1] = "--serve";
|
||||
argv_array_push(&cld_argv, argv[0]); /* git-daemon */
|
||||
argv_array_push(&cld_argv, "--serve");
|
||||
for (i = 1; i < argc; ++i)
|
||||
cld_argv[i+1] = argv[i];
|
||||
cld_argv[argc+1] = NULL;
|
||||
argv_array_push(&cld_argv, argv[i]);
|
||||
|
||||
return serve(&listen_addr, listen_port, cred);
|
||||
}
|
||||
|
|
23
diff.c
23
diff.c
|
@ -2607,12 +2607,9 @@ static void builtin_checkdiff(const char *name_a, const char *name_b,
|
|||
|
||||
struct diff_filespec *alloc_filespec(const char *path)
|
||||
{
|
||||
int namelen = strlen(path);
|
||||
struct diff_filespec *spec = xmalloc(sizeof(*spec) + namelen + 1);
|
||||
struct diff_filespec *spec;
|
||||
|
||||
memset(spec, 0, sizeof(*spec));
|
||||
spec->path = (char *)(spec + 1);
|
||||
memcpy(spec->path, path, namelen+1);
|
||||
FLEXPTR_ALLOC_STR(spec, path, path);
|
||||
spec->count = 1;
|
||||
spec->is_binary = -1;
|
||||
return spec;
|
||||
|
@ -2707,21 +2704,21 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int
|
|||
|
||||
static int diff_populate_gitlink(struct diff_filespec *s, int size_only)
|
||||
{
|
||||
int len;
|
||||
char *data = xmalloc(100), *dirty = "";
|
||||
struct strbuf buf = STRBUF_INIT;
|
||||
char *dirty = "";
|
||||
|
||||
/* Are we looking at the work tree? */
|
||||
if (s->dirty_submodule)
|
||||
dirty = "-dirty";
|
||||
|
||||
len = snprintf(data, 100,
|
||||
"Subproject commit %s%s\n", sha1_to_hex(s->sha1), dirty);
|
||||
s->data = data;
|
||||
s->size = len;
|
||||
s->should_free = 1;
|
||||
strbuf_addf(&buf, "Subproject commit %s%s\n", sha1_to_hex(s->sha1), dirty);
|
||||
s->size = buf.len;
|
||||
if (size_only) {
|
||||
s->data = NULL;
|
||||
free(data);
|
||||
strbuf_release(&buf);
|
||||
} else {
|
||||
s->data = strbuf_detach(&buf, NULL);
|
||||
s->should_free = 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
4
diff.h
4
diff.h
|
@ -222,8 +222,8 @@ struct combine_diff_path {
|
|||
} parent[FLEX_ARRAY];
|
||||
};
|
||||
#define combine_diff_path_size(n, l) \
|
||||
(sizeof(struct combine_diff_path) + \
|
||||
sizeof(struct combine_diff_parent) * (n) + (l) + 1)
|
||||
st_add4(sizeof(struct combine_diff_path), (l), 1, \
|
||||
st_mult(sizeof(struct combine_diff_parent), (n)))
|
||||
|
||||
extern void show_combined_diff(struct combine_diff_path *elem, int num_parent,
|
||||
int dense, struct rev_info *);
|
||||
|
|
|
@ -53,7 +53,8 @@ static struct spanhash_top *spanhash_rehash(struct spanhash_top *orig)
|
|||
int osz = 1 << orig->alloc_log2;
|
||||
int sz = osz << 1;
|
||||
|
||||
new = xmalloc(sizeof(*orig) + sizeof(struct spanhash) * sz);
|
||||
new = xmalloc(st_add(sizeof(*orig),
|
||||
st_mult(sizeof(struct spanhash), sz)));
|
||||
new->alloc_log2 = orig->alloc_log2 + 1;
|
||||
new->free = INITIAL_FREE(new->alloc_log2);
|
||||
memset(new->data, 0, sizeof(struct spanhash) * sz);
|
||||
|
@ -130,7 +131,8 @@ static struct spanhash_top *hash_chars(struct diff_filespec *one)
|
|||
int is_text = !diff_filespec_is_binary(one);
|
||||
|
||||
i = INITIAL_HASH_SIZE;
|
||||
hash = xmalloc(sizeof(*hash) + sizeof(struct spanhash) * (1<<i));
|
||||
hash = xmalloc(st_add(sizeof(*hash),
|
||||
st_mult(sizeof(struct spanhash), 1<<i)));
|
||||
hash->alloc_log2 = i;
|
||||
hash->free = INITIAL_FREE(i);
|
||||
memset(hash->data, 0, sizeof(struct spanhash) * (1<<i));
|
||||
|
|
|
@ -52,7 +52,7 @@ static void prepare_order(const char *orderfile)
|
|||
}
|
||||
if (pass == 0) {
|
||||
order_cnt = cnt;
|
||||
order = xmalloc(sizeof(*order) * cnt);
|
||||
ALLOC_ARRAY(order, cnt);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ void diffcore_order(const char *orderfile)
|
|||
if (!q->nr)
|
||||
return;
|
||||
|
||||
o = xmalloc(sizeof(*o) * q->nr);
|
||||
ALLOC_ARRAY(o, q->nr);
|
||||
for (i = 0; i < q->nr; i++)
|
||||
o[i].obj = q->queue[i];
|
||||
order_objects(orderfile, pair_pathtwo, o, q->nr);
|
||||
|
|
|
@ -537,7 +537,7 @@ void diffcore_rename(struct diff_options *options)
|
|||
rename_dst_nr * rename_src_nr, 50, 1);
|
||||
}
|
||||
|
||||
mx = xcalloc(num_create * NUM_CANDIDATE_PER_DST, sizeof(*mx));
|
||||
mx = xcalloc(st_mult(num_create, NUM_CANDIDATE_PER_DST), sizeof(*mx));
|
||||
for (dst_cnt = i = 0; i < rename_dst_nr; i++) {
|
||||
struct diff_filespec *two = rename_dst[i].two;
|
||||
struct diff_score *m;
|
||||
|
|
37
dir.c
37
dir.c
|
@ -505,12 +505,7 @@ void add_exclude(const char *string, const char *base,
|
|||
|
||||
parse_exclude_pattern(&string, &patternlen, &flags, &nowildcardlen);
|
||||
if (flags & EXC_FLAG_MUSTBEDIR) {
|
||||
char *s;
|
||||
x = xmalloc(sizeof(*x) + patternlen + 1);
|
||||
s = (char *)(x+1);
|
||||
memcpy(s, string, patternlen);
|
||||
s[patternlen] = '\0';
|
||||
x->pattern = s;
|
||||
FLEXPTR_ALLOC_MEM(x, pattern, string, patternlen);
|
||||
} else {
|
||||
x = xmalloc(sizeof(*x));
|
||||
x->pattern = string;
|
||||
|
@ -630,10 +625,7 @@ static struct untracked_cache_dir *lookup_untracked(struct untracked_cache *uc,
|
|||
}
|
||||
|
||||
uc->dir_created++;
|
||||
d = xmalloc(sizeof(*d) + len + 1);
|
||||
memset(d, 0, sizeof(*d));
|
||||
memcpy(d->name, name, len);
|
||||
d->name[len] = '\0';
|
||||
FLEX_ALLOC_MEM(d, name, name, len);
|
||||
|
||||
ALLOC_GROW(dir->dirs, dir->dirs_nr + 1, dir->dirs_alloc);
|
||||
memmove(dir->dirs + first + 1, dir->dirs + first,
|
||||
|