Index: gdb/ser-pipe.c |
diff --git a/gdb/ser-pipe.c b/gdb/ser-pipe.c |
index 4f20cad52738b2f4bc6b9daa5435c1dc52ca4b94..b4ab672664e5b8fd3afd7ab325732069565fecf4 100644 |
--- a/gdb/ser-pipe.c |
+++ b/gdb/ser-pipe.c |
@@ -1,5 +1,5 @@ |
/* Serial interface for a pipe to a separate program |
- Copyright (C) 1999-2001, 2007-2012 Free Software Foundation, Inc. |
+ Copyright (C) 1999-2013 Free Software Foundation, Inc. |
Contributed by Cygnus Solutions. |
@@ -29,7 +29,8 @@ |
#include <sys/socket.h> |
#include <sys/time.h> |
#include <fcntl.h> |
-#include "gdb_string.h" |
+#include <string.h> |
+#include "filestuff.h" |
#include <signal.h> |
@@ -63,9 +64,9 @@ pipe_open (struct serial *scb, const char *name) |
int err_pdes[2]; |
int pid; |
- if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0) |
+ if (gdb_socketpair_cloexec (AF_UNIX, SOCK_STREAM, 0, pdes) < 0) |
return -1; |
- if (socketpair (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0) |
+ if (gdb_socketpair_cloexec (AF_UNIX, SOCK_STREAM, 0, err_pdes) < 0) |
{ |
close (pdes[0]); |
close (pdes[1]); |
@@ -122,14 +123,8 @@ pipe_open (struct serial *scb, const char *name) |
dup2 (err_pdes[1], STDERR_FILENO); |
close (err_pdes[1]); |
} |
-#if 0 |
- /* close any stray FD's - FIXME - how? */ |
- /* POSIX.2 B.3.2.2 "popen() shall ensure that any streams |
- from previous popen() calls that remain open in the |
- parent process are closed in the new child process. */ |
- for (old = pidlist; old; old = old->next) |
- close (fileno (old->fp)); /* Don't allow a flush. */ |
-#endif |
+ |
+ close_most_fds (); |
execl ("/bin/sh", "sh", "-c", name, (char *) 0); |
_exit (127); |
} |
@@ -201,7 +196,7 @@ gdb_pipe (int pdes[2]) |
return -1; |
#else |
- if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0) |
+ if (gdb_socketpair_cloexec (AF_UNIX, SOCK_STREAM, 0, pdes) < 0) |
return -1; |
/* If we don't do this, GDB simply exits when the remote side |