[PATCH 1/6] show-diff.c: clean up private buffer use.
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:41:53
[PATCH 1/6] show-diff.c: clean up private buffer use. This patch fixes sq_expand() and show_differences() not to use and hold onto its privately allocated buffer, which was a misguided attempt to reduce calls to malloc but made later changes harder. Signed-off-by: Junio C Hamano <redacted> --- show-diff.c | 22 ++++++---------------- 1 files changed, 6 insertions(+), 16 deletions(-) show-diff.c: 1342b3c9848a7675665594a6bc19d95e3b7ff358
--- a/show-diff.c
+++ b/show-diff.c@@ -23,7 +23,6 @@ static char *diff_cmd = "diff -L '%s' -u static char *sq_expand(char *src) { static char *buf = NULL; - static int buf_size = -1; int cnt, c; char *cp;
@@ -32,12 +31,8 @@ static char *sq_expand(char *src) if (*cp == '\'') cnt += 3; - if (buf_size < cnt) { - free(buf); - buf_size = cnt; - buf = malloc(cnt); - } - + if (! (buf = malloc(cnt))) + return buf; cp = buf; while ((c = *src++)) { if (c != '\'')
@@ -55,22 +50,17 @@ static void show_differences(char *name, unsigned long long old_size) { FILE *f; - static char *cmd = NULL; - static int cmd_size = -1; - char *name_sq = sq_expand(name); - int cmd_required_length = strlen(name_sq) * 2 + strlen(diff_cmd); + int cmd_size = strlen(name_sq) * 2 + strlen(diff_cmd); + char *cmd = malloc(cmd_size); - if (cmd_size < cmd_required_length) { - free(cmd); - cmd_size = cmd_required_length; - cmd = malloc(cmd_required_length); - } snprintf(cmd, cmd_size, diff_cmd, name_sq, name_sq); f = popen(cmd, "w"); if (old_size) fwrite(old_contents, old_size, 1, f); pclose(f); + free(name_sq); + free(cmd); } static void show_diff_empty(struct cache_entry *ce)