aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew J. Schorr <aschorr@telemetry-investments.com>2012-07-27 12:40:01 -0400
committerAndrew J. Schorr <aschorr@telemetry-investments.com>2012-07-27 12:40:01 -0400
commitdce685318154027d30f8dad8df796e1e12436765 (patch)
treeb59cf3eddbeda7ba6ed810ffaec60f599db10d2b
parent913a0f88f5cfff1f139bb05ffd4a0a9a516ebdde (diff)
downloadegawk-dce685318154027d30f8dad8df796e1e12436765.tar.gz
egawk-dce685318154027d30f8dad8df796e1e12436765.tar.bz2
egawk-dce685318154027d30f8dad8df796e1e12436765.zip
Fix last: must initialize errno to 0 before calling readdir.
-rw-r--r--extension/ChangeLog5
-rw-r--r--extension/readdir.c4
2 files changed, 9 insertions, 0 deletions
diff --git a/extension/ChangeLog b/extension/ChangeLog
index 2023a76e..a46e2cef 100644
--- a/extension/ChangeLog
+++ b/extension/ChangeLog
@@ -1,5 +1,10 @@
2012-07-27 Andrew J. Schorr <aschorr@telemetry-investments.com>
+ * 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 <aschorr@telemetry-investments.com>
+
* readdir.c (dir_get_record): If readdir fails, set errcode. Otherwise,
don't bother to set errcode.
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 */