diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | awk.h | 2 | ||||
-rw-r--r-- | extension/ChangeLog | 5 | ||||
-rw-r--r-- | extension/readdir.c | 2 | ||||
-rw-r--r-- | gawkapi.c | 3 | ||||
-rw-r--r-- | gawkapi.h | 2 | ||||
-rw-r--r-- | io.c | 14 |
7 files changed, 25 insertions, 10 deletions
@@ -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. @@ -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 @@ -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 */ } } @@ -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 @@ -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; } } |