[PATCH] git-daemon: Worked around uclibc buffer problem
From: Lars Stoltenow <hidden>
Date: 2016-06-15 22:45:28
Subsystem:
the rest · Maintainer:
Linus Torvalds
uclibc immediately write()s every string argument to fprintf, which causes superfluous 'remote: ' strings to appear when cloning repos. This patch makes it write the message in one shot. Signed-off-by: Lars Stoltenow <redacted> --- builtin-pack-objects.c | 7 +++++-- progress.c | 8 ++++++-- 2 files changed, 11 insertions(+), 4 deletions(-)
diff --git a/builtin-pack-objects.c b/builtin-pack-objects.c
index 1158e42..94f7404 100644
--- a/builtin-pack-objects.c
+++ b/builtin-pack-objects.c@@ -2232,9 +2232,12 @@ int cmd_pack_objects(int argc, const char **argv, const char *prefix) if (nr_result) prepare_pack(window, depth); write_pack_file(); - if (progress) - fprintf(stderr, "Total %"PRIu32" (delta %"PRIu32")," + if (progress) { + char message[128]; + snprintf(message, sizeof(message), "Total %"PRIu32" (delta %"PRIu32")," " reused %"PRIu32" (delta %"PRIu32")\n", written, written_delta, reused, reused_delta); + fputs(message, stderr); + } return 0; }
diff --git a/progress.c b/progress.c
index 55a8687..56c9134 100644
--- a/progress.c
+++ b/progress.c@@ -94,16 +94,20 @@ static int display(struct progress *progress, unsigned n, const char *done) if (progress->total) { unsigned percent = n * 100 / progress->total; if (percent != progress->last_percent || progress_update) { + char message[128]; progress->last_percent = percent; - fprintf(stderr, "%s: %3u%% (%u/%u)%s%s", + snprintf(message, sizeof(message), "%s: %3u%% (%u/%u)%s%s", progress->title, percent, n, progress->total, tp, eol); + fputs(message, stderr); fflush(stderr); progress_update = 0; return 1; } } else if (progress_update) { - fprintf(stderr, "%s: %u%s%s", progress->title, n, tp, eol); + char message[128]; + snprintf(message, sizeof(message), "%s: %u%s%s", progress->title, n, tp, eol); + fputs(message, stderr); fflush(stderr); progress_update = 0; return 1;
--
1.6.0.2.GIT