aboutsummaryrefslogtreecommitdiffstats
path: root/gawkapi.c
diff options
context:
space:
mode:
authorArnold D. Robbins <arnold@skeeve.com>2012-05-16 22:22:57 +0300
committerArnold D. Robbins <arnold@skeeve.com>2012-05-16 22:22:57 +0300
commit85458962f4ca247b4c263a5588150960ee6f3e42 (patch)
tree6ee0fd849c0b8f9a5797026d6a7f997ab5709a49 /gawkapi.c
parent60a3183d9a228569eee98b19c67600e103ae1eac (diff)
downloadegawk-85458962f4ca247b4c263a5588150960ee6f3e42.tar.gz
egawk-85458962f4ca247b4c263a5588150960ee6f3e42.tar.bz2
egawk-85458962f4ca247b4c263a5588150960ee6f3e42.zip
More work on extension API.
Diffstat (limited to 'gawkapi.c')
-rw-r--r--gawkapi.c21
1 files changed, 18 insertions, 3 deletions
diff --git a/gawkapi.c b/gawkapi.c
index 059d49e5..d4d6503a 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -115,7 +115,9 @@ api_unset_ERRNO(awk_ext_id_t id)
/* Add a function to the interpreter, returns true upon success */
static awk_bool_t
-api_add_ext_func(awk_ext_id_t id, const awk_ext_func_t *func)
+api_add_ext_func(awk_ext_id_t id,
+ const awk_ext_func_t *func,
+ const char *namespace)
{
return true; /* for now */
}
@@ -277,14 +279,27 @@ api_release_flattened_array(awk_ext_id_t id,
/* Constructor functions */
static awk_value_t *
api_make_string(awk_ext_id_t id,
- const char *string, size_t length)
+ const char *string,
+ size_t length,
+ awk_bool_t duplicate)
{
static awk_value_t result;
+ char *cp = NULL;
result.val_type = AWK_STRING;
- result.str_value.str = (char *) string;
result.str_value.len = length;
+ if (duplicate) {
+ emalloc(cp, char *, length + 1, "api_make_string");
+ memcpy(cp, string, length);
+ cp[length] = '\0';
+
+ result.str_value.str = cp;
+ } else {
+ result.str_value.str = (char *) string;
+ }
+
+
return & result;
}