aboutsummaryrefslogtreecommitdiffstats
path: root/extension
diff options
context:
space:
mode:
Diffstat (limited to 'extension')
-rw-r--r--extension/ChangeLog11
-rw-r--r--extension/filefuncs.c10
-rw-r--r--extension/fork.c2
-rw-r--r--extension/ordchr.c2
-rw-r--r--extension/readfile.c4
-rw-r--r--extension/rwarray.c4
-rw-r--r--extension/testext.c28
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();