list-objects-filter-options: clean up use of ALLOC_GROW
Introduce a new macro ALLOC_GROW_BY which automatically zeros the added array elements and takes care of updating the nr value. Use the macro in code introduced earlier in this patchset. Signed-off-by: Matthew DeVore <matvore@google.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
489fc9ee71
commit
5a133e8a7f
22
cache.h
22
cache.h
@ -660,6 +660,9 @@ int daemonize(void);
|
|||||||
* at least 'nr' entries; the number of entries currently allocated
|
* at least 'nr' entries; the number of entries currently allocated
|
||||||
* is 'alloc', using the standard growing factor alloc_nr() macro.
|
* is 'alloc', using the standard growing factor alloc_nr() macro.
|
||||||
*
|
*
|
||||||
|
* Consider using ALLOC_GROW_BY instead of ALLOC_GROW as it has some
|
||||||
|
* added niceties.
|
||||||
|
*
|
||||||
* DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'.
|
* DO NOT USE any expression with side-effect for 'x', 'nr', or 'alloc'.
|
||||||
*/
|
*/
|
||||||
#define ALLOC_GROW(x, nr, alloc) \
|
#define ALLOC_GROW(x, nr, alloc) \
|
||||||
@ -673,6 +676,25 @@ int daemonize(void);
|
|||||||
} \
|
} \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Similar to ALLOC_GROW but handles updating of the nr value and
|
||||||
|
* zeroing the bytes of the newly-grown array elements.
|
||||||
|
*
|
||||||
|
* DO NOT USE any expression with side-effect for any of the
|
||||||
|
* arguments.
|
||||||
|
*/
|
||||||
|
#define ALLOC_GROW_BY(x, nr, increase, alloc) \
|
||||||
|
do { \
|
||||||
|
if (increase) { \
|
||||||
|
size_t new_nr = nr + (increase); \
|
||||||
|
if (new_nr < nr) \
|
||||||
|
BUG("negative growth in ALLOC_GROW_BY"); \
|
||||||
|
ALLOC_GROW(x, new_nr, alloc); \
|
||||||
|
memset((x) + nr, 0, sizeof(*(x)) * (increase)); \
|
||||||
|
nr = new_nr; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
/* Initialize and use the cache information */
|
/* Initialize and use the cache information */
|
||||||
struct lock_file;
|
struct lock_file;
|
||||||
void preload_index(struct index_state *index,
|
void preload_index(struct index_state *index,
|
||||||
|
@ -120,14 +120,12 @@ static int parse_combine_subfilter(
|
|||||||
struct strbuf *subspec,
|
struct strbuf *subspec,
|
||||||
struct strbuf *errbuf)
|
struct strbuf *errbuf)
|
||||||
{
|
{
|
||||||
size_t new_index = filter_options->sub_nr++;
|
size_t new_index = filter_options->sub_nr;
|
||||||
char *decoded;
|
char *decoded;
|
||||||
int result;
|
int result;
|
||||||
|
|
||||||
ALLOC_GROW(filter_options->sub, filter_options->sub_nr,
|
ALLOC_GROW_BY(filter_options->sub, filter_options->sub_nr, 1,
|
||||||
filter_options->sub_alloc);
|
filter_options->sub_alloc);
|
||||||
memset(&filter_options->sub[new_index], 0,
|
|
||||||
sizeof(*filter_options->sub));
|
|
||||||
|
|
||||||
decoded = url_percent_decode(subspec->buf);
|
decoded = url_percent_decode(subspec->buf);
|
||||||
|
|
||||||
@ -255,13 +253,12 @@ int parse_list_objects_filter(
|
|||||||
|
|
||||||
string_list_append(&filter_options->filter_spec, xstrdup("+"));
|
string_list_append(&filter_options->filter_spec, xstrdup("+"));
|
||||||
filter_spec_append_urlencode(filter_options, arg);
|
filter_spec_append_urlencode(filter_options, arg);
|
||||||
ALLOC_GROW(filter_options->sub, filter_options->sub_nr + 1,
|
ALLOC_GROW_BY(filter_options->sub, filter_options->sub_nr, 1,
|
||||||
filter_options->sub_alloc);
|
filter_options->sub_alloc);
|
||||||
filter_options = &filter_options->sub[filter_options->sub_nr++];
|
|
||||||
memset(filter_options, 0, sizeof(*filter_options));
|
|
||||||
|
|
||||||
parse_error = gently_parse_list_objects_filter(
|
parse_error = gently_parse_list_objects_filter(
|
||||||
filter_options, arg, &errbuf);
|
&filter_options->sub[filter_options->sub_nr - 1], arg,
|
||||||
|
&errbuf);
|
||||||
}
|
}
|
||||||
if (parse_error)
|
if (parse_error)
|
||||||
die("%s", errbuf.buf);
|
die("%s", errbuf.buf);
|
||||||
|
Loading…
Reference in New Issue
Block a user