X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=sideband.c;h=b6777812cb92c1c169ee395164d53a0c2e6eceb2;hb=5411bdc4e4b170a57a61b2d486ab344896c41500;hp=756bbc28d71448781294151cbacd30f68b2bb97b;hpb=144126abf99f2eac48e63b7ea85a8f3f99f814db;p=git.git diff --git a/sideband.c b/sideband.c index 756bbc28d..b6777812c 100644 --- a/sideband.c +++ b/sideband.c @@ -13,14 +13,27 @@ */ #define PREFIX "remote:" -#define SUFFIX "\033[K" /* change to " " if ANSI sequences don't work */ + +#define ANSI_SUFFIX "\033[K" +#define DUMB_SUFFIX " " + +#define FIX_SIZE 10 /* large enough for any of the above */ int recv_sideband(const char *me, int in_stream, int out, int err) { unsigned pf = strlen(PREFIX); - unsigned sf = strlen(SUFFIX); - char buf[pf + LARGE_PACKET_MAX + sf + 1]; + unsigned sf; + char buf[LARGE_PACKET_MAX + 2*FIX_SIZE]; + char *suffix, *term; + memcpy(buf, PREFIX, pf); + term = getenv("TERM"); + if (term && strcmp(term, "dumb")) + suffix = ANSI_SUFFIX; + else + suffix = DUMB_SUFFIX; + sf = strlen(suffix); + while (1) { int band, len; len = packet_read_line(in_stream, buf + pf, LARGE_PACKET_MAX); @@ -59,10 +72,10 @@ int recv_sideband(const char *me, int in_stream, int out, int err) * line data actually contains something. */ if (brk > pf+1 + 1) { - char save[sf]; + char save[FIX_SIZE]; memcpy(save, buf + brk, sf); buf[brk + sf - 1] = buf[brk - 1]; - memcpy(buf + brk - 1, SUFFIX, sf); + memcpy(buf + brk - 1, suffix, sf); safe_write(err, buf, brk + sf); memcpy(buf + brk, save, sf); } else