aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--array.c2
-rw-r--r--awk.h3
-rw-r--r--cint_array.c8
-rw-r--r--int_array.c14
-rw-r--r--str_array.c4
6 files changed, 28 insertions, 14 deletions
diff --git a/ChangeLog b/ChangeLog
index e6d12988..1207f286 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,7 +1,16 @@
+2016-05-02 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (success_node): Declare.
+ * array.c (success_node): Define.
+ * cint_array.c, int_array.c, str_array.c: Use `& success_node'
+ instead of `(NODE **) ! NULL' to indicate success throughout.
+ Thanks to Pat Rankin for the cleanup suggestion.
+
2016-04-27 Arnold D. Robbins <arnold@skeeve.com>
* io.c (set_RS): Use rs1scan if do_traditional, even if length
- of RS is > 1.
+ of RS is > 1. Bug reported by Glauco Ciullini
+ <glauco.ciullini6245@gmail.com>.
2016-04-24 Arnold D. Robbins <arnold@skeeve.com>
diff --git a/array.c b/array.c
index 59428ba2..fa6985de 100644
--- a/array.c
+++ b/array.c
@@ -28,6 +28,8 @@
extern FILE *output_fp;
extern NODE **fmt_list; /* declared in eval.c */
+NODE *success_node;
+
static size_t SUBSEPlen;
static char *SUBSEP;
static char indent_char[] = " ";
diff --git a/awk.h b/awk.h
index fdf1ab3a..c643581a 100644
--- a/awk.h
+++ b/awk.h
@@ -1075,6 +1075,9 @@ extern afunc_t str_array_func[];
extern afunc_t cint_array_func[];
extern afunc_t int_array_func[];
+/* special node used to indicate success in array routines (not NULL) */
+extern NODE *success_node;
+
extern BLOCK nextfree[];
extern bool field0_valid;
diff --git a/cint_array.c b/cint_array.c
index 3945e6e7..e74e279c 100644
--- a/cint_array.c
+++ b/cint_array.c
@@ -162,7 +162,7 @@ cint_array_init(NODE *symbol ATTRIBUTE_UNUSED, NODE *subs ATTRIBUTE_UNUSED)
} else
null_array(symbol);
- return (NODE **) ! NULL;
+ return & success_node;
}
@@ -172,7 +172,7 @@ NODE **
is_uinteger(NODE *symbol, NODE *subs)
{
if (is_integer(symbol, subs) != NULL && subs->numbr >= 0)
- return (NODE **) ! NULL;
+ return & success_node;
return NULL;
}
@@ -358,7 +358,7 @@ cint_remove(NODE *symbol, NODE *subs)
freenode(xn);
}
- return (NODE **) ! NULL;
+ return & success_node;
xremove:
xn = symbol->xarray;
@@ -371,7 +371,7 @@ xremove:
symbol->table_size--;
assert(symbol->table_size > 0);
- return (NODE **) ! NULL;
+ return & success_node;
}
diff --git a/int_array.c b/int_array.c
index c2bf37b5..8e6af037 100644
--- a/int_array.c
+++ b/int_array.c
@@ -74,7 +74,7 @@ int_array_init(NODE *symbol, NODE *subs ATTRIBUTE_UNUSED)
} else
null_array(symbol);
- return (NODE **) ! NULL;
+ return & success_node;
}
/* is_integer --- check if subscript is an integer */
@@ -89,13 +89,13 @@ is_integer(NODE *symbol, NODE *subs)
return NULL;
if ((subs->flags & NUMINT) != 0)
- return (NODE **) ! NULL;
+ return & success_node;
if ((subs->flags & NUMBER) != 0) {
d = subs->numbr;
if (d <= INT32_MAX && d >= INT32_MIN && d == (int32_t) d) {
subs->flags |= NUMINT;
- return (NODE **) ! NULL;
+ return & success_node;
}
return NULL;
}
@@ -126,7 +126,7 @@ is_integer(NODE *symbol, NODE *subs)
subs->flags |= NUMBER;
}
subs->flags |= (NUMCUR|NUMINT);
- return (NODE **) ! NULL;
+ return & success_node;
}
cpend = cp + len;
@@ -146,7 +146,7 @@ is_integer(NODE *symbol, NODE *subs)
subs->flags |= NUMCUR;
if (l <= INT32_MAX && l >= INT32_MIN) {
subs->flags |= NUMINT;
- return (NODE **) ! NULL;
+ return & success_node;
}
}
return NULL;
@@ -303,7 +303,7 @@ int_remove(NODE *symbol, NODE *subs)
}
symbol->table_size--;
assert(symbol->table_size > 0);
- return (NODE **) ! NULL;
+ return & success_node;
}
k = subs->numbr;
@@ -372,7 +372,7 @@ removed:
freenode(xn);
}
- return (NODE **) ! NULL; /* return success */
+ return & success_node; /* return success */
}
diff --git a/str_array.c b/str_array.c
index 33c9ddcc..2ffa5df9 100644
--- a/str_array.c
+++ b/str_array.c
@@ -115,7 +115,7 @@ str_array_init(NODE *symbol ATTRIBUTE_UNUSED, NODE *subs ATTRIBUTE_UNUSED)
} else
null_array(symbol);
- return (NODE **) ! NULL;
+ return & success_node;
}
@@ -292,7 +292,7 @@ str_remove(NODE *symbol, NODE *subs)
symbol->ainit(symbol, NULL); /* re-initialize symbol */
}
- return (NODE **) ! NULL; /* return success */
+ return & success_node; /* return success */
}
}