From: Junio C Hamano Date: Mon, 18 Apr 2005 22:07:24 +0000 (-0700) Subject: [PATCH] show-diff.c: clean up private buffer use. X-Git-Tag: v0.99~825 X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=commitdiff_plain;h=c157d376740f224789f464785718f3757ea8aa92;p=git.git [PATCH] 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 Signed-off-by: Linus Torvalds --- diff --git a/show-diff.c b/show-diff.c index 36afb3cc9..2bd789c26 100644 --- a/show-diff.c +++ b/show-diff.c @@ -23,7 +23,6 @@ static char *diff_cmd = "diff -L '%s' -u -N - '%s'"; 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, void *old_contents, 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)