summaryrefslogtreecommitdiff
path: root/int_array.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-06-26 18:26:39 +0300
committerArnold D. Robbins <arnold@skeeve.com>2016-06-26 18:26:39 +0300
commite18ebe10166e2c63f3385666978b678fe6ce67a2 (patch)
tree7f6a2249dfda678c8651f0e24a273bb8b54bb886 /int_array.c
parent278767f062a9c6f8ae9ff777b1a41e094813fa09 (diff)
downloadgawk-e18ebe10166e2c63f3385666978b678fe6ce67a2.tar.gz
Minor improvements after Andy's reworking of stuff.
Diffstat (limited to 'int_array.c')
-rw-r--r--int_array.c85
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;
}