serial_write: change prototype to take a void-pointer buffer.
authorPedro Alves <palves@redhat.com>
Fri, 19 Apr 2013 15:26:17 +0000 (15:26 +0000)
committerPedro Alves <palves@redhat.com>
Fri, 19 Apr 2013 15:26:17 +0000 (15:26 +0000)
While remote.c works with "char *" buffers most of the time, other
remote targets have binary-ish-er protocols, and choose to use
"unsigned char" throughout, like e.g., remote-mips.c or
remote-m32r-sdi.c.  That results in -Wpointer-sign warnings in those
targets, unless we add casts in calls to serial_write.  Since
serial_write is only concerned about sending raw host bytes out, and
serial_ops->write_prim already works with "void *"/"size_t", a similar
interface to the "write" or "send" system calls, I find it natural to
change serial_write's prototype accordingly, avoiding the need for
casts.

Tested on x86_64 Fedora 17, and also by building x86_64-mingw32
and DJGPP/go32 -hosted gdbs.

gdb/
2013-04-19  Pedro Alves  <palves@redhat.com>

* ser-base.c (ser_base_write): Change prototype -- take 'void *'
buffer and size_t size.  Adjust.
* ser-base.h (ser_base_write): Adjust.
* ser-go32.c (cnts): Change type to size_t.
(dos_write): Change prototype -- take 'void *'
buffer and size_t size.  Adjust.
(dos_info): Print elements of 'cnts' as unsigned long.
* serial.c (serial_write): Likewise.
* serial.h (serial_write): Adjust.
(struct serial_ops) <write>: Change prototype -- take 'void *'
buffer and size_t size.  Adjust.

gdb/ChangeLog
gdb/ser-base.c
gdb/ser-base.h
gdb/ser-go32.c
gdb/serial.c
gdb/serial.h

index 4ca6617bf569e4b5d3bb9dc7d3e4a03c6c3d9401..49448b6c49b3d4aa874d63d97bb3353c5c238933 100644 (file)
@@ -1,3 +1,17 @@
+2013-04-19  Pedro Alves  <palves@redhat.com>
+
+       * ser-base.c (ser_base_write): Change prototype -- take 'void *'
+       buffer and size_t size.  Adjust.
+       * ser-base.h (ser_base_write): Adjust.
+       * ser-go32.c (cnts): Change type to size_t.
+       (dos_write): Change prototype -- take 'void *'
+       buffer and size_t size.  Adjust.
+       (dos_info): Print elements of 'cnts' as unsigned long.
+       * serial.c (serial_write): Likewise.
+       * serial.h (serial_write): Adjust.
+       (struct serial_ops) <write>: Change prototype -- take 'void *'
+       buffer and size_t size.  Adjust.
+
 2013-04-19  Pedro Alves  <palves@redhat.com>
 
        * c-lang.c (evaluate_subexp_c): Cast result of obstack_base to
index c602650b2ec29c087127bee63faa33fce4d319b5..52c57264931642dcf2ce6b84d84638b91ad310f8 100644 (file)
@@ -440,17 +440,18 @@ ser_base_readchar (struct serial *scb, int timeout)
 }
 
 int
