Merge branch 'jk/alloc-cleanups'

Misc code clean-ups.

* jk/alloc-cleanups:
  tree-walk.c: break circular dependency with unpack-trees
  traverse_trees(): use stack array for name entries
  walker_fetch(): avoid raw array length computation
  normalize_path_copy(): document "dst" size expectations
This commit is contained in:
Junio C Hamano 2020-02-14 12:54:23 -08:00
commit aa21cc97bd
5 changed files with 16 additions and 8 deletions

2
path.c
View file

@ -1077,6 +1077,8 @@ const char *remove_leading_path(const char *in, const char *prefix)
/*
* It is okay if dst == src, but they should not overlap otherwise.
* The "dst" buffer must be at least as long as "src"; normalizing may shrink
* the size of the path, but will never grow it.
*
* Performs the following normalizations on src, storing the result in dst:
* - Ensures that components are separated by '/' (Windows only)

View file

@ -1,6 +1,5 @@
#include "cache.h"
#include "tree-walk.h"
#include "unpack-trees.h"
#include "dir.h"
#include "object-store.h"
#include "tree.h"
@ -410,15 +409,20 @@ int traverse_trees(struct index_state *istate,
struct traverse_info *info)
{
int error = 0;
struct name_entry *entry = xmalloc(n*sizeof(*entry));
struct name_entry entry[MAX_TRAVERSE_TREES];
int i;
struct tree_desc_x *tx = xcalloc(n, sizeof(*tx));
struct tree_desc_x tx[ARRAY_SIZE(entry)];
struct strbuf base = STRBUF_INIT;
int interesting = 1;
char *traverse_path;
for (i = 0; i < n; i++)
if (n >= ARRAY_SIZE(entry))
BUG("traverse_trees() called with too many trees (%d)", n);
for (i = 0; i < n; i++) {
tx[i].d = t[i];
tx[i].skip = NULL;
}
if (info->prev) {
strbuf_make_traverse_path(&base, info->prev,
@ -506,10 +510,8 @@ int traverse_trees(struct index_state *istate,
if (mask & (1ul << i))
update_extended_entry(tx + i, entry + i);
}
free(entry);
for (i = 0; i < n; i++)
free_extended_entry(tx + i);
free(tx);
free(traverse_path);
info->traverse_path = NULL;
strbuf_release(&base);

View file

@ -3,6 +3,8 @@
#include "cache.h"
#define MAX_TRAVERSE_TREES 8
/**
* The tree walking API is used to traverse and inspect trees.
*/

View file

@ -6,7 +6,7 @@
#include "string-list.h"
#include "tree-walk.h"
#define MAX_UNPACK_TREES 8
#define MAX_UNPACK_TREES MAX_TRAVERSE_TREES
struct cache_entry;
struct unpack_trees_options;

View file

@ -261,12 +261,14 @@ int walker_fetch(struct walker *walker, int targets, char **target,
struct strbuf refname = STRBUF_INIT;
struct strbuf err = STRBUF_INIT;
struct ref_transaction *transaction = NULL;
struct object_id *oids = xmalloc(targets * sizeof(struct object_id));
struct object_id *oids;
char *msg = NULL;
int i, ret = -1;
save_commit_buffer = 0;
ALLOC_ARRAY(oids, targets);
if (write_ref) {
transaction = ref_transaction_begin(&err);
if (!transaction) {