This commit is contained in:
Paul Smith 2003-03-25 02:46:42 +00:00
parent 955899ef77
commit 276d0c7c64
2 changed files with 18 additions and 1 deletions

View file

@ -1,3 +1,11 @@
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> 2003-02-25 Paul D. Smith <psmith@gnu.org>
Port to OS/2 (__EMX__) by Andreas Buening <andreas.buening@nexgo.de>. Port to OS/2 (__EMX__) by Andreas Buening <andreas.buening@nexgo.de>.

11
make.h
View file

@ -581,4 +581,13 @@ extern int handling_fatal_signal;
#define EINTRLOOP(_v,_c) while (((_v)=_c)==-1 && errno==EINTR) #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)