diff options
Diffstat (limited to 'extension')
-rw-r--r-- | extension/ChangeLog | 11 | ||||
-rw-r--r-- | extension/readdir_test.c | 27 |
2 files changed, 27 insertions, 11 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog index bb99f9d8..7aeb8aaa 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,14 @@ +2017-03-21 Andrew J. Schorr <aschorr@telemetry-investments.com> + + * readdir_test.c (open_directory_t): Replace field_width array + with new awk_fieldwidth_info_t structure. Wrap it in a union so + we can allocate the proper size. + (dir_get_record): Update field_width type from + 'const awk_input_field_info_t **' to 'const awk_fieldwidth_info_t **'. + Update new fieldwidth parsing info appropriately. + (dir_take_control_of): Populate new fieldwidth parsing structure + with initial values. + 2017-03-09 Andrew J. Schorr <aschorr@telemetry-investments.com> * readdir_test.c (open_directory_t): Update field_width type from an diff --git a/extension/readdir_test.c b/extension/readdir_test.c index e023b67c..d21b4e97 100644 --- a/extension/readdir_test.c +++ b/extension/readdir_test.c @@ -85,8 +85,12 @@ int plugin_is_GPL_compatible; typedef struct open_directory { DIR *dp; char *buf; - awk_input_field_info_t field_width[4]; + union { + awk_fieldwidth_info_t fw; + char buf[awk_fieldwidth_info_size(3)]; + } u; } open_directory_t; +#define fw u.fw /* ftype --- return type of file as a single character string */ @@ -170,7 +174,7 @@ get_inode(struct dirent *entry, const char *dirname) static int dir_get_record(char **out, awk_input_buf_t *iobuf, int *errcode, char **rt_start, size_t *rt_len, - const awk_input_field_info_t **field_width) + const awk_fieldwidth_info_t **field_width) { DIR *dp; struct dirent *dirent; @@ -207,20 +211,20 @@ dir_get_record(char **out, awk_input_buf_t *iobuf, int *errcode, #else len = sprintf(the_dir->buf, "%llu", ino); #endif - the_dir->field_width[0].len = len; + the_dir->fw.fields[0].len = len; len += (flen = sprintf(the_dir->buf + len, "/%s", dirent->d_name)); - the_dir->field_width[1].len = flen-1; + the_dir->fw.fields[1].len = flen-1; ftstr = ftype(dirent, iobuf->name); len += (flen = sprintf(the_dir->buf + len, "/%s", ftstr)); - the_dir->field_width[2].len = flen-1; + the_dir->fw.fields[2].len = flen-1; *out = the_dir->buf; *rt_start = NULL; *rt_len = 0; /* set RT to "" */ if (field_width) - *field_width = the_dir->field_width; + *field_width = & the_dir->fw; return len; } @@ -284,11 +288,12 @@ dir_take_control_of(awk_input_buf_t *iobuf) emalloc(the_dir, open_directory_t *, sizeof(open_directory_t), "dir_take_control_of"); the_dir->dp = dp; - /* pre-populate the field_width array with constant values: */ - the_dir->field_width[0].skip = 0; /* no leading space */ - the_dir->field_width[1].skip = 1; /* single '/' separator */ - the_dir->field_width[2].skip = 1; /* single '/' separator */ - the_dir->field_width[3].skip = -1; /* terminate after 3 fields */ + /* pre-populate the field_width struct with constant values: */ + the_dir->fw.use_chars = awk_false; + the_dir->fw.nf = 3; + the_dir->fw.fields[0].skip = 0; /* no leading space */ + the_dir->fw.fields[1].skip = 1; /* single '/' separator */ + the_dir->fw.fields[2].skip = 1; /* single '/' separator */ size = sizeof(struct dirent) + 21 /* max digits in inode */ + 2 /* slashes */; emalloc(the_dir->buf, char *, size, "dir_take_control_of"); |