Code

diff-options: add --stat (take 2)
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>
Thu, 13 Apr 2006 23:09:48 +0000 (01:09 +0200)
committerJunio C Hamano <junkio@cox.net>
Thu, 13 Apr 2006 23:50:02 +0000 (16:50 -0700)
... and a fix for an invalid free():

Signed-off-by: Junio C Hamano <junkio@cox.net>
diff.c

diff --git a/diff.c b/diff.c
index 14ffc774f07b843c1d5f8b1370816c06cf536abf..c120239ef34b150e3d4b94b6815714a8a0c33e23 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -266,7 +266,7 @@ static void show_stats(struct diffstat_t* data)
                        char *qname = xmalloc(len + 1);
                        quote_c_style(name, qname, NULL, 0);
                        free(name);
-                       name = qname;
+                       data->files[i]->name = name = qname;
                }
 
                /*
@@ -297,10 +297,10 @@ static void show_stats(struct diffstat_t* data)
                if (added < 0) {
                        /* binary file */
                        printf(" %s%-*s |  Bin\n", prefix, len, name);
-                       continue;
+                       goto free_diffstat_file;
                } else if (added + deleted == 0) {
                        total_files--;
-                       continue;
+                       goto free_diffstat_file;
                }
 
                add = added;
@@ -314,11 +314,11 @@ static void show_stats(struct diffstat_t* data)
                        add = (add * max + max_change / 2) / max_change;
                        del = total - add;
                }
-               /* TODO: binary */
                printf(" %s%-*s |%5d %.*s%.*s\n", prefix,
                                len, name, added + deleted,
                                add, pluses, del, minuses);
-               free(name);
+       free_diffstat_file:
+               free(data->files[i]->name);
                free(data->files[i]);
        }
        free(data->files);