diff options
author | Paul Smith <psmith@gnu.org> | 2003-03-25 02:46:42 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2003-03-25 02:46:42 +0000 |
commit | 276d0c7c646eef13a40fcaccbda1a56bed1310c6 (patch) | |
tree | 10f32a4a6221cf5ba7196d2f19751849e03f80e5 | |
parent | 955899ef770fc289febe3f186e4533e09baa7076 (diff) | |
download | gunmake-276d0c7c646eef13a40fcaccbda1a56bed1310c6.tar.gz |
Fix bug #2846.
-rw-r--r-- | ChangeLog | 8 | ||||
-rw-r--r-- | make.h | 11 |
2 files changed, 18 insertions, 1 deletions
@@ -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> Port to OS/2 (__EMX__) by Andreas Buening <andreas.buening@nexgo.de>. @@ -581,4 +581,13 @@ extern int handling_fatal_signal; #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) + |