@ -545,6 +545,24 @@ static char *pprint_rename(const char *a, const char *b)
int pfx_length, sfx_length;
int pfx_length, sfx_length;
int len_a = strlen(a);
int len_a = strlen(a);
int len_b = strlen(b);
int len_b = strlen(b);
int qlen_a = quote_c_style(a, NULL, NULL, 0);
int qlen_b = quote_c_style(b, NULL, NULL, 0);
if (qlen_a || qlen_b) {
if (qlen_a) len_a = qlen_a;
if (qlen_b) len_b = qlen_b;
name = xmalloc( len_a + len_b + 5 );
if (qlen_a)
quote_c_style(a, name, NULL, 0);
else
memcpy(name, a, len_a);
memcpy(name + len_a, " => ", 4);
if (qlen_b)
quote_c_style(b, name + len_a + 4, NULL, 0);
else
memcpy(name + len_a + 4, b, len_b + 1);
return name;
}
/* Find common prefix */
/* Find common prefix */
pfx_length = 0;
pfx_length = 0;
@ -701,12 +719,14 @@ static void show_stats(struct diffstat_t* data, struct diff_options *options)
struct diffstat_file *file = data->files[i];
struct diffstat_file *file = data->files[i];
int change = file->added + file->deleted;
int change = file->added + file->deleted;
len = quote_c_style(file->name, NULL, NULL, 0);
if (!file->is_renamed) { /* renames are already quoted by pprint_rename */
if (len) {
len = quote_c_style(file->name, NULL, NULL, 0);
char *qname = xmalloc(len + 1);
if (len) {
quote_c_style(file->name, qname, NULL, 0);
char *qname = xmalloc(len + 1);
free(file->name);
quote_c_style(file->name, qname, NULL, 0);
file->name = qname;
free(file->name);
file->name = qname;
}
}
}
len = strlen(file->name);
len = strlen(file->name);
@ -838,7 +858,7 @@ static void show_numstat(struct diffstat_t* data, struct diff_options *options)
printf("-\t-\t");
printf("-\t-\t");
else
else
printf("%d\t%d\t", file->added, file->deleted);
printf("%d\t%d\t", file->added, file->deleted);
if (options->line_termination &&
if (options->line_termination && !file->is_renamed &&
quote_c_style(file->name, NULL, NULL, 0))
quote_c_style(file->name, NULL, NULL, 0))
quote_c_style(file->name, NULL, stdout, 0);
quote_c_style(file->name, NULL, stdout, 0);
else
else