aboutsummaryrefslogtreecommitdiffstats
path: root/node.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2016-06-01 11:40:13 -0400
committerArnold D. Robbins <arnold@skeeve.com>2016-06-01 11:40:13 -0400
commit2da0144d45852d363fc25c85c5893e3f81f518bc (patch)
treef03cbb5402162ba1f0d21f50b777197e0458f2df /node.c
parent473067f44b189619cb7abf4df092757ca9ff2a98 (diff)
parent2ec9d8362cb2d85891417c2ffd98ea74377b2c12 (diff)
downloadegawk-2da0144d45852d363fc25c85c5893e3f81f518bc.tar.gz
egawk-2da0144d45852d363fc25c85c5893e3f81f518bc.tar.bz2
egawk-2da0144d45852d363fc25c85c5893e3f81f518bc.zip
Merge branch 'master' into feature/cmake
Diffstat (limited to 'node.c')
-rw-r--r--node.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/node.c b/node.c
index 9227cf2d..93823270 100644
--- a/node.c
+++ b/node.c
@@ -38,6 +38,20 @@ NODE *(*str2number)(NODE *) = r_force_number;
NODE *(*format_val)(const char *, int, NODE *) = r_format_val;
int (*cmp_numbers)(const NODE *, const NODE *) = cmp_awknums;
+/* is_hex --- return true if a string looks like a hex value */
+
+static bool
+is_hex(const char *str)
+{
+ if (*str == '-' || *str == '+')
+ str++;
+
+ if (str[0] == '0' && (str[1] == 'x' || str[1] == 'X'))
+ return true;
+
+ return false;
+}
+
/* force_number --- force a value to be numeric */
NODE *
@@ -96,8 +110,7 @@ r_force_number(NODE *n)
|| (! do_posix /* not POSIXLY paranoid and */
&& (is_alpha((unsigned char) *cp) /* letter, or */
/* CANNOT do non-decimal and saw 0x */
- || (! do_non_decimal_data && cp[0] == '0'
- && (cp[1] == 'x' || cp[1] == 'X'))))) {
+ || (! do_non_decimal_data && is_hex(cp))))) {
return n;
}