summaryrefslogtreecommitdiff
blob: 44903c68afe10006050f17157855d9c073143177 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
https://bugs.gentoo.org/447810

fix from upstream to workaround broken BSD kernels

commit 208fdb509e072977ae7a621e916dfcd32c76047d
Author: Chet Ramey <chet@caleb.ins.cwru.edu>
Date:   Mon Mar 4 08:09:29 2013 -0500

    commit bash-20130201 snapshot

diff --git a/redir.c b/redir.c
index d7da2f3..aa3d16d 100644
--- a/redir.c
+++ b/redir.c
@@ -650,7 +650,7 @@ redir_open (filename, flags, mode, ri)
      int flags, mode;
      enum r_instruction ri;
 {
-  int fd, r;
+  int fd, r, e;
 
   r = find_string_in_alist (filename, _redir_special_filenames, 1);
   if (r >= 0)
@@ -666,7 +666,16 @@ redir_open (filename, flags, mode, ri)
     }
   else
     {
-      fd = open (filename, flags, mode);
+      do
+	{
+	  fd = open (filename, flags, mode);
+	  e = errno;
+	  if (fd < 0 && e == EINTR)
+	    QUIT;
+	  errno = e;
+	}
+      while (fd < 0 && errno == EINTR);
+
 #if defined (AFS)
       if ((fd < 0) && (errno == EACCES))
 	{