-ser_base_write (struct serial *scb, const char *str, int len)
+ser_base_write (struct serial *scb, const void *buf, size_t count)
 {
+  const char *str = buf;
   int cc;
 
-  while (len > 0)
+  while (count > 0)
     {
-      cc = scb->ops->write_prim (scb, str, len); 
+      cc = scb->ops->write_prim (scb, str, count);
 
       if (cc < 0)
        return 1;
-      len -= cc;
+      count -= cc;
       str += cc;
     }
   return 0;
index 175bf2090484c5950c06282564a125da2d6f2636..e5fe9e111b95555622af643884304eb855f17392 100644 (file)
@@ -45,7 +45,7 @@ extern int ser_base_setbaudrate (struct serial *scb, int rate);
 extern int ser_base_setstopbits (struct serial *scb, int rate);
 extern int ser_base_drain_output (struct serial *scb);
 
-extern int ser_base_write (struct serial *scb, const char *str, int len);
+extern int ser_base_write (struct serial *scb, const void *buf, size_t count);
 
 extern void ser_base_async (struct serial *scb, int async_p);
 extern int ser_base_readchar (struct serial *scb, int timeout);
index 7d76720e0baacf13b6a35a2fd22402fee75ec95e..9b321df49ea0a8cbf337b5369eaa8e25a6083c5c 100644 (file)
@@ -148,7 +148,7 @@ typedef unsigned long u_long;
 #define NCNT           20
 
 static int intrcnt;
-static int cnts[NCNT];
+static size_t cnts[NCNT];
 static char *cntnames[NCNT] =
 {
   /* h/w interrupt counts.  */
@@ -230,7 +230,7 @@ static int dos_open (struct serial *scb, const char *name);
 static void dos_raw (struct serial *scb);
 static int dos_readchar (struct serial *scb, int timeout);
 static int dos_setbaudrate (struct serial *scb, int rate);
-static int dos_write (struct serial *scb, const char *str, int len);
+static int dos_write (struct serial *scb, const void *buf, size_t count);
 static void dos_close (struct serial *scb);
 static serial_ttystate dos_get_tty_state (struct serial *scb);
 static int dos_set_tty_state (struct serial *scb, serial_ttystate state);
@@ -787,26 +787,27 @@ dos_setstopbits (struct serial *scb, int num)
 }
 
 static int
-dos_write (struct serial *scb, const char *str, int len)
+dos_write (struct serial *scb, const void *buf, size_t count)
 {
   volatile struct dos_ttystate *port = &ports[scb->fd];
-  int fifosize = port->fifo ? 16 : 1;
+  size_t fifosize = port->fifo ? 16 : 1;
   long then;
-  int cnt;
+  size_t cnt;
+  const char *str = buf;
 
-  while (len > 0)
+  while (count > 0)
     {
       /* Send the data, fifosize bytes at a time.  */
-      cnt = fifosize > len ? len : fifosize;
+      cnt = fifosize > count ? count : fifosize;
       port->txbusy = 1;
       /* Francisco Pastor <fpastor.etra-id@etra.es> says OUTSB messes
         up the communications with UARTs with FIFOs.  */
 #ifdef UART_FIFO_WORKS
       outportsb (port->base + com_data, str, cnt);
       str += cnt;
-      len -= cnt;
+      count -= cnt;
 #else
-      for ( ; cnt > 0; cnt--, len--)
+      for ( ; cnt > 0; cnt--, count--)
        outportb (port->base + com_data, *str++);
 #endif
 #ifdef DOS_STATS
@@ -904,7 +905,7 @@ dos_info (char *arg, int from_tty)
   printf_filtered ("\nTotal interrupts: %d\n", intrcnt);
   for (i = 0; i < NCNT; i++)
     if (cnts[i])
-      printf_filtered ("%s:\t%d\n", cntnames[i], cnts[i]);
+      printf_filtered ("%s:\t%lu\n", cntnames[i], (unsigned long) cnts[i]);
 #endif
 }
 
index 3202b0f6baa7e4bc851f5c406da87ea865581a44..ee3f1ea4b13d43208d8b7d8613474d86a7bd94b1 100644 (file)
@@ -398,14 +398,15 @@ serial_readchar (struct serial *scb, int timeout)
 }
 
 int
-serial_write (struct serial *scb, const char *str, int len)
+serial_write (struct serial *scb, const void *buf, size_t count)
 {
   if (serial_logfp != NULL)
     {
-      int count;
+      const char *str = buf;
+      size_t c;
 
-      for (count = 0; count < len; count++)
-       serial_logchar (serial_logfp, 'w', str[count] & 0xff, 0);
+      for (c = 0; c < count; c++)
+       serial_logchar (serial_logfp, 'w', str[c] & 0xff, 0);
 
       /* Make sure that the log file is as up-to-date as possible,
          in case we are getting ready to dump core or something.  */
@@ -413,9 +414,10 @@ serial_write (struct serial *scb, const char *str, int len)
     }
   if (serial_debug_p (scb))
     {
-      int count;
+      const char *str = buf;
+      size_t c;
 
-      for (count = 0; count < len; count++)
+      for (c = 0; c < count; c++)
        {
          fprintf_unfiltered (gdb_stdlog, "[");
          serial_logchar (gdb_stdlog, 'w', str[count] & 0xff, 0);
@@ -424,7 +426,7 @@ serial_write (struct serial *scb, const char *str, int len)
       gdb_flush (gdb_stdlog);
     }
 
-  return (scb->ops->write (scb, str, len));
+  return (scb->ops->write (scb, buf, count));
 }
 
 void
index a91c8b812a43286d09d7fc9992dd17ede5b2ae23..7a97e282a0bc2d363254296dbf39e7ef6da8d530 100644 (file)
@@ -104,10 +104,10 @@ enum serial_rc {
 
 extern int serial_readchar (struct serial *scb, int timeout);
 
-/* Write LEN chars from STRING to the port SCB.  Returns 0 for
+/* Write COUNT bytes from BUF to the port SCB.  Returns 0 for
    success, non-zero for failure.  */
 
-extern int serial_write (struct serial *scb, const char *str, int len);
+extern int serial_write (struct serial *scb, const void *buf, size_t count);
 
 /* Write a printf style string onto the serial port.  */
 
@@ -256,7 +256,7 @@ struct serial_ops
     void (*close) (struct serial *);
     int (*fdopen) (struct serial *, int fd);
     int (*readchar) (struct serial *, int timeout);
-    int (*write) (struct serial *, const char *str, int len);
+    int (*write) (struct serial *, const void *buf, size_t count);
     /* Discard pending output */
     int (*flush_output) (struct serial *);
     /* Discard pending input */