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:
Pedro Alves 2013-04-19 15:26:17 +00:00
parent 51a5cd9059
commit c628b528e0
6 changed files with 43 additions and 25 deletions

View 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

View 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;

View 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);

View 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
}

View 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

View 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 */