serial_write: change prototype to take a void-pointer buffer.
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.
This commit is contained in:
parent
51a5cd9059
commit
c628b528e0
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
16
gdb/serial.c
16
gdb/serial.c
|
@ -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
|
||||
|
|
|
@ -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 */
|
||||
|
|
Loading…
Reference in New Issue