Revision 4ab4183d
b/hw/usb-serial.c | ||
---|---|---|
497 | 497 |
static void usb_serial_read(void *opaque, const uint8_t *buf, int size) |
498 | 498 |
{ |
499 | 499 |
USBSerialState *s = opaque; |
500 |
int first_size = RECV_BUF - s->recv_ptr; |
|
501 |
if (first_size > size) |
|
502 |
first_size = size; |
|
503 |
memcpy(s->recv_buf + s->recv_ptr + s->recv_used, buf, first_size); |
|
504 |
if (size > first_size) |
|
505 |
memcpy(s->recv_buf, buf + first_size, size - first_size); |
|
500 |
int first_size, start; |
|
501 |
|
|
502 |
/* room in the buffer? */ |
|
503 |
if (size > (RECV_BUF - s->recv_used)) |
|
504 |
size = RECV_BUF - s->recv_used; |
|
505 |
|
|
506 |
start = s->recv_ptr + s->recv_used; |
|
507 |
if (start < RECV_BUF) { |
|
508 |
/* copy data to end of buffer */ |
|
509 |
first_size = RECV_BUF - start; |
|
510 |
if (first_size > size) |
|
511 |
first_size = size; |
|
512 |
|
|
513 |
memcpy(s->recv_buf + start, buf, first_size); |
|
514 |
|
|
515 |
/* wrap around to front if needed */ |
|
516 |
if (size > first_size) |
|
517 |
memcpy(s->recv_buf, buf + first_size, size - first_size); |
|
518 |
} else { |
|
519 |
start -= RECV_BUF; |
|
520 |
memcpy(s->recv_buf + start, buf, size); |
|
521 |
} |
|
506 | 522 |
s->recv_used += size; |
507 | 523 |
} |
508 | 524 |
|
Also available in: Unified diff