From dce685318154027d30f8dad8df796e1e12436765 Mon Sep 17 00:00:00 2001 From: "Andrew J. Schorr" Date: Fri, 27 Jul 2012 12:40:01 -0400 Subject: Fix last: must initialize errno to 0 before calling readdir. --- extension/ChangeLog | 5 +++++ extension/readdir.c | 4 ++++ 2 files changed, 9 insertions(+) diff --git a/extension/ChangeLog b/extension/ChangeLog index 2023a76e..a46e2cef 100644 --- a/extension/ChangeLog +++ b/extension/ChangeLog @@ -1,3 +1,8 @@ +2012-07-27 Andrew J. Schorr + + * readdir.c (dir_get_record): Need to set errno to 0 before calling + readdir, since readdir sets errno only on failure, not on EOF. + 2012-07-27 Andrew J. Schorr * readdir.c (dir_get_record): If readdir fails, set errcode. Otherwise, diff --git a/extension/readdir.c b/extension/readdir.c index f8580568..2818d601 100644 --- a/extension/readdir.c +++ b/extension/readdir.c @@ -139,6 +139,10 @@ dir_get_record(char **out, struct iobuf_public *iobuf, int *errcode) set_RT((awk_value_t *) & null_val); the_dir = (open_directory_t *) iobuf->opaque; dp = the_dir->dp; + /* + * Initialize errno, since readdir does not set it to zero on EOF. + */ + errno = 0; dirent = readdir(dp); if (dirent == NULL) { *errcode = errno; /* in case there was an error */ -- cgit v1.2.3