From 276d0c7c646eef13a40fcaccbda1a56bed1310c6 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Tue, 25 Mar 2003 02:46:42 +0000 Subject: Fix bug #2846. --- make.h | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'make.h') diff --git a/make.h b/make.h index 5d003de..f7c2ad7 100644 --- a/make.h +++ b/make.h @@ -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) + -- cgit v1.2.3