progress.c: avoid use of dynamic-sized array
authorBoyd Lynn Gerber <gerberb@zenez.com>
Sun, 8 Jun 2008 15:26:15 +0000 (09:26 -0600)
committerJunio C Hamano <gitster@pobox.com>
Sun, 8 Jun 2008 20:56:32 +0000 (13:56 -0700)
Dynamically sized arrays are gcc and C99 construct.  Using them hurts
portability to older compilers, although using them is nice in this case
it is not desirable.  This patch removes the only use of the construct
in stop_progress_msg(); the function is about writing out a single line
of a message, and the existing callers of this function feed messages
of only bounded size anyway, so use of dynamic array is simply overkill.

Signed-off-by: Boyd Lynn Gerber <gerberb@zenez.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
progress.c

index d19f80c0bb25928383f8a1aff3f6f49f9a65131c..55a8687ad15788f8ea5a5beb463d216908f618b2 100644 (file)
@@ -241,16 +241,21 @@ void stop_progress_msg(struct progress **p_progress, const char *msg)
        *p_progress = NULL;
        if (progress->last_value != -1) {
                /* Force the last update */
-               char buf[strlen(msg) + 5];
+               char buf[128], *bufp;
+               size_t len = strlen(msg) + 5;
                struct throughput *tp = progress->throughput;
+
+               bufp = (len < sizeof(buf)) ? buf : xmalloc(len + 1);
                if (tp) {
                        unsigned int rate = !tp->avg_misecs ? 0 :
                                        tp->avg_bytes / tp->avg_misecs;
                        throughput_string(tp, tp->curr_total, rate);
                }
                progress_update = 1;
-               sprintf(buf, ", %s.\n", msg);
-               display(progress, progress->last_value, buf);
+               sprintf(bufp, ", %s.\n", msg);
+               display(progress, progress->last_value, bufp);
+               if (buf != bufp)
+                       free(bufp);
        }
        clear_progress_signal();
        free(progress->throughput);