[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH] Fix compilation of nbd on Windows
From: |
Johannes Schindelin |
Subject: |
[Qemu-devel] [PATCH] Fix compilation of nbd on Windows |
Date: |
Fri, 4 Jul 2008 23:02:54 +0100 (BST) |
User-agent: |
Alpine 1.00 (DEB 882 2007-12-20) |
This still only supports the client side, and only the TCP version of
it, since Windows does not have Unix sockets.
Signed-off-by: Johannes Schindelin <address@hidden>
---
This is only compile-tested, since I can only work in an emulated
environment.
Oh, and feel free to reorder nbd.h so that it has only one
#ifndef..#endif.
If I find some time next week, I might try to actually compile
qemu-nbd and get it to run on Windows.
Makefile | 1 +
block-nbd.c | 11 ++++++++++-
nbd.c | 36 +++++++++++++++++++++++++++++++++++-
nbd.h | 6 ++++++
4 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/Makefile b/Makefile
index adb36c6..ef55952 100644
--- a/Makefile
+++ b/Makefile
@@ -70,6 +70,7 @@ endif
ifdef CONFIG_WIN32
OBJS+=tap-win32.o
+LIBS+= -lws2_32
endif
AUDIO_OBJS = audio.o noaudio.o wavaudio.o mixeng.o
diff --git a/block-nbd.c b/block-nbd.c
index f350050..a2adbde 100644
--- a/block-nbd.c
+++ b/block-nbd.c
@@ -31,11 +31,17 @@
#include <sys/types.h>
#include <unistd.h>
+#ifdef _WIN32
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+#else
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <pthread.h>
+#endif
typedef struct BDRVNBDState {
int sock;
@@ -61,11 +67,14 @@ static int nbd_open(BlockDriverState *bs, const char*
filename, int flags)
if (strstart(host, "unix:", &unixpath)) {
+#ifdef _WIN32
+ return -EINVAL;
+#else
if (unixpath[0] != '/')
return -EINVAL;
sock = unix_socket_outgoing(unixpath);
-
+#endif
} else {
uint16_t port;
char *p, *r;
diff --git a/nbd.c b/nbd.c
index e9308ee..d783cd0 100644
--- a/nbd.c
+++ b/nbd.c
@@ -21,15 +21,45 @@
#include <errno.h>
#include <string.h>
-#include <sys/ioctl.h>
#include <ctype.h>
#include <inttypes.h>
+#ifdef _WIN32
+#include <windows.h>
+#include <winsock2.h>
+#include <ws2tcpip.h>
+
+#define socket_error() WSAGetLastError()
+#undef EAGAIN
+#undef EINTR
+#undef EINVAL
+#define EAGAIN WSAEWOULDBLOCK
+#define EINTR WSAEINTR
+#define EINVAL WSAEINVAL
+
+static inline int inet_aton(const char *cp, struct in_addr *inp)
+{
+ unsigned long result = inet_addr(cp);
+ if (result == INADDR_NONE)
+ return 0;
+ inp->s_addr = result;
+ return 1;
+}
+
+static inline int mingw_setsockopt(int s, int level, int optname,
+ const void *optval, socklen_t optlen)
+{
+ return setsockopt(s, level, optname, (const char *)optval, optlen);
+}
+#define setsockopt mingw_setsockopt
+#else
+#include <sys/ioctl.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <netinet/in.h>
#include <netinet/tcp.h>
#include <arpa/inet.h>
#include <netdb.h>
+#endif
#if defined(QEMU_NBD)
extern int verbose;
@@ -188,6 +218,7 @@ error:
return -1;
}
+#ifndef _WIN32
int unix_socket_incoming(const char *path)
{
int s;
@@ -245,6 +276,7 @@ error:
errno = serrno;
return -1;
}
+#endif
/* Basic flow
@@ -334,6 +366,7 @@ int nbd_receive_negotiate(int csock, off_t *size, size_t
*blocksize)
return 0;
}
+#ifndef _WIN32
int nbd_init(int fd, int csock, off_t size, size_t blocksize)
{
TRACE("Setting block size to %lu", (unsigned long)blocksize);
@@ -407,6 +440,7 @@ int nbd_client(int fd, int csock)
errno = serrno;
return ret;
}
+#endif
int nbd_send_request(int csock, struct nbd_request *request)
{
diff --git a/nbd.h b/nbd.h
index 55ba1ba..387246d 100644
--- a/nbd.h
+++ b/nbd.h
@@ -47,17 +47,23 @@ enum {
size_t nbd_wr_sync(int fd, void *buffer, size_t size, bool do_read);
int tcp_socket_outgoing(const char *address, uint16_t port);
int tcp_socket_incoming(const char *address, uint16_t port);
+#ifndef _WIN32
int unix_socket_outgoing(const char *path);
int unix_socket_incoming(const char *path);
+#endif
int nbd_negotiate(BlockDriverState *bs, int csock, off_t size);
int nbd_receive_negotiate(int csock, off_t *size, size_t *blocksize);
+#ifndef _WIN32
int nbd_init(int fd, int csock, off_t size, size_t blocksize);
+#endif
int nbd_send_request(int csock, struct nbd_request *request);
int nbd_receive_reply(int csock, struct nbd_reply *reply);
int nbd_trip(BlockDriverState *bs, int csock, off_t size, uint64_t dev_offset,
off_t *offset, bool readonly, uint8_t *data, int data_size);
+#ifndef _WIN32
int nbd_client(int fd, int csock);
int nbd_disconnect(int fd);
+#endif
#endif
--
1.5.6.1.376.g6b0fd
- [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., Thiemo Seufer, 2008/07/03
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., chenqing, 2008/07/03
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., Thiemo Seufer, 2008/07/03
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., chenqing, 2008/07/03
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., Laurent Vivier, 2008/07/04
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., Thiemo Seufer, 2008/07/04
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., Johannes Schindelin, 2008/07/04
- [Qemu-devel] [PATCH] Fix compilation of nbd on Windows,
Johannes Schindelin <=
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Filip Navara, 2008/07/05
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Jamie Lokier, 2008/07/05
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Johannes Schindelin, 2008/07/05
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Jamie Lokier, 2008/07/06
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Johannes Schindelin, 2008/07/06
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Anthony Liguori, 2008/07/08
- Re: [Qemu-devel] [PATCH] Fix compilation of nbd on Windows, Johannes Schindelin, 2008/07/08
- [Qemu-devel] Re: [PATCH] Fix compilation of nbd on Windows, Sebastian Herbszt, 2008/07/18
- Re: [Qemu-devel] Re: [PATCH] Fix compilation of nbd on Windows, Johannes Schindelin, 2008/07/18
- Re: [Qemu-devel] [4838] Allow QEMU to connect directly to an NBD server, by Laurent Vivier., Laurent Vivier, 2008/07/04