1 --- gawk-3.1.5/node.c.num2str 2005-07-26 20:07:43.000000000 +0200
2 +++ gawk-3.1.5/node.c 2005-12-22 19:41:55.000000000 +0100
4 register char *sp = buf;
6 char *orig, *trans, save;
9 if (! do_traditional && (s->flags & INTLSTR) != 0) {
10 save = s->stptr[s->stlen];
12 return tmp_string(trans, strlen(trans));
15 - /* not an integral value, or out of range */
16 - if ((val = double_to_int(s->numbr)) != s->numbr
17 - || val < LONG_MIN || val > LONG_MAX) {
18 + /* conversion to long overflows, or out of range, or not integral */
19 + val = double_to_int(s->numbr);
21 + if ( (s->numbr > 0 && num < 0)
22 + || (s->numbr < 0 && num > 0)
23 + || val < LONG_MIN || val > LONG_MAX || val != s->numbr) {
25 * Once upon a time, if GFMT_WORKAROUND wasn't defined,
26 * we just blindly did this:
31 - /* integral value */
32 - /* force conversion to long only once */
33 - register long num = (long) val;
34 + /* integral value, in range, too! */
35 if (num < NVAL && num >= 0) {
36 sp = (char *) values[num];