diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | node.c | 17 | ||||
-rw-r--r-- | nonposix.h | 2 | ||||
-rw-r--r-- | test/ChangeLog | 5 | ||||
-rw-r--r-- | test/Makefile.am | 5 | ||||
-rw-r--r-- | test/Makefile.in | 10 | ||||
-rw-r--r-- | test/Maketests | 5 | ||||
-rw-r--r-- | test/hex2.awk | 1 | ||||
-rw-r--r-- | test/hex2.in | 2 | ||||
-rw-r--r-- | test/hex2.ok | 2 |
10 files changed, 54 insertions, 4 deletions
@@ -1,3 +1,12 @@ +2016-06-01 Arnold D. Robbins <arnold@skeeve.com> + + * nonposix.h (getpgrp): Wrap declaration in ifdef so it doesn't + mess things up on POSIX systems (like Solaris). Thanks to + Nelson Beebe for the report. + * node.c (is_hex): New function to check for 0x preceded by + optional sign. + (r_force_number): Use it. Thanks to Mike Brennan for the report. + 2016-05-30 Andrew J. Schorr <aschorr@telemetry-investments.com> * gawkapi.h (awk_ext_func_t): Rename num_expected_args to @@ -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; } @@ -57,7 +57,9 @@ int unsetenv (const char *); int setenv (const char *, const char *, int); #endif /* __MINGW32__ */ +#if defined(VMS) || defined(__DJGPP__) || defined(__MINGW32__) int getpgrp(void); +#endif #if defined(__DJGPP__) || defined(__MINGW32__) int getppid(void); diff --git a/test/ChangeLog b/test/ChangeLog index c83c80e9..a0f8f47a 100644 --- a/test/ChangeLog +++ b/test/ChangeLog @@ -1,3 +1,8 @@ +2016-06-01 Arnold D. Robbins <arnold@skeeve.com> + + * Makefile.am (hex2): New test. + * hex2.awk, hex2.in, hex2.ok: New files. + 2016-05-30 Arnold D. Robbins <arnold@skeeve.com> * Makefile.am (fsnul1): New test. diff --git a/test/Makefile.am b/test/Makefile.am index 546fce3d..6e25290d 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -440,6 +440,9 @@ EXTRA_DIST = \ hello.awk \ hex.awk \ hex.ok \ + hex2.awk \ + hex2.in \ + hex2.ok \ hsprint.awk \ hsprint.ok \ icasefs.awk \ @@ -1114,7 +1117,7 @@ BASIC_TESTS = \ getline getline2 getline3 getline4 getline5 getlnbuf getnr2tb getnr2tm \ gsubasgn gsubtest gsubtst2 gsubtst3 gsubtst4 gsubtst5 gsubtst6 \ gsubtst7 gsubtst8 \ - hex hsprint \ + hex hex2 hsprint \ inpref inputred intest intprec iobug1 \ leaddig leadnl litoct longsub longwrds \ manglprm math membug1 messages minusstr mmap8k mtchi18n \ diff --git a/test/Makefile.in b/test/Makefile.in index 28365b83..e2c3e33e 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -697,6 +697,9 @@ EXTRA_DIST = \ hello.awk \ hex.awk \ hex.ok \ + hex2.awk \ + hex2.in \ + hex2.ok \ hsprint.awk \ hsprint.ok \ icasefs.awk \ @@ -1370,7 +1373,7 @@ BASIC_TESTS = \ getline getline2 getline3 getline4 getline5 getlnbuf getnr2tb getnr2tm \ gsubasgn gsubtest gsubtst2 gsubtst3 gsubtst4 gsubtst5 gsubtst6 \ gsubtst7 gsubtst8 \ - hex hsprint \ + hex hex2 hsprint \ inpref inputred intest intprec iobug1 \ leaddig leadnl litoct longsub longwrds \ manglprm math membug1 messages minusstr mmap8k mtchi18n \ @@ -3109,6 +3112,11 @@ hex: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +hex2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + hsprint: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/Maketests b/test/Maketests index 125b337e..0877ea86 100644 --- a/test/Maketests +++ b/test/Maketests @@ -420,6 +420,11 @@ hex: @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ +hex2: + @echo $@ + @AWKPATH="$(srcdir)" $(AWK) -f $@.awk < "$(srcdir)"/$@.in >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ + @-$(CMP) "$(srcdir)"/$@.ok _$@ && rm -f _$@ + hsprint: @echo $@ @AWKPATH="$(srcdir)" $(AWK) -f $@.awk >_$@ 2>&1 || echo EXIT CODE: $$? >>_$@ diff --git a/test/hex2.awk b/test/hex2.awk new file mode 100644 index 00000000..49c6203d --- /dev/null +++ b/test/hex2.awk @@ -0,0 +1 @@ +{ print $1 + 7} diff --git a/test/hex2.in b/test/hex2.in new file mode 100644 index 00000000..60f06f0f --- /dev/null +++ b/test/hex2.in @@ -0,0 +1,2 @@ +0x4 +-0x4 diff --git a/test/hex2.ok b/test/hex2.ok new file mode 100644 index 00000000..49019db8 --- /dev/null +++ b/test/hex2.ok @@ -0,0 +1,2 @@ +7 +7 |