aboutsummaryrefslogtreecommitdiffstats
path: root/extension/rwarray.c
diff options
context:
space:
mode:
Diffstat (limited to 'extension/rwarray.c')
-rw-r--r--extension/rwarray.c16
1 files changed, 8 insertions, 8 deletions
diff --git a/extension/rwarray.c b/extension/rwarray.c
index 15e121af..037fd875 100644
--- a/extension/rwarray.c
+++ b/extension/rwarray.c
@@ -55,11 +55,11 @@
#define MAGIC "awkrulz\n"
#define MAJOR 3
-#define MINOR 0
+#define MINOR 1
static const gawk_api_t *api; /* for convenience macros to work */
static awk_ext_id_t *ext_id;
-static const char *ext_version = "rwarray extension: version 1.0";
+static const char *ext_version = "rwarray extension: version 1.1";
static awk_bool_t (*init_func)(void) = NULL;
int plugin_is_GPL_compatible;
@@ -84,7 +84,7 @@ static awk_bool_t read_value(FILE *fp, awk_value_t *value);
* For each element:
* Length of index val: 4 bytes - network order
* Index val as characters (N bytes)
- * Value type 4 bytes (0 = string, 1 = number, 2 = array)
+ * Value type 4 bytes (0 = string, 1 = number, 2 = array, 3 = regex)
* IF string:
* Length of value 4 bytes
* Value as characters (N bytes)
@@ -213,7 +213,7 @@ write_elem(FILE *fp, awk_element_t *element)
return write_value(fp, & element->value);
}
-/* write_value --- write a number or a string or a array */
+/* write_value --- write a number or a string or a regex or an array */
static awk_bool_t
write_value(FILE *fp, awk_value_t *val)
@@ -235,7 +235,7 @@ write_value(FILE *fp, awk_value_t *val)
if (fwrite(& val->num_value, 1, sizeof(val->num_value), fp) != sizeof(val->num_value))
return awk_false;
} else {
- code = 0;
+ code = (val->val_type == AWK_STRING ? 0 : 3);
if (fwrite(& code, 1, sizeof(code), fp) != sizeof(code))
return awk_false;
@@ -305,7 +305,7 @@ do_reada(int nargs, awk_value_t *result)
}
major = ntohl(major);
- if (major != MAJOR) {
+ if (major < MAJOR) {
errno = EBADF;
goto done1;
}
@@ -316,7 +316,7 @@ do_reada(int nargs, awk_value_t *result)
}
minor = ntohl(minor);
- if (minor != MINOR) {
+ if (minor < MINOR) {
errno = EBADF;
goto done1;
}
@@ -455,7 +455,7 @@ read_value(FILE *fp, awk_value_t *value)
return awk_false;
}
len = ntohl(len);
- value->val_type = AWK_STRING;
+ value->val_type = (code == 0 ? AWK_STRING : AWK_REGEX);
value->str_value.len = len;
value->str_value.str = gawk_malloc(len + 1);
memset(value->str_value.str, '\0', len + 1);