diff options
author | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2012-07-26 11:56:00 -0400 |
---|---|---|
committer | Andrew J. Schorr <aschorr@telemetry-investments.com> | 2012-07-26 11:56:00 -0400 |
commit | ca83de0ec92b56c712f7a7376b21a1a1337b3107 (patch) | |
tree | 1047916b5164a57d12ff50eaf26e5954803f0e29 /extension/readdir.c | |
parent | 1a69f3ec43ba9748ad63443f88b2e26b014c11d2 (diff) | |
download | egawk-ca83de0ec92b56c712f7a7376b21a1a1337b3107.tar.gz egawk-ca83de0ec92b56c712f7a7376b21a1a1337b3107.tar.bz2 egawk-ca83de0ec92b56c712f7a7376b21a1a1337b3107.zip |
Document the parser interface and remove some excessive readdir paranoia.
Diffstat (limited to 'extension/readdir.c')
-rw-r--r-- | extension/readdir.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/extension/readdir.c b/extension/readdir.c index a39e0c3a..c838ea72 100644 --- a/extension/readdir.c +++ b/extension/readdir.c @@ -106,8 +106,10 @@ dir_get_record(char **out, struct iobuf_public *iobuf, int *errcode) if (out == NULL || iobuf == NULL || iobuf->opaque == NULL) return EOF; - if (errcode != NULL) - *errcode = 0; + /* + * The caller sets *errcode to 0, so we should set it only if an + * error occurs. + */ /* FIXME: Need stuff for setting RT */ dp = (DIR *) iobuf->opaque; @@ -152,32 +154,23 @@ dir_can_take_file(IOBUF_PUBLIC *iobuf) return (fd >= 0 && fstat(fd, & sbuf) >= 0 && S_ISDIR(sbuf.st_mode)); } -/* dir_take_control_of --- set up input parser */ +/* dir_take_control_of --- set up input parser. We can assume that dir_can_take_file just returned true, and no state has changed since then. */ static int dir_take_control_of(IOBUF_PUBLIC *iobuf) { struct stat sbuf; - int fd; - DIR *dp = NULL; + DIR *dp; - if (iobuf == NULL) + dp = fdopendir(iobuf->fd); + if (dp == NULL) return 0; - fd = iobuf->fd; - if (dir_can_take_file(iobuf)) { - dp = fdopendir(fd); - if (dp == NULL) - return 0; - - iobuf->opaque = dp; - iobuf->get_record = dir_get_record; - iobuf->close_func = dir_close; - - return 1; - } + iobuf->opaque = dp; + iobuf->get_record = dir_get_record; + iobuf->close_func = dir_close; - return 0; + return 1; } static awk_input_parser_t readdir_parser = { |