summaryrefslogtreecommitdiff
blob: ef21eebf20949112c08b3b74ad2501a586a92306 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sune Foldager writes:
On Darwin (Mac OS X), bash incorrectly assumed that it has been called over a network connection
(such as ssh, rsh etc.), when stdin stems from the pipe() system call. This is because bash's heuristic
code for determining if it's been started over a net connection is incorrect on Darwin kernels.

http://bugs.gentoo.org/show_bug.cgi?id=79124

--- /lib/sh/netconn.c
+++ /lib/sh/netconn.c
@@ -53,7 +53,8 @@
   l = sizeof(sa);
   rv = getpeername(fd, &sa, &l);
   /* Solaris 2.5 getpeername() returns EINVAL if the fd is not a socket. */
-  return ((rv < 0 && (errno == ENOTSOCK || errno == EINVAL)) ? 0 : 1);
+  /* Darwin 7.7.0 getpeername() returns ENOTCONN if the fd was created with pipe(). */
+  return ((rv < 0 && (errno == ENOTSOCK || errno == ENOTCONN || errno == EINVAL)) ? 0 : 1);
 #else /* !HAVE_GETPEERNAME || SVR4_2 || __BEOS__ */
 #  if defined (SVR4) || defined (SVR4_2)
   /* Sockets on SVR4 and SVR4.2 are character special (streams) devices. */