diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | extension/ChangeLog | 10 | ||||
-rw-r--r-- | extension/filefuncs.c | 11 | ||||
-rw-r--r-- | extension/fork.c | 11 | ||||
-rw-r--r-- | extension/rwarray.c | 4 | ||||
-rw-r--r-- | extension/testext.c | 37 | ||||
-rw-r--r-- | gawkapi.c | 17 | ||||
-rw-r--r-- | gawkapi.h | 10 |
8 files changed, 57 insertions, 50 deletions
@@ -1,3 +1,10 @@ +2012-07-08 Arnold D. Robbins <arnold@skeeve.com> + + * gawkapi.h (set_array_element): Use index + value instead + of element structure. Matches get_array_element. + (set_array_element_by_elem): New macro to use an element. + * gawkapi.c (api_set_array_element): Make the necessary adjustments. + 2012-07-04 Arnold D. Robbins <arnold@skeeve.com> * awkgram.y (tokentab): Remove limit on number of arguments diff --git a/extension/ChangeLog b/extension/ChangeLog index a0cc713d..40224589 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,13 @@ +2012-07-08 Arnold D. Robbins <arnold@skeeve.com> + + * filefuncs.c (array_set): Adjust for change in set_array_element API. + * fork.c (array_set_numeric): Ditto. + * rwarray.c (read_array): Use set_array_element_by_elem. + (read_value): Add a cast to silence a compiler warning. + * testext.c (test_array_elem): Adjust for change in set_array_element + API. + (fill_in_array): Ditto. Change parameter name to new_array. + 2012-06-29 Arnold D. Robbins <arnold@skeeve.com> * ordchr.c (do_ord, do_chr): Improve argument checking and diff --git a/extension/filefuncs.c b/extension/filefuncs.c index d4e1b57c..32a3cee6 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -211,15 +211,12 @@ read_symlink(const char *fname, size_t bufsize, ssize_t *linksize) static void array_set(awk_array_t array, const char *sub, awk_value_t *value) { - awk_element_t element; - awk_value_t tmp; - - memset(& element, 0, sizeof(element)); + awk_value_t index; - element.index = *make_string(sub, strlen(sub), & tmp); - element.value = *value; + set_array_element(array, + make_string(sub, strlen(sub), & index), + value); - set_array_element(array, & element); } /* array_set_numeric --- set an array element with a number */ diff --git a/extension/fork.c b/extension/fork.c index 58089d55..efad17eb 100644 --- a/extension/fork.c +++ b/extension/fork.c @@ -50,15 +50,12 @@ int plugin_is_GPL_compatible; static void array_set_numeric(awk_array_t array, const char *sub, double num) { - awk_element_t element; - awk_value_t tmp; + awk_value_t index, value; - memset(& element, 0, sizeof(element)); + set_array_element(array, + make_string(sub, strlen(sub), & index), + make_number(num, & value)); - element.index = *make_string(sub, strlen(sub), & tmp); - make_number(num, &element.value); - - set_array_element(array, & element); } /* do_fork --- provide dynamically loaded fork() builtin for gawk */ diff --git a/extension/rwarray.c b/extension/rwarray.c index e4ddde3b..a63fa3d2 100644 --- a/extension/rwarray.c +++ b/extension/rwarray.c @@ -344,7 +344,7 @@ read_array(int fd, awk_array_t array) for (i = 0; i < count; i++) { if (read_elem(fd, & new_elem)) { /* add to array */ - if (! set_array_element(array, & new_elem)) { + if (! set_array_element_by_elem(array, & new_elem)) { printf("read_array: set_array_element failed\n"); return 0; } @@ -445,7 +445,7 @@ read_value(int fd, awk_value_t *value) value->str_value.str = malloc(len + 2); memset(value->str_value.str, '\0', len + 2); - if (read(fd, value->str_value.str, len) != len) { + if (read(fd, value->str_value.str, len) != (ssize_t) len) { free(value->str_value.str); return 0; } diff --git a/extension/testext.c b/extension/testext.c index e3975b27..e54055cc 100644 --- a/extension/testext.c +++ b/extension/testext.c @@ -335,9 +335,7 @@ static awk_value_t * test_array_elem(int nargs, awk_value_t *result) { awk_value_t array, index, value; - awk_element_t element; - memset(& element, 0, sizeof(element)); make_number(0.0, result); /* default return until full success */ assert(result != NULL); @@ -366,9 +364,8 @@ test_array_elem(int nargs, awk_value_t *result) valrep2str(& value)); /* change the element - "3" */ - element.index = index; - (void) make_number(42.0, & element.value); - if (! set_array_element(array.array_cookie, & element)) { + (void) make_number(42.0, & value); + if (! set_array_element(array.array_cookie, & index, & value)) { printf("test_array_elem: set_array_element failed\n"); goto out; } @@ -382,18 +379,16 @@ test_array_elem(int nargs, awk_value_t *result) /* add a new element - "7" */ (void) make_string("7", 1, & index); - element.index = index; - (void) make_string("seven", 5, & element.value); - if (! set_array_element(array.array_cookie, & element)) { + (void) make_string("seven", 5, & value); + if (! set_array_element(array.array_cookie, & index, & value)) { printf("test_array_elem: set_array_element failed\n"); goto out; } /* add a subarray */ (void) make_string("subarray", 8, & index); - element.index = index; - fill_in_array(& element.value); - if (! set_array_element(array.array_cookie, & element)) { + fill_in_array(& value); + if (! set_array_element(array.array_cookie, & index, & value)) { printf("test_array_elem: set_array_element (subarray) failed\n"); goto out; } @@ -486,33 +481,29 @@ out: /* fill_in_array --- fill in a new array */ static void -fill_in_array(awk_value_t *value) +fill_in_array(awk_value_t *new_array) { - awk_element_t element; awk_array_t a_cookie; - awk_value_t index; + awk_value_t index, value; a_cookie = create_array(); (void) make_string("hello", 5, & index); - element.index = index; - (void) make_string("world", 5, & element.value); - if (! set_array_element(a_cookie, & element)) { + (void) make_string("world", 5, & value); + if (! set_array_element(a_cookie, & index, & value)) { printf("fill_in_array:%d: set_array_element failed\n", __LINE__); return; } (void) make_string("answer", 6, & index); - element.index = index; - (void) make_number(42.0, & element.value); - if (! set_array_element(a_cookie, & element)) { + (void) make_number(42.0, & value); + if (! set_array_element(a_cookie, & index, & value)) { printf("fill_in_array:%d: set_array_element failed\n", __LINE__); return; } - value->val_type = AWK_ARRAY; - value->array_cookie = a_cookie; - + new_array->val_type = AWK_ARRAY; + new_array->array_cookie = a_cookie; } /* create_new_array --- create a named array */ @@ -524,7 +524,8 @@ api_get_array_element(awk_ext_id_t id, */ static awk_bool_t api_set_array_element(awk_ext_id_t id, awk_array_t a_cookie, - awk_element_t *element) + const awk_value_t *const index, + const awk_value_t *const value) { NODE *array = (NODE *)a_cookie; NODE *tmp; @@ -534,20 +535,20 @@ api_set_array_element(awk_ext_id_t id, awk_array_t a_cookie, /* don't check for index len zero, null str is ok as index */ if ( array == NULL || array->type != Node_var_array - || element == NULL - || element->index.str_value.str == NULL) + || index == NULL + || value == NULL + || index->str_value.str == NULL) return false; - tmp = make_string(element->index.str_value.str, - element->index.str_value.len); + tmp = make_string(index->str_value.str, index->str_value.len); aptr = assoc_lookup(array, tmp); unref(tmp); unref(*aptr); - elem = *aptr = awk_value_to_node(& element->value); + elem = *aptr = awk_value_to_node(value); if (elem->type == Node_var_array) { elem->parent_array = array; - elem->vname = estrdup(element->index.str_value.str, - element->index.str_value.len); + elem->vname = estrdup(index->str_value.str, + index->str_value.len); make_aname(elem); } @@ -316,7 +316,8 @@ typedef struct gawk_api { * element->index and element->value. */ awk_bool_t (*set_array_element)(awk_ext_id_t id, awk_array_t a_cookie, - awk_element_t *element); + const awk_value_t *const index, + const awk_value_t *const value); /* * Remove the element with the given index. @@ -391,8 +392,11 @@ typedef struct gawk_api { #define get_array_element(array, index, wanted, result) \ (api->get_array_element(ext_id, array, index, wanted, result)) -#define set_array_element(array, element) \ - (api->set_array_element(ext_id, array, element)) +#define set_array_element(array, index, value) \ + (api->set_array_element(ext_id, array, index, value)) + +#define set_array_element_by_elem(array, elem) \ + (set_array_element(array, & (elem)->index, & (elem)->value)) #define del_array_element(array, index) \ (api->del_array_element(ext_id, array, index)) |