diff options
Diffstat (limited to 'shared.c')
| -rw-r--r-- | shared.c | 15 | 
1 files changed, 12 insertions, 3 deletions
| @@ -10,7 +10,6 @@  struct cgit_repolist cgit_repolist;  struct cgit_context ctx; -int cgit_cmd;  int chk_zero(int result, char *msg)  { @@ -60,6 +59,7 @@ struct cgit_repo *cgit_add_repo(const char *url)  	ret->enable_log_filecount = ctx.cfg.enable_log_filecount;  	ret->enable_log_linecount = ctx.cfg.enable_log_linecount;  	ret->enable_remote_branches = ctx.cfg.enable_remote_branches; +	ret->enable_subject_links = ctx.cfg.enable_subject_links;  	ret->max_stats = ctx.cfg.max_stats;  	ret->module_link = ctx.cfg.module_link;  	ret->readme = NULL; @@ -263,7 +263,8 @@ int filediff_cb(void *priv, mmbuffer_t *mb, int nbuf)  int cgit_diff_files(const unsigned char *old_sha1,  		    const unsigned char *new_sha1, unsigned long *old_size, -		    unsigned long *new_size, int *binary, linediff_fn fn) +		    unsigned long *new_size, int *binary, int context, +		    linediff_fn fn)  {  	mmfile_t file1, file2;  	xpparam_t diff_params; @@ -279,6 +280,10 @@ int cgit_diff_files(const unsigned char *old_sha1,  	if ((file1.ptr && buffer_is_binary(file1.ptr, file1.size)) ||  	    (file2.ptr && buffer_is_binary(file2.ptr, file2.size))) {  		*binary = 1; +		if (file1.size) +			free(file1.ptr); +		if (file2.size) +			free(file2.ptr);  		return 0;  	} @@ -286,11 +291,15 @@ int cgit_diff_files(const unsigned char *old_sha1,  	memset(&emit_params, 0, sizeof(emit_params));  	memset(&emit_cb, 0, sizeof(emit_cb));  	diff_params.flags = XDF_NEED_MINIMAL; -	emit_params.ctxlen = 3; +	emit_params.ctxlen = context > 0 ? context : 3;  	emit_params.flags = XDL_EMIT_FUNCNAMES;  	emit_cb.outf = filediff_cb;  	emit_cb.priv = fn;  	xdl_diff(&file1, &file2, &diff_params, &emit_params, &emit_cb); +	if (file1.size) +		free(file1.ptr); +	if (file2.size) +		free(file2.ptr);  	return 0;  } | 
