aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--awk.h2
-rw-r--r--extension/ChangeLog5
-rw-r--r--extension/readdir.c2
-rw-r--r--gawkapi.c3
-rw-r--r--gawkapi.h2
-rw-r--r--io.c14
7 files changed, 25 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index 44de58f9..d91717e1 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2012-07-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * awk.h (set_RT): Change to take a NODE * parameter.
+ * io.c (set_RT): Change to take a NODE * parameter.
+ * gawkapi.h: Change open hook to input parser in comment.
+ * gawkapi.c (api_set_RT): Adjust call to set_RT.
+
2012-07-26 Arnold D. Robbins <arnold@skeeve.com>
* awk.h (set_RT_to_null, set_RT): Declare functions.
diff --git a/awk.h b/awk.h
index 3b7129fa..afc18e2e 100644
--- a/awk.h
+++ b/awk.h
@@ -1546,7 +1546,7 @@ extern void register_input_parser(awk_input_parser_t *input_parser);
extern void set_FNR(void);
extern void set_NR(void);
extern void set_RT_to_null(void);
-extern void set_RT(const char *str, size_t len);
+extern void set_RT(NODE *n);
extern struct redirect *redirect(NODE *redir_exp, int redirtype, int *errflg);
extern NODE *do_close(int nargs);
diff --git a/extension/ChangeLog b/extension/ChangeLog
index ae0df1a7..5e39135b 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,3 +1,8 @@
+2012-07-27 Arnold D. Robbins <arnold@skeeve.com>
+
+ * readdir.c (dir_take_control_of): Fix typo for case where
+ we don't have fopendir (e.g., Mac OS X 10.5).
+
2012-07-26 Arnold D. Robbins <arnold@skeeve.com>
* configure.ac: Extremely crude hack to get the value of
diff --git a/extension/readdir.c b/extension/readdir.c
index f2a16029..c2b6cbda 100644
--- a/extension/readdir.c
+++ b/extension/readdir.c
@@ -208,7 +208,7 @@ dir_take_control_of(IOBUF_PUBLIC *iobuf)
#ifdef HAVE_FDOPENDIR
dp = fdopendir(iobuf->fd);
#else
- dp = opendir(iob->name);
+ dp = opendir(iobuf->name);
if (dp != NULL)
iobuf->fd = dirfd(dp);
#endif
diff --git a/gawkapi.c b/gawkapi.c
index a2128fe3..39e85e5d 100644
--- a/gawkapi.c
+++ b/gawkapi.c
@@ -252,8 +252,7 @@ api_set_RT(awk_ext_id_t id, awk_value_t *value)
case AWK_SCALAR:
n = awk_value_to_node(value);
force_string(n);
- set_RT(n->stptr, n->stlen);
- freenode(n);
+ set_RT(n); /* set_RT takes ownership of n */
}
}
diff --git a/gawkapi.h b/gawkapi.h
index db650fb2..0204053a 100644
--- a/gawkapi.h
+++ b/gawkapi.h
@@ -80,7 +80,7 @@ extern "C" {
typedef struct iobuf_public {
const char *name; /* filename */
int fd; /* file descriptor */
- void *opaque; /* private data for open hooks */
+ void *opaque; /* private data for input parsers */
/*
* The get_record function is called to read the next record of data.
* It should return the length of the input record (or EOF), and
diff --git a/io.c b/io.c
index f4ea286a..2f3c5f85 100644
--- a/io.c
+++ b/io.c
@@ -332,7 +332,7 @@ after_beginfile(IOBUF **curfile)
}
/*
- * Open hooks could have been changed by BEGINFILE,
+ * Input parsers could have been changed by BEGINFILE,
* so delay check until now.
*/
@@ -2678,14 +2678,18 @@ set_RT_to_null()
}
}
-/* set_RT --- real function for use by extension API */
+/* set_RT --- real function **** for use by extension API **** */
void
-set_RT(const char *str, size_t len)
+set_RT(NODE *n)
{
- if (! do_traditional) {
+ if (do_traditional)
+ unref(n);
+ else if (RT_node->var_value == n)
+ assert(n == Nnull_string); /* do nothing */
+ else {
unref(RT_node->var_value);
- RT_node->var_value = make_str_node(str, len, ALREADY_MALLOCED);
+ RT_node->var_value = n;
}
}