Move core_addr_lessthan and core_addr_greaterthan to arch-utils.
[deliverable/binutils-gdb.git] / gdb / ser-go32.c
index 0474000e61a5c5a184a15a77f4021bf7208b9403..93e43ca422ed526f46515a1e8c35f1c93fdfd926 100644 (file)
@@ -214,19 +214,19 @@ static struct dos_ttystate
 ports[4] =
 {
   {
-    COM1ADDR, 4
+    COM1ADDR, 4, 0, NULL, 0, 0, "", 0, 0, 0, 0, 0, 0, 0, 0
   }
   ,
   {
-    COM2ADDR, 3
+    COM2ADDR, 3, 0, NULL, 0, 0, "", 0, 0, 0, 0, 0, 0, 0, 0
   }
   ,
   {
-    COM3ADDR, 4
+    COM3ADDR, 4, 0, NULL, 0, 0, "", 0, 0, 0, 0, 0, 0, 0, 0
   }
   ,
   {
-    COM4ADDR, 3
+    COM4ADDR, 3, 0, NULL, 0, 0, "", 0, 0, 0, 0, 0, 0, 0, 0
   }
 };
 
@@ -488,6 +488,10 @@ dos_open (scb, name)
       return -1;
     }
 
+  /* FIXME: this is a Bad Idea (tm)!  One should *never* invent file
+     handles, since they might be already used by other files/devices.
+     The Right Way to do this is to create a real handle by dup()'ing
+     some existing one.  */
   fd = name[3] - '1';
   port = &ports[fd];
   if (port->refcnt++ > 0)
@@ -609,15 +613,13 @@ dos_close (scb)
 
 
 static int
-dos_noop (scb)
-     serial_t scb;
+dos_noop (serial_t scb ATTRIBUTE_UNUSED)
 {
   return 0;
 }
 
 static void
-dos_raw (scb)
-     serial_t scb;
+dos_raw (serial_t scb ATTRIBUTE_UNUSED)
 {
   /* Always in raw mode */
 }
@@ -650,6 +652,19 @@ dos_get_tty_state (scb)
   struct dos_ttystate *port = &ports[scb->fd];
   struct dos_ttystate *state;
 
+  /* Are they asking about a port we opened?  */
+  if (port->refcnt <= 0)
+    {
+      /* We've never heard about this port.  We should fail this call,
+        unless they are asking about one of the 3 standard handles,
+        in which case we pretend the handle was open by us if it is
+        connected to a terminal device.  This is beacuse Unix
+        terminals use the serial interface, so GDB expects the
+        standard handles to go through here.  */
+      if (scb->fd >= 3 || !isatty (scb->fd))
+       return NULL;
+    }
+
   state = (struct dos_ttystate *) xmalloc (sizeof *state);
   *state = *port;
   return (serial_ttystate) state;
@@ -668,10 +683,8 @@ dos_set_tty_state (scb, ttystate)
 }
 
 static int
-dos_noflush_set_tty_state (scb, new_ttystate, old_ttystate)
-     serial_t scb;
-     serial_ttystate new_ttystate;
-     serial_ttystate old_ttystate;
+dos_noflush_set_tty_state (serial_t scb, serial_ttystate new_ttystate,
+                          serial_ttystate old_ttystate ATTRIBUTE_UNUSED)
 {
   struct dos_ttystate *state;
 
@@ -694,9 +707,9 @@ dos_flush_input (scb)
 }
 
 static void
-dos_print_tty_state (serial_t scb,
-                    serial_ttystate ttystate,
-                    struct ui_file *stream)
+dos_print_tty_state (serial_t scb ATTRIBUTE_UNUSED,
+                    serial_ttystate ttystate ATTRIBUTE_UNUSED,
+                    struct ui_file *stream ATTRIBUTE_UNUSED)
 {
   /* Nothing to print */
   return;
@@ -866,22 +879,23 @@ static struct serial_ops dos_ops =
   dos_setbaudrate,
   dos_setstopbits,
   dos_noop,                    /* wait for output to drain */
+  (void (*)(serial_t, int))NULL        /* change into async mode */
 };
 
 
 static void
-dos_info (arg, from_tty)
-     char *arg;
-     int from_tty;
+dos_info (char *arg ATTRIBUTE_UNUSED, int from_tty ATTRIBUTE_UNUSED)
 {
   struct dos_ttystate *port;
+#ifdef DOS_STATS
   int i;
+#endif
 
   for (port = ports; port < &ports[4]; port++)
     {
       if (port->baudrate == 0)
        continue;
-      printf_filtered ("Port:\tCOM%d (%sactive)\n", port - ports + 1,
+      printf_filtered ("Port:\tCOM%ld (%sactive)\n", (long)(port - ports) + 1,
                       port->intrupt ? "" : "not ");
       printf_filtered ("Addr:\t0x%03x (irq %d)\n", port->base, port->irq);
       printf_filtered ("16550:\t%s\n", port->fifo ? "yes" : "no");
@@ -902,8 +916,6 @@ dos_info (arg, from_tty)
 void
 _initialize_ser_dos ()
 {
-  struct cmd_list_element *c;
-
   serial_add_interface (&dos_ops);
 
   /* Save original interrupt mask register. */
This page took 0.024759 seconds and 4 git commands to generate.