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