From 97ddc600c95623bf803eac4f2a4deda2a2db02d4 Mon Sep 17 00:00:00 2001 From: Rob Landley Date: Wed, 15 Jun 2016 11:43:48 -0500 Subject: The glibc bug at https://sourceware.org/bugzilla/show_bug.cgi?id=17829 continues to get worse, and now can't handle INT_MAX/2 either. So our first workaround _also_ broke. But posix says "A negative precision is taken as if the precision were omitted." and that _doesn't_ trigger the glibc bug, so use that instead. --- toys/posix/grep.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/toys/posix/grep.c b/toys/posix/grep.c index 2ca02d2c..9e50a7ca 100644 --- a/toys/posix/grep.c +++ b/toys/posix/grep.c @@ -74,7 +74,7 @@ static void outline(char *line, char dash, char *name, long lcount, long bcount, if (!line || (lcount && (toys.optflags&FLAG_n))) printf("%ld%c", lcount, line ? dash : TT.outdelim); if (bcount && (toys.optflags&FLAG_b)) printf("%ld%c", bcount-1, dash); - if (line) xprintf("%.*s%c", trim ? trim : INT_MAX/2, line, TT.outdelim); + if (line) xprintf("%.*s%c", trim, line, TT.outdelim); } // Show matches in one file @@ -201,13 +201,13 @@ static void do_grep(int fd, char *name) while (dlb) { struct double_list *dl = dlist_pop(&dlb); - outline(dl->data, '-', name, lcount-before, 0, 0); + outline(dl->data, '-', name, lcount-before, 0, -1); free(dl->data); free(dl); before--; } - outline(line, ':', name, lcount, bcount, 0); + outline(line, ':', name, lcount, bcount, -1); if (TT.a) after = TT.a+1; } else outline(start+matches.rm_so, ':', name, lcount, bcount, matches.rm_eo-matches.rm_so); @@ -223,7 +223,7 @@ static void do_grep(int fd, char *name) int discard = (after || TT.b); if (after && --after) { - outline(line, '-', name, lcount, 0, 0); + outline(line, '-', name, lcount, 0, -1); discard = 0; } if (discard && TT.b) { @@ -247,7 +247,7 @@ static void do_grep(int fd, char *name) if ((toys.optflags & FLAG_m) && mcount >= TT.m) break; } - if (toys.optflags & FLAG_c) outline(0, ':', name, mcount, 0, 0); + if (toys.optflags & FLAG_c) outline(0, ':', name, mcount, 0, -1); // loopfiles will also close the fd, but this frees an (opaque) struct. fclose(file); -- cgit v1.2.3