From 4eb9d6ef85652741d2852f89365a0af08ddc382e Mon Sep 17 00:00:00 2001 From: Jeremy Harris Date: Tue, 5 Jun 2012 16:16:40 +0100 Subject: [PATCH] Support "G" modifier on numbers in ${if comparisons. --- src/src/expand.c | 27 +++++++++++++++++---------- test/scripts/0000-Basic/0002 | 6 ++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/src/src/expand.c b/src/src/expand.c index 62e8e5747..70bd86fc1 100644 --- a/src/src/expand.c +++ b/src/src/expand.c @@ -6217,18 +6217,25 @@ else if (value < 0 && isplus) } else { - if (tolower(*endptr) == 'k') + switch (tolower(*endptr)) { - if (value > LLONG_MAX/1024 || value < LLONG_MIN/1024) errno = ERANGE; + default: + break; + case 'k': + if (value > LLONG_MAX/1024 || value < LLONG_MIN/1024) errno = ERANGE; else value *= 1024; - endptr++; - } - else if (tolower(*endptr) == 'm') - { - if (value > LLONG_MAX/(1024*1024) || value < LLONG_MIN/(1024*1024)) - errno = ERANGE; - else value *= 1024*1024; - endptr++; + endptr++; + break; + case 'm': + if (value > LLONG_MAX/(1024*1024) || value < LLONG_MIN/(1024*1024)) errno = ERANGE; + else value *= 1024*1024; + endptr++; + break; + case 'g': + if (value > LLONG_MAX/(1024*1024*1024) || value < LLONG_MIN/(1024*1024*1024)) errno = ERANGE; + else value *= 1024*1024*1024; + endptr++; + break; } if (errno == ERANGE) msg = US"absolute value of integer \"%s\" is too large (overflow)"; diff --git a/test/scripts/0000-Basic/0002 b/test/scripts/0000-Basic/0002 index f87251e1e..40e4259ef 100644 --- a/test/scripts/0000-Basic/0002 +++ b/test/scripts/0000-Basic/0002 @@ -238,6 +238,12 @@ hash: ${if eq {1}{2}{${hash_3:invalid}}{NO}} md5: ${if eq {1}{2}{${md5:invalid}}{NO}} mask: ${if eq {1}{2}{${mask:invalid}}{NO}} +# Number suffixes in conditions +1k: ${if >{1}{1k}{n}{y}} +1K: ${if >{1}{1K}{n}{y}} +1M: ${if >{1}{1M}{n}{y}} +1G: ${if >{1}{1G}{n}{y}} + # Numeric overflow # >32b should work, >64b not -- 2.30.2