diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-06-26 18:26:39 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-06-26 18:26:39 +0300 |
commit | e18ebe10166e2c63f3385666978b678fe6ce67a2 (patch) | |
tree | 7f6a2249dfda678c8651f0e24a273bb8b54bb886 /int_array.c | |
parent | 278767f062a9c6f8ae9ff777b1a41e094813fa09 (diff) | |
download | egawk-e18ebe10166e2c63f3385666978b678fe6ce67a2.tar.gz egawk-e18ebe10166e2c63f3385666978b678fe6ce67a2.tar.bz2 egawk-e18ebe10166e2c63f3385666978b678fe6ce67a2.zip |
Minor improvements after Andy's reworking of stuff.
Diffstat (limited to 'int_array.c')
-rw-r--r-- | int_array.c | 85 |
1 files changed, 44 insertions, 41 deletions
diff --git a/int_array.c b/int_array.c index 4ba7c98b..f17bddef 100644 --- a/int_array.c +++ b/int_array.c @@ -96,11 +96,13 @@ is_integer(NODE *symbol, NODE *subs) if ((subs->flags & STRCUR) != 0) { char *cp = subs->stptr; - if ((cp[0] == '0') || isspace((unsigned char) cp[0]) - || (subs->stlen < 1) + if ( subs->stlen == 0 + || cp[0] == '0' + || isspace((unsigned char) cp[0]) || isspace((unsigned char) cp[subs->stlen - 1]) - || ((subs->stlen >= 2) && (cp[0] == '-') - && (cp[1] == '0'))) + || ( subs->stlen >= 2 + && (cp[0] == '-' || cp[0] == '+') + && cp[1] == '0')) return NULL; } @@ -122,50 +124,51 @@ is_integer(NODE *symbol, NODE *subs) * a[-3]=1; print "-3" in a -- true */ - { - /* must be a STRING */ - char *cp = subs->stptr, *cpend, *ptr; - char save; - size_t len = subs->stlen; + /* must be a STRING */ + char *cp = subs->stptr, *cpend, *ptr; + char save; + size_t len = subs->stlen; - if (len == 0 || (! isdigit((unsigned char) *cp) && *cp != '-')) - return NULL; - if (len > 1 && - ((*cp == '0') /* "00", "011" .. */ - || (*cp == '-' && *(cp + 1) == '0') /* "-0", "-011" .. */ - ) - ) - return NULL; - if (len == 1 && *cp != '-') { /* single digit */ - subs->numbr = (long) (*cp - '0'); - if ((subs->flags & MAYBE_NUM) != 0) { - subs->flags &= ~(MAYBE_NUM|STRING); - subs->flags |= NUMBER; - } - subs->flags |= (NUMCUR|NUMINT); - return & success_node; - } - - cpend = cp + len; - save = *cpend; - *cpend = '\0'; + if (len == 0 || (! isdigit((unsigned char) *cp) && *cp != '-')) + return NULL; - errno = 0; - l = strtol(cp, & ptr, 10); - *cpend = save; - if (errno != 0 || ptr != cpend) - return NULL; - subs->numbr = l; + if (len > 1 && + ((*cp == '0') /* "00", "011" .. */ + || (*cp == '-' && *(cp + 1) == '0') /* "-0", "-011" .. */ + ) + ) + return NULL; + if (len == 1 && *cp != '-') { /* single digit */ + subs->numbr = (long) (*cp - '0'); if ((subs->flags & MAYBE_NUM) != 0) { subs->flags &= ~(MAYBE_NUM|STRING); subs->flags |= NUMBER; } - subs->flags |= NUMCUR; - if (l <= INT32_MAX && l >= INT32_MIN) { - subs->flags |= NUMINT; - return & success_node; - } + subs->flags |= (NUMCUR|NUMINT); + return & success_node; } + + cpend = cp + len; + save = *cpend; + *cpend = '\0'; + + errno = 0; + l = strtol(cp, & ptr, 10); + *cpend = save; + if (errno != 0 || ptr != cpend) + return NULL; + + subs->numbr = l; + if ((subs->flags & MAYBE_NUM) != 0) { + subs->flags &= ~(MAYBE_NUM|STRING); + subs->flags |= NUMBER; + } + subs->flags |= NUMCUR; + if (l <= INT32_MAX && l >= INT32_MIN) { + subs->flags |= NUMINT; + return & success_node; + } + return NULL; } |