diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2016-06-01 11:40:13 -0400 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2016-06-01 11:40:13 -0400 |
commit | 2da0144d45852d363fc25c85c5893e3f81f518bc (patch) | |
tree | f03cbb5402162ba1f0d21f50b777197e0458f2df /node.c | |
parent | 473067f44b189619cb7abf4df092757ca9ff2a98 (diff) | |
parent | 2ec9d8362cb2d85891417c2ffd98ea74377b2c12 (diff) | |
download | egawk-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.c | 17 |
1 files changed, 15 insertions, 2 deletions
@@ -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; } |