Merge branch 'rs/dup-array'
Code cleaning. * rs/dup-array: use DUP_ARRAY add DUP_ARRAY do full type check in BARF_UNLESS_COPYABLE factor out BARF_UNLESS_COPYABLE mingw: make argv2 in try_shell_exec() non-constmaint
						commit
						60ce816cb6
					
				
							
								
								
									
										3
									
								
								attr.c
								
								
								
								
							
							
						
						
									
										3
									
								
								attr.c
								
								
								
								
							|  | @ -603,8 +603,7 @@ struct attr_check *attr_check_dup(const struct attr_check *check) | |||
|  | ||||
| 	ret->nr = check->nr; | ||||
| 	ret->alloc = check->alloc; | ||||
| 	ALLOC_ARRAY(ret->items, ret->nr); | ||||
| 	COPY_ARRAY(ret->items, check->items, ret->nr); | ||||
| 	DUP_ARRAY(ret->items, check->items, ret->nr); | ||||
|  | ||||
| 	return ret; | ||||
| } | ||||
|  |  | |||
|  | @ -1492,8 +1492,7 @@ static int run_apply(const struct am_state *state, const char *index_file) | |||
| 	 * apply_opts.v keeps referencing the allocated strings for | ||||
| 	 * strvec_clear() to release. | ||||
| 	 */ | ||||
| 	ALLOC_ARRAY(apply_argv, apply_opts.nr); | ||||
| 	COPY_ARRAY(apply_argv, apply_opts.v, apply_opts.nr); | ||||
| 	DUP_ARRAY(apply_argv, apply_opts.v, apply_opts.nr); | ||||
|  | ||||
| 	opts_left = apply_parse_options(apply_opts.nr, apply_argv, | ||||
| 					&apply_state, &force_apply, &options, | ||||
|  |  | |||
|  | @ -1594,8 +1594,7 @@ static void compute_bloom_filters(struct write_commit_graph_context *ctx) | |||
| 			_("Computing commit changed paths Bloom filters"), | ||||
| 			ctx->commits.nr); | ||||
|  | ||||
| 	ALLOC_ARRAY(sorted_commits, ctx->commits.nr); | ||||
| 	COPY_ARRAY(sorted_commits, ctx->commits.list, ctx->commits.nr); | ||||
| 	DUP_ARRAY(sorted_commits, ctx->commits.list, ctx->commits.nr); | ||||
|  | ||||
| 	if (ctx->order_by_pack) | ||||
| 		QSORT(sorted_commits, ctx->commits.nr, commit_pos_cmp); | ||||
|  |  | |||
|  | @ -245,8 +245,7 @@ static int remove_redundant_with_gen(struct repository *r, | |||
| 	 * min_gen_pos points to the current position within 'array' | ||||
| 	 * that is not yet known to be STALE. | ||||
| 	 */ | ||||
| 	ALLOC_ARRAY(sorted, cnt); | ||||
| 	COPY_ARRAY(sorted, array, cnt); | ||||
| 	DUP_ARRAY(sorted, array, cnt); | ||||
| 	QSORT(sorted, cnt, compare_commits_by_gen); | ||||
| 	min_generation = commit_graph_generation(sorted[0]); | ||||
|  | ||||
|  |  | |||
|  | @ -1396,8 +1396,7 @@ static wchar_t *make_environment_block(char **deltaenv) | |||
| 			p += s; | ||||
| 		} | ||||
|  | ||||
| 		ALLOC_ARRAY(result, size); | ||||
| 		COPY_ARRAY(result, wenv, size); | ||||
| 		DUP_ARRAY(result, wenv, size); | ||||
| 		FreeEnvironmentStringsW(wenv); | ||||
| 		return result; | ||||
| 	} | ||||
|  | @ -1839,16 +1838,13 @@ static int try_shell_exec(const char *cmd, char *const *argv) | |||
| 	if (prog) { | ||||
| 		int exec_id; | ||||
| 		int argc = 0; | ||||
| #ifndef _MSC_VER | ||||
| 		const | ||||
| #endif | ||||
| 		char **argv2; | ||||
| 		while (argv[argc]) argc++; | ||||
| 		ALLOC_ARRAY(argv2, argc + 1); | ||||
| 		argv2[0] = (char *)cmd;	/* full path to the script file */ | ||||
| 		COPY_ARRAY(&argv2[1], &argv[1], argc); | ||||
| 		exec_id = trace2_exec(prog, argv2); | ||||
| 		pid = mingw_spawnv(prog, argv2, 1); | ||||
| 		exec_id = trace2_exec(prog, (const char **)argv2); | ||||
| 		pid = mingw_spawnv(prog, (const char **)argv2, 1); | ||||
| 		if (pid >= 0) { | ||||
| 			int status; | ||||
| 			if (waitpid(pid, &status, 0) < 0) | ||||
|  |  | |||
|  | @ -94,3 +94,10 @@ expression n != 1; | |||
| @@ | ||||
| - ptr = xcalloc(n, \( sizeof(*ptr) \| sizeof(T) \) ) | ||||
| + CALLOC_ARRAY(ptr, n) | ||||
|  | ||||
| @@ | ||||
| expression dst, src, n; | ||||
| @@ | ||||
| -ALLOC_ARRAY(dst, n); | ||||
| -COPY_ARRAY(dst, src, n); | ||||
| +DUP_ARRAY(dst, src, n); | ||||
|  |  | |||
|  | @ -97,8 +97,14 @@ struct strbuf; | |||
| # define BARF_UNLESS_AN_ARRAY(arr)						\ | ||||
| 	BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(__typeof__(arr), \ | ||||
| 							   __typeof__(&(arr)[0]))) | ||||
| # define BARF_UNLESS_COPYABLE(dst, src) \ | ||||
| 	BUILD_ASSERT_OR_ZERO(__builtin_types_compatible_p(__typeof__(*(dst)), \ | ||||
| 							  __typeof__(*(src)))) | ||||
| #else | ||||
| # define BARF_UNLESS_AN_ARRAY(arr) 0 | ||||
| # define BARF_UNLESS_COPYABLE(dst, src) \ | ||||
| 	BUILD_ASSERT_OR_ZERO(0 ? ((*(dst) = *(src)), 0) : \ | ||||
| 				 sizeof(*(dst)) == sizeof(*(src))) | ||||
| #endif | ||||
| /* | ||||
|  * ARRAY_SIZE - get the number of elements in a visible array | ||||
|  | @ -1102,7 +1108,7 @@ int xstrncmpz(const char *s, const char *t, size_t len); | |||
| #define REALLOC_ARRAY(x, alloc) (x) = xrealloc((x), st_mult(sizeof(*(x)), (alloc))) | ||||
|  | ||||
| #define COPY_ARRAY(dst, src, n) copy_array((dst), (src), (n), sizeof(*(dst)) + \ | ||||
| 	BUILD_ASSERT_OR_ZERO(sizeof(*(dst)) == sizeof(*(src)))) | ||||
| 	BARF_UNLESS_COPYABLE((dst), (src))) | ||||
| static inline void copy_array(void *dst, const void *src, size_t n, size_t size) | ||||
| { | ||||
| 	if (n) | ||||
|  | @ -1110,13 +1116,18 @@ static inline void copy_array(void *dst, const void *src, size_t n, size_t size) | |||
| } | ||||
|  | ||||
| #define MOVE_ARRAY(dst, src, n) move_array((dst), (src), (n), sizeof(*(dst)) + \ | ||||
| 	BUILD_ASSERT_OR_ZERO(sizeof(*(dst)) == sizeof(*(src)))) | ||||
| 	BARF_UNLESS_COPYABLE((dst), (src))) | ||||
| static inline void move_array(void *dst, const void *src, size_t n, size_t size) | ||||
| { | ||||
| 	if (n) | ||||
| 		memmove(dst, src, st_mult(size, n)); | ||||
| } | ||||
|  | ||||
| #define DUP_ARRAY(dst, src, n) do { \ | ||||
| 	size_t dup_array_n_ = (n); \ | ||||
| 	COPY_ARRAY(ALLOC_ARRAY((dst), dup_array_n_), (src), dup_array_n_); \ | ||||
| } while (0) | ||||
|  | ||||
| /* | ||||
|  * These functions help you allocate structs with flex arrays, and copy | ||||
|  * the data directly into the array. For example, if you had: | ||||
|  |  | |||
|  | @ -702,8 +702,7 @@ static struct option *preprocess_options(struct parse_opt_ctx_t *ctx, | |||
| 	if (!nr_aliases) | ||||
| 		return NULL; | ||||
|  | ||||
| 	ALLOC_ARRAY(newopt, nr + 1); | ||||
| 	COPY_ARRAY(newopt, options, nr + 1); | ||||
| 	DUP_ARRAY(newopt, options, nr + 1); | ||||
|  | ||||
| 	/* each alias has two string pointers and NULL */ | ||||
| 	CALLOC_ARRAY(ctx->alias_groups, 3 * (nr_aliases + 1)); | ||||
|  |  | |||
|  | @ -681,8 +681,7 @@ void copy_pathspec(struct pathspec *dst, const struct pathspec *src) | |||
| 	int i, j; | ||||
|  | ||||
| 	*dst = *src; | ||||
| 	ALLOC_ARRAY(dst->items, dst->nr); | ||||
| 	COPY_ARRAY(dst->items, src->items, dst->nr); | ||||
| 	DUP_ARRAY(dst->items, src->items, dst->nr); | ||||
|  | ||||
| 	for (i = 0; i < dst->nr; i++) { | ||||
| 		struct pathspec_item *d = &dst->items[i]; | ||||
|  | @ -691,8 +690,7 @@ void copy_pathspec(struct pathspec *dst, const struct pathspec *src) | |||
| 		d->match = xstrdup(s->match); | ||||
| 		d->original = xstrdup(s->original); | ||||
|  | ||||
| 		ALLOC_ARRAY(d->attr_match, d->attr_match_nr); | ||||
| 		COPY_ARRAY(d->attr_match, s->attr_match, d->attr_match_nr); | ||||
| 		DUP_ARRAY(d->attr_match, s->attr_match, d->attr_match_nr); | ||||
| 		for (j = 0; j < d->attr_match_nr; j++) { | ||||
| 			const char *value = s->attr_match[j].value; | ||||
| 			d->attr_match[j].value = xstrdup_or_null(value); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue
	
	 Junio C Hamano
						Junio C Hamano