aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-12-05 20:05:26 +0000
committeraliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162>2008-12-05 20:05:26 +0000
commitbf9298b90eee0b95cab11fc74790dcbddca4252e (patch)
tree5073e5a326855e8044de043bd882cc29759c4364
parenta38131b669253fe40eff41e17ab7d1df78adbcd8 (diff)
Make struct iovec universally available
Vectored IO APIs will require some sort of vector argument. It makes sense to use struct iovec and just define it globally for Windows. Signed-off-by: Anthony Liguori <aliguori@us.ibm.com> git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5889 c046a42c-6fe2-441c-8c8c-71466251a162
-rwxr-xr-xconfigure14
-rw-r--r--hw/virtio.h9
-rw-r--r--qemu-common.h10
-rw-r--r--slirp/socket.c1
-rw-r--r--slirp/socket.h8
5 files changed, 24 insertions, 18 deletions
diff --git a/configure b/configure
index 7f82786606..938a53f1de 100755
--- a/configure
+++ b/configure
@@ -1017,6 +1017,17 @@ EOF
fi
fi
+##########################################
+# iovec probe
+cat > $TMPC <<EOF
+#include <sys/uio.h>
+int main(void) { struct iovec iov; return 0; }
+EOF
+iovec=no
+if $cc $ARCH_CFLAGS -o $TMPE $TMPC 2> /dev/null ; then
+ iovec=yes
+fi
+
# Check if tools are available to build documentation.
if [ -x "`which texi2html 2>/dev/null`" ] && \
[ -x "`which pod2man 2>/dev/null`" ]; then
@@ -1376,6 +1387,9 @@ fi
if test "$blobs" = "yes" ; then
echo "INSTALL_BLOBS=yes" >> $config_mak
fi
+if test "$iovec" = "yes" ; then
+ echo "#define HAVE_IOVEC 1" >> $config_h
+fi
# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
diff --git a/hw/virtio.h b/hw/virtio.h
index 0aa3b09c4f..83511e2cb0 100644
--- a/hw/virtio.h
+++ b/hw/virtio.h
@@ -17,15 +17,6 @@
#include "hw.h"
#include "pci.h"
-#ifdef _WIN32
-struct iovec {
- void *iov_base;
- size_t iov_len;
-};
-#else
-#include <sys/uio.h>
-#endif
-
/* from Linux's linux/virtio_config.h */
/* Status byte for guest to report progress, and synchronize features. */
diff --git a/qemu-common.h b/qemu-common.h
index 308847a21d..e1546c671b 100644
--- a/qemu-common.h
+++ b/qemu-common.h
@@ -16,6 +16,7 @@
#include <unistd.h>
#include <fcntl.h>
#include <sys/stat.h>
+#include "config-host.h"
#ifndef O_LARGEFILE
#define O_LARGEFILE 0
@@ -28,6 +29,14 @@
#define ENOMEDIUM ENODEV
#endif
+#ifndef HAVE_IOVEC
+#define HAVE_IOVEC
+struct iovec {
+ void *iov_base;
+ size_t iov_len;
+};
+#endif
+
#ifdef _WIN32
#define WIN32_LEAN_AND_MEAN
#define WINVER 0x0501 /* needed for ipv6 bits */
@@ -54,7 +63,6 @@ static inline char *realpath(const char *path, char *resolved_path)
/* FIXME: Remove NEED_CPU_H. */
#ifndef NEED_CPU_H
-#include "config-host.h"
#include <setjmp.h>
#include "osdep.h"
#include "bswap.h"
diff --git a/slirp/socket.c b/slirp/socket.c
index 7bc0dc5f32..75f98fd40b 100644
--- a/slirp/socket.c
+++ b/slirp/socket.c
@@ -11,6 +11,7 @@
#ifdef __sun__
#include <sys/filio.h>
#endif
+#include "qemu-common.h"
static void sofcantrcvmore(struct socket *so);
static void sofcantsendmore(struct socket *so);
diff --git a/slirp/socket.h b/slirp/socket.h
index 94fb8d8cf2..5edea90c93 100644
--- a/slirp/socket.h
+++ b/slirp/socket.h
@@ -73,14 +73,6 @@ struct socket {
extern struct socket tcb;
-
-#if defined(DECLARE_IOVEC) && !defined(HAVE_READV)
-struct iovec {
- char *iov_base;
- size_t iov_len;
-};
-#endif
-
struct socket * solookup _P((struct socket *, struct in_addr, u_int, struct in_addr, u_int));
struct socket * socreate _P((void));
void sofree _P((struct socket *));