From 8db1632409f5b1e788ec314aa713f9f054c81147 Mon Sep 17 00:00:00 2001 From: FRIGN Date: Mon, 23 Mar 2015 22:56:26 +0100 Subject: [PATCH] Drop maxdigits in expr(1) This just begs for off-by-ones. Just drop it and use BUFSIZ. We'll survive it. --- expr.c | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/expr.c b/expr.c index 095fa97..e9b794f 100644 --- a/expr.c +++ b/expr.c @@ -17,8 +17,6 @@ struct val { long long num; }; -static size_t maxdigits; - static void enan(struct val *v) { @@ -39,7 +37,7 @@ static int valcmp(struct val *a, struct val *b) { int ret; - char buf[maxdigits]; + char buf[BUFSIZ]; if (!a->str && !b->str) { ret = (a->num > b->num) - (a->num < b->num); @@ -63,7 +61,7 @@ match(struct val *vstr, struct val *vregx, struct val *ret) regmatch_t matches[2]; long long d; size_t anchlen; - char strbuf[maxdigits + 1], regxbuf[maxdigits + 1], + char strbuf[BUFSIZ], regxbuf[BUFSIZ], *s, *p, *anchreg, *str, *regx; const char *errstr; @@ -263,11 +261,6 @@ usage(void) int main(int argc, char *argv[]) { - long long n = LLONG_MIN; - - /* maximum number of digits + sign */ - for (maxdigits = (n < 0); n; n /= 10, ++maxdigits); - ARGBEGIN { default: usage();