+2003-03-24 Paul D. Smith <psmith@gnu.org>
+
+ * remake.c (notice_finished_file):
+
+ * make.h (ENULLLOOP): Set errno = 0 before invoking the command;
+ some calls (like readdir()) return NULL in valid situations
+ without resetting errno. Fixes bug #2846.
+
2003-02-25 Paul D. Smith <psmith@gnu.org>
Port to OS/2 (__EMX__) by Andreas Buening <andreas.buening@nexgo.de>.
#define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR)
-#define ENULLLOOP(_v,_c) while (((_v)=_c)==0 && errno==EINTR)
+/* While system calls that return integers are pretty consistent about
+ returning -1 on failure and setting errno in that case, functions that
+ return pointers are not always so well behaved. Sometimes they return
+ NULL for expected behavior: one good example is readdir() which returns
+ NULL at the end of the directory--and _doesn't_ reset errno. So, we have
+ to do it ourselves here. */
+
+#define ENULLLOOP(_v,_c) do{ errno = 0; \
+ while (((_v)=_c)==0 && errno==EINTR); }while(0)
+