* exec.c (xfer_memory): Add attrib argument.
[deliverable/binutils-gdb.git] / gdb / ser-pipe.c
index efbc24185d1be0f91d5df2280915d077da681d63..9c915b0853a601ddaef29a753f0b22ea38a31cf0 100644 (file)
 #include "ser-unix.h"
 
 #include <sys/types.h>
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
+#include "gdb_wait.h"
 #include <sys/socket.h>
 #include <sys/time.h>
 #include <fcntl.h>
+#include <string.h>
 
 #include "signals.h"
 
@@ -49,7 +48,7 @@ struct pipe_state
 static int
 pipe_open (serial_t scb, const char *name)
 {
-#if !defined(O_NONBLOCK) || !defined(F_GETFL) || !defined(F_SETFL) || !HAVE_SOCKETPAIR
+#if !HAVE_SOCKETPAIR
   return -1;
 #else
   struct pipe_state *state;
@@ -65,7 +64,11 @@ pipe_open (serial_t scb, const char *name)
   if (socketpair (AF_UNIX, SOCK_STREAM, 0, pdes) < 0)
     return -1;
 
+#ifdef HAVE_VFORK
   pid = vfork ();
+#else
+  pid = fork ();
+#endif
   
   /* Error. */
   if (pid == -1)
@@ -106,17 +109,6 @@ pipe_open (serial_t scb, const char *name)
   scb->fd = pdes[0];
   scb->state = state;
 
-  /* Make it non-blocking */
-  {
-    int flags = fcntl (scb->fd, F_GETFL, 0);
-    if (fcntl (scb->fd, F_SETFL, flags | O_NONBLOCK) < 0)
-      {
-       perror ("ser-pipe");
-       pipe_close (scb);
-       return -1;
-      }
-  }
-
   /* If we don't do this, GDB simply exits when the remote side dies.  */
   signal (SIGPIPE, SIG_IGN);
   return 0;
@@ -132,7 +124,7 @@ pipe_close (serial_t scb)
       int pid = state->pid;
       close (scb->fd);
       scb->fd = -1;
-      free (state);
+      xfree (state);
       scb->state = NULL;
       kill (pid, SIGTERM);
       /* Might be useful to check that the child does die. */
@@ -153,7 +145,7 @@ _initialize_ser_pipe (void)
   ops->readchar = ser_unix_readchar;
   ops->write = ser_unix_write;
   ops->flush_output = ser_unix_nop_flush_output;
-  ops->flush_input = ser_unix_nop_flush_input;
+  ops->flush_input = ser_unix_flush_input;
   ops->send_break = ser_unix_nop_send_break;
   ops->go_raw = ser_unix_nop_raw;
   ops->get_tty_state = ser_unix_nop_get_tty_state;
This page took 0.024024 seconds and 4 git commands to generate.