static void win32_aio_process_completion(QEMUWin32AIOState *s,

    QEMUWin32AIOCB *waiocb, DWORD count)

{

    int ret;

    s->count--;



    if (waiocb->ov.Internal != 0) {

        ret = -EIO;

    } else {

        ret = 0;

        if (count < waiocb->nbytes) {

            /* Short reads mean EOF, pad with zeros. */

            if (waiocb->is_read) {

                qemu_iovec_memset(waiocb->qiov, count, 0,

                    waiocb->qiov->size - count);

            } else {

                ret = -EINVAL;

            }

       }

    }



    if (!waiocb->is_linear) {

        if (ret == 0 && waiocb->is_read) {

            QEMUIOVector *qiov = waiocb->qiov;

            char *p = waiocb->buf;

            int i;



            for (i = 0; i < qiov->niov; ++i) {

                memcpy(qiov->iov[i].iov_base, p, qiov->iov[i].iov_len);

                p += qiov->iov[i].iov_len;

            }

            qemu_vfree(waiocb->buf);

        }

    }





    waiocb->common.cb(waiocb->common.opaque, ret);

    qemu_aio_release(waiocb);

}

static void win32_aio_process_completion(QEMUWin32AIOState *s,

    QEMUWin32AIOCB *waiocb, DWORD count)

{

    int ret;

    s->count--;



    if (waiocb->ov.Internal != 0) {

        ret = -EIO;

    } else {

        ret = 0;

        if (count < waiocb->nbytes) {

            

            if (waiocb->is_read) {

                qemu_iovec_memset(waiocb->qiov, count, 0,

                    waiocb->qiov->size - count);

            } else {

                ret = -EINVAL;

            }

       }

    }



    if (!waiocb->is_linear) {

        if (ret == 0 && waiocb->is_read) {

            QEMUIOVector *qiov = waiocb->qiov;

            char *p = waiocb->buf;

            int i;



            for (i = 0; i < qiov->niov; ++i) {

                memcpy(qiov->iov[i].iov_base, p, qiov->iov[i].iov_len);

                p += qiov->iov[i].iov_len;

            }

            qemu_vfree(waiocb->buf);

        }

    }





    waiocb->common.cb(waiocb->common.opaque, ret);

    qemu_aio_release(waiocb);

}

            qemu_vfree(waiocb->buf);
static void FUNC_0(QEMUWin32AIOState *VAR_0,

    QEMUWin32AIOCB *VAR_1, DWORD VAR_2)

{

    int VAR_3;

    VAR_0->VAR_2--;



    if (VAR_1->ov.Internal != 0) {

        VAR_3 = -EIO;

    } else {

        VAR_3 = 0;

        if (VAR_2 < VAR_1->nbytes) {

            

            if (VAR_1->is_read) {

                qemu_iovec_memset(VAR_1->qiov, VAR_2, 0,

                    VAR_1->qiov->size - VAR_2);

            } else {

                VAR_3 = -EINVAL;

            }

       }

    }



    if (!VAR_1->is_linear) {

        if (VAR_3 == 0 && VAR_1->is_read) {

            QEMUIOVector *qiov = VAR_1->qiov;

            char *VAR_4 = VAR_1->buf;

            int VAR_5;



            for (VAR_5 = 0; VAR_5 < qiov->niov; ++VAR_5) {

                memcpy(qiov->iov[VAR_5].iov_base, VAR_4, qiov->iov[VAR_5].iov_len);

                VAR_4 += qiov->iov[VAR_5].iov_len;

            }

            qemu_vfree(VAR_1->buf);

        }

    }





    VAR_1->common.cb(VAR_1->common.opaque, VAR_3);

    qemu_aio_release(VAR_1);

}

static void FUNC_0(QEMUWin32AIOState *VAR_0,
QEMUWin32AIOCB *VAR_1, DWORD VAR_2)
{ int VAR_3; VAR_0->VAR_2--; if (VAR_1->ov.Internal != 0) { VAR_3 = -EIO; } else { VAR_3 = 0; if (VAR_2 < VAR_1->nbytes) { if (VAR_1->is_read) { qemu_iovec_memset(VAR_1->qiov, VAR_2, 0,
VAR_1->qiov->size - VAR_2); } else { VAR_3 = -EINVAL; } } } if (!VAR_1->is_linear) { if (VAR_3 == 0 && VAR_1->is_read) { QEMUIOVector *qiov = VAR_1->qiov; char *VAR_4 = VAR_1->buf; int VAR_5; for (VAR_5 = 0; VAR_5 < qiov->niov; ++VAR_5) { memcpy(qiov->iov[VAR_5].iov_base, VAR_4, qiov->iov[VAR_5].iov_len); VAR_4 += qiov->iov[VAR_5].iov_len; } qemu_vfree(VAR_1->buf); } } VAR_1->common.cb(VAR_1->common.opaque, VAR_3); qemu_aio_release(VAR_1); }