diff --git a/files/file.c b/files/file.c
index b3ef8978fb4d8135b1d4dccaee3076011a4ab87d..e96e94ade9f83e99825502650a152ae8ac40738c 100644
--- a/files/file.c
+++ b/files/file.c
@@ -1455,8 +1455,14 @@ BOOL WINAPI ReadFile( HANDLE hFile, LPVOID buffer, DWORD bytesToRead,
 
         if(result<0)
         {
-            FILE_SetDosError();
-            return FALSE;
+            if( (errno!=EAGAIN) && (errno!=EINTR) &&
+                ((errno != EFAULT) || IsBadWritePtr( buffer, bytesToRead )) )
+            {
+                FILE_SetDosError();
+                return FALSE;
+            }
+            else
+                result = 0;
         }
         
         /* if we read enough to keep the app happy, then return now */