aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--extension/ChangeLog5
-rw-r--r--extension/rwarray.c6
2 files changed, 9 insertions, 2 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 4bfd896b..c04e9c26 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2017-10-28 Arnold D. Robbins <arnold@skeeve.com>
+
+ * rwarray.c (do_writea): Fix description in comment.
+ (write_array): Free the flattened array if writing an element fails.
+
2017-10-19 Arnold D. Robbins <arnold@skeeve.com>
* 4.2.0: Release tar ball made.
diff --git a/extension/rwarray.c b/extension/rwarray.c
index 2e82ca76..997b6b2f 100644
--- a/extension/rwarray.c
+++ b/extension/rwarray.c
@@ -114,7 +114,7 @@ do_writea(int nargs, awk_value_t *result, struct awk_ext_func *unused)
if (nargs < 2)
goto out;
- /* directory is first arg, array to dump is second */
+ /* filename is first arg, array to dump is second */
if (! get_argument(0, AWK_STRING, & filename)) {
fprintf(stderr, _("do_writea: argument 0 is not a string\n"));
errno = EINVAL;
@@ -178,8 +178,10 @@ write_array(FILE *fp, awk_array_t array)
return awk_false;
for (i = 0; i < flat_array->count; i++) {
- if (! write_elem(fp, & flat_array->elements[i]))
+ if (! write_elem(fp, & flat_array->elements[i])) {
+ (void) release_flattened_array(array, flat_array);
return awk_false;
+ }
}
if (! release_flattened_array(array, flat_array)) {