ssize_t qsb_get_buffer(const QEMUSizedBuffer *qsb, off_t start,

                       size_t count, uint8_t *buffer)

{

    const struct iovec *iov;

    size_t to_copy, all_copy;

    ssize_t index;

    off_t s_off;

    off_t d_off = 0;

    char *s;



    if (start > qsb->used) {

        return 0;

    }



    all_copy = qsb->used - start;

    if (all_copy > count) {

        all_copy = count;

    } else {

        count = all_copy;

    }



    index = qsb_get_iovec(qsb, start, &s_off);

    if (index < 0) {

        return 0;

    }



    while (all_copy > 0) {

        iov = &qsb->iov[index];



        s = iov->iov_base;



        to_copy = iov->iov_len - s_off;

        if (to_copy > all_copy) {

            to_copy = all_copy;

        }

        memcpy(&buffer[d_off], &s[s_off], to_copy);



        d_off += to_copy;

        all_copy -= to_copy;



        s_off = 0;

        index++;

    }



    return count;

}

ssize_t qsb_get_buffer(const QEMUSizedBuffer *qsb, off_t start,

                       size_t count, uint8_t *buffer)

{

    const struct iovec *iov;

    size_t to_copy, all_copy;

    ssize_t index;

    off_t s_off;

    off_t d_off = 0;

    char *s;



    if (start > qsb->used) {

        return 0;

    }



    all_copy = qsb->used - start;

    if (all_copy > count) {

        all_copy = count;

    } else {

        count = all_copy;

    }



    index = qsb_get_iovec(qsb, start, &s_off);

    if (index < 0) {

        return 0;

    }



    while (all_copy > 0) {

        iov = &qsb->iov[index];



        s = iov->iov_base;



        to_copy = iov->iov_len - s_off;

        if (to_copy > all_copy) {

            to_copy = all_copy;

        }

        memcpy(&buffer[d_off], &s[s_off], to_copy);



        d_off += to_copy;

        all_copy -= to_copy;



        s_off = 0;

        index++;

    }



    return count;

}

ssize_t FUNC_0(const QEMUSizedBuffer *qsb, off_t start,

                       size_t count, uint8_t *buffer)

{

    const struct iovec *VAR_0;

    size_t to_copy, all_copy;

    ssize_t index;

    off_t s_off;

    off_t d_off = 0;

    char *VAR_1;



    if (start > qsb->used) {

        return 0;

    }



    all_copy = qsb->used - start;

    if (all_copy > count) {

        all_copy = count;

    } else {

        count = all_copy;

    }



    index = qsb_get_iovec(qsb, start, &s_off);

    if (index < 0) {

        return 0;

    }



    while (all_copy > 0) {

        VAR_0 = &qsb->VAR_0[index];



        VAR_1 = VAR_0->iov_base;



        to_copy = VAR_0->iov_len - s_off;

        if (to_copy > all_copy) {

            to_copy = all_copy;

        }

        memcpy(&buffer[d_off], &VAR_1[s_off], to_copy);



        d_off += to_copy;

        all_copy -= to_copy;



        s_off = 0;

        index++;

    }



    return count;

}

ssize_t FUNC_0(const QEMUSizedBuffer *qsb, off_t start,
size_t count, uint8_t *buffer)
{ const struct iovec *VAR_0; size_t to_copy, all_copy; ssize_t index; off_t s_off; off_t d_off = 0; char *VAR_1; if (start > qsb->used) { return 0; } all_copy = qsb->used - start; if (all_copy > count) { all_copy = count; } else { count = all_copy; } index = qsb_get_iovec(qsb, start, &s_off); if (index < 0) { return 0; } while (all_copy > 0) { VAR_0 = &qsb->VAR_0[index]; VAR_1 = VAR_0->iov_base; to_copy = VAR_0->iov_len - s_off; if (to_copy > all_copy) { to_copy = all_copy; } memcpy(&buffer[d_off], &VAR_1[s_off], to_copy); d_off += to_copy; all_copy -= to_copy; s_off = 0; index++; } return count; }