From: Amit Shah Date: Tue, 4 May 2010 11:09:07 +0000 (+0530) Subject: iov: Move from hw/ to topdir X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=4c64d5b52ed5287bb31489bba39cf41628230bce;p=qemu.git iov: Move from hw/ to topdir The iov functions can be useful to other code as well. Signed-off-by: Amit Shah CC: Christoph Hellwig Signed-off-by: Anthony Liguori --- diff --git a/hw/iov.c b/hw/iov.c deleted file mode 100644 index 588cd04288..0000000000 --- a/hw/iov.c +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Helpers for getting linearized buffers from iov / filling buffers into iovs - * - * Copyright IBM, Corp. 2007, 2008 - * Copyright (C) 2010 Red Hat, Inc. - * - * Author(s): - * Anthony Liguori - * Amit Shah - * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. - */ - -#include "iov.h" - -size_t iov_from_buf(struct iovec *iov, unsigned int iovcnt, - const void *buf, size_t size) -{ - size_t offset; - unsigned int i; - - offset = 0; - for (i = 0; offset < size && i < iovcnt; i++) { - size_t len; - - len = MIN(iov[i].iov_len, size - offset); - - memcpy(iov[i].iov_base, buf + offset, len); - offset += len; - } - return offset; -} - -size_t iov_to_buf(const struct iovec *iov, const unsigned int iovcnt, - void *buf, size_t offset, size_t size) -{ - uint8_t *ptr; - size_t iov_off, buf_off; - unsigned int i; - - ptr = buf; - iov_off = 0; - buf_off = 0; - for (i = 0; i < iovcnt && size; i++) { - if (offset < (iov_off + iov[i].iov_len)) { - size_t len = MIN((iov_off + iov[i].iov_len) - offset , size); - - memcpy(ptr + buf_off, iov[i].iov_base + (offset - iov_off), len); - - buf_off += len; - offset += len; - size -= len; - } - iov_off += iov[i].iov_len; - } - return buf_off; -} - -size_t iov_size(const struct iovec *iov, const unsigned int iovcnt) -{ - size_t len; - unsigned int i; - - len = 0; - for (i = 0; i < iovcnt; i++) { - len += iov[i].iov_len; - } - return len; -} diff --git a/hw/iov.h b/hw/iov.h deleted file mode 100644 index 60a85470bd..0000000000 --- a/hw/iov.h +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Helpers for getting linearized buffers from iov / filling buffers into iovs - * - * Copyright (C) 2010 Red Hat, Inc. - * - * Author(s): - * Amit Shah - * - * This work is licensed under the terms of the GNU GPL, version 2. See - * the COPYING file in the top-level directory. - */ - -#include "qemu-common.h" - -size_t iov_from_buf(struct iovec *iov, unsigned int iovcnt, - const void *buf, size_t size); -size_t iov_to_buf(const struct iovec *iov, const unsigned int iovcnt, - void *buf, size_t offset, size_t size); -size_t iov_size(const struct iovec *iov, const unsigned int iovcnt); diff --git a/iov.c b/iov.c new file mode 100644 index 0000000000..588cd04288 --- /dev/null +++ b/iov.c @@ -0,0 +1,70 @@ +/* + * Helpers for getting linearized buffers from iov / filling buffers into iovs + * + * Copyright IBM, Corp. 2007, 2008 + * Copyright (C) 2010 Red Hat, Inc. + * + * Author(s): + * Anthony Liguori + * Amit Shah + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + */ + +#include "iov.h" + +size_t iov_from_buf(struct iovec *iov, unsigned int iovcnt, + const void *buf, size_t size) +{ + size_t offset; + unsigned int i; + + offset = 0; + for (i = 0; offset < size && i < iovcnt; i++) { + size_t len; + + len = MIN(iov[i].iov_len, size - offset); + + memcpy(iov[i].iov_base, buf + offset, len); + offset += len; + } + return offset; +} + +size_t iov_to_buf(const struct iovec *iov, const unsigned int iovcnt, + void *buf, size_t offset, size_t size) +{ + uint8_t *ptr; + size_t iov_off, buf_off; + unsigned int i; + + ptr = buf; + iov_off = 0; + buf_off = 0; + for (i = 0; i < iovcnt && size; i++) { + if (offset < (iov_off + iov[i].iov_len)) { + size_t len = MIN((iov_off + iov[i].iov_len) - offset , size); + + memcpy(ptr + buf_off, iov[i].iov_base + (offset - iov_off), len); + + buf_off += len; + offset += len; + size -= len; + } + iov_off += iov[i].iov_len; + } + return buf_off; +} + +size_t iov_size(const struct iovec *iov, const unsigned int iovcnt) +{ + size_t len; + unsigned int i; + + len = 0; + for (i = 0; i < iovcnt; i++) { + len += iov[i].iov_len; + } + return len; +} diff --git a/iov.h b/iov.h new file mode 100644 index 0000000000..60a85470bd --- /dev/null +++ b/iov.h @@ -0,0 +1,19 @@ +/* + * Helpers for getting linearized buffers from iov / filling buffers into iovs + * + * Copyright (C) 2010 Red Hat, Inc. + * + * Author(s): + * Amit Shah + * + * This work is licensed under the terms of the GNU GPL, version 2. See + * the COPYING file in the top-level directory. + */ + +#include "qemu-common.h" + +size_t iov_from_buf(struct iovec *iov, unsigned int iovcnt, + const void *buf, size_t size); +size_t iov_to_buf(const struct iovec *iov, const unsigned int iovcnt, + void *buf, size_t offset, size_t size); +size_t iov_size(const struct iovec *iov, const unsigned int iovcnt);