diff options
author | Arnold D. Robbins <arnold@skeeve.com> | 2012-07-11 21:26:37 +0300 |
---|---|---|
committer | Arnold D. Robbins <arnold@skeeve.com> | 2012-07-11 21:26:37 +0300 |
commit | 6d1724214a95330b63a6a557f89fb9b40b4a521f (patch) | |
tree | 829b2da90fcfdd4193beaa187c3325a861706a3b /extension | |
parent | e33b672ff4ab1b7469355a79eaf4c4740f412e45 (diff) | |
download | egawk-6d1724214a95330b63a6a557f89fb9b40b4a521f.tar.gz egawk-6d1724214a95330b63a6a557f89fb9b40b4a521f.tar.bz2 egawk-6d1724214a95330b63a6a557f89fb9b40b4a521f.zip |
API clean up and require strings to be malloced.
Diffstat (limited to 'extension')
-rw-r--r-- | extension/ChangeLog | 11 | ||||
-rw-r--r-- | extension/filefuncs.c | 10 | ||||
-rw-r--r-- | extension/fork.c | 2 | ||||
-rw-r--r-- | extension/ordchr.c | 2 | ||||
-rw-r--r-- | extension/readfile.c | 4 | ||||
-rw-r--r-- | extension/rwarray.c | 4 | ||||
-rw-r--r-- | extension/testext.c | 28 |
7 files changed, 39 insertions, 22 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index 7e61fc54..be315619 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,14 @@ +2012-07-11 Arnold D. Robbins <arnold@skeeve.com> + + * filefuncs.c (array_set, do_stat): Use make_const_string. + * fork.c (array_set_numeric): Ditto. + * ordchr.c (do_chr): Ditto. + * readfile.c (do_readfile): Use make_null_string, make_malloced_string. + * rwarray.c (read_elem): Ditto. + * testext.c (valrep2str): Add case for AWK_SCALAR. + (test_array_elem): Duplicate strings coming from gawk before passing + them back in. + 2012-07-09 Arnold D. Robbins <arnold@skeeve.com> * filefuncs.c (do_readfile): Return "" and set ERRNO on error diff --git a/extension/filefuncs.c b/extension/filefuncs.c index 32a3cee6..74af8b1b 100644 --- a/extension/filefuncs.c +++ b/extension/filefuncs.c @@ -214,7 +214,7 @@ array_set(awk_array_t array, const char *sub, awk_value_t *value) awk_value_t index; set_array_element(array, - make_string(sub, strlen(sub), & index), + make_const_string(sub, strlen(sub), & index), value); } @@ -292,7 +292,7 @@ do_stat(int nargs, awk_value_t *result) } /* fill in the array */ - array_set(array, "name", make_string(name, file_param.str_value.len, &tmp)); + array_set(array, "name", make_const_string(name, file_param.str_value.len, &tmp)); array_set_numeric(array, "dev", sbuf.st_dev); array_set_numeric(array, "ino", sbuf.st_ino); array_set_numeric(array, "mode", sbuf.st_mode); @@ -317,7 +317,7 @@ do_stat(int nargs, awk_value_t *result) #endif /* HAVE_ST_BLKSIZE */ pmode = format_mode(sbuf.st_mode); - array_set(array, "pmode", make_string(pmode, strlen(pmode), & tmp)); + array_set(array, "pmode", make_const_string(pmode, strlen(pmode), & tmp)); /* for symbolic links, add a linkval field */ if (S_ISLNK(sbuf.st_mode)) { @@ -326,7 +326,7 @@ do_stat(int nargs, awk_value_t *result) if ((buf = read_symlink(name, sbuf.st_size, & linksize)) != NULL) - array_set(array, "linkval", make_string(buf, linksize, & tmp)); + array_set(array, "linkval", make_malloced_string(buf, linksize, & tmp)); else warning(ext_id, "stat: unable to read symbolic link `%s'", name); } @@ -340,7 +340,7 @@ do_stat(int nargs, awk_value_t *result) } } - array_set(array, "type", make_string(type, strlen(type), &tmp)); + array_set(array, "type", make_const_string(type, strlen(type), &tmp)); ret = 1; /* success */ diff --git a/extension/fork.c b/extension/fork.c index efad17eb..84232663 100644 --- a/extension/fork.c +++ b/extension/fork.c @@ -53,7 +53,7 @@ array_set_numeric(awk_array_t array, const char *sub, double num) awk_value_t index, value; set_array_element(array, - make_string(sub, strlen(sub), & index), + make_const_string(sub, strlen(sub), & index), make_number(num, & value)); } diff --git a/extension/ordchr.c b/extension/ordchr.c index 8d7eac8f..3ab0f872 100644 --- a/extension/ordchr.c +++ b/extension/ordchr.c @@ -103,7 +103,7 @@ do_chr(int nargs, awk_value_t *result) } /* Set the return value */ - return dup_string(str, 1, result); + return make_const_string(str, 1, result); } static awk_ext_func_t func_table[] = { diff --git a/extension/readfile.c b/extension/readfile.c index 56bdcbc3..1b6772fe 100644 --- a/extension/readfile.c +++ b/extension/readfile.c @@ -65,7 +65,7 @@ do_readfile(int nargs, awk_value_t *result) int fd; assert(result != NULL); - make_string("", 0, result); /* default return value */ + make_null_string(result); /* default return value */ if (do_lint && nargs > 1) lintwarn(ext_id, "readfile: called with too many arguments"); @@ -98,7 +98,7 @@ do_readfile(int nargs, awk_value_t *result) } close(fd); - make_string(text, sbuf.st_size, result); + make_malloced_string(text, sbuf.st_size, result); goto done; } else if (do_lint) lintwarn(ext_id, "readfile: called with no arguments"); diff --git a/extension/rwarray.c b/extension/rwarray.c index a63fa3d2..64c501dd 100644 --- a/extension/rwarray.c +++ b/extension/rwarray.c @@ -394,9 +394,9 @@ read_elem(int fd, awk_element_t *element) if (read(fd, buffer, index_len) != (ssize_t) index_len) { return 0; } - make_string(buffer, index_len, & element->index); + make_const_string(buffer, index_len, & element->index); } else { - make_string("", 0, & element->index); + make_null_string(& element->index); } if (! read_value(fd, & element->value)) diff --git a/extension/testext.c b/extension/testext.c index e54055cc..8dac1c2b 100644 --- a/extension/testext.c +++ b/extension/testext.c @@ -59,6 +59,9 @@ valrep2str(const awk_value_t *value) case AWK_ARRAY: strcpy(buf, "<array>"); break; + case AWK_SCALAR: + strcpy(buf, "<scalar>"); + break; case AWK_STRING: if (value->str_value.len < size) size = value->str_value.len; @@ -334,7 +337,7 @@ BEGIN { static awk_value_t * test_array_elem(int nargs, awk_value_t *result) { - awk_value_t array, index, value; + awk_value_t array, index, index2, value; make_number(0.0, result); /* default return until full success */ @@ -354,7 +357,8 @@ test_array_elem(int nargs, awk_value_t *result) printf("test_array_elem: get_argument 1 (index) failed\n"); goto out; } - if (! get_array_element(array.array_cookie, & index, AWK_UNDEFINED, & value)) { + (void) make_const_string(index.str_value.str, index.str_value.len, & index2); + if (! get_array_element(array.array_cookie, & index2, AWK_UNDEFINED, & value)) { printf("test_array_elem: get_array_element failed\n"); goto out; } @@ -365,28 +369,29 @@ test_array_elem(int nargs, awk_value_t *result) /* change the element - "3" */ (void) make_number(42.0, & value); - if (! set_array_element(array.array_cookie, & index, & value)) { + (void) make_const_string(index.str_value.str, index.str_value.len, & index2); + if (! set_array_element(array.array_cookie, & index2, & value)) { printf("test_array_elem: set_array_element failed\n"); goto out; } /* delete another element - "5" */ - (void) make_string("5", 1, & index); + (void) make_const_string("5", 1, & index); if (! del_array_element(array.array_cookie, & index)) { printf("test_array_elem: del_array_element failed\n"); goto out; } /* add a new element - "7" */ - (void) make_string("7", 1, & index); - (void) make_string("seven", 5, & value); + (void) make_const_string("7", 1, & index); + (void) make_const_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); + (void) make_const_string("subarray", 8, & index); fill_in_array(& value); if (! set_array_element(array.array_cookie, & index, & value)) { printf("test_array_elem: set_array_element (subarray) failed\n"); @@ -488,14 +493,14 @@ fill_in_array(awk_value_t *new_array) a_cookie = create_array(); - (void) make_string("hello", 5, & index); - (void) make_string("world", 5, & value); + (void) make_const_string("hello", 5, & index); + (void) make_const_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); + (void) make_const_string("answer", 6, & index); (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__); @@ -620,7 +625,8 @@ BEGIN { if (! sym_update("answer_num", make_number(42, & value))) printf("testext: sym_update(\"answer_num\") failed!\n"); - if (! sym_update("message_string", dup_string(message, strlen(message), & value))) + if (! sym_update("message_string", + make_const_string(message, strlen(message), & value))) printf("testext: sym_update(\"answer_num\") failed!\n"); create_new_array(); |