From f16b7405fff7c3fc1da421b6bdf8552cc99c3156 Mon Sep 17 00:00:00 2001 From: Bruce Cran Date: Tue, 8 Oct 2013 15:05:27 +0100 Subject: [PATCH] Update Windows code to fix build breakage MinGW has been updated: this causes problems due to changes in header files, including COM stuff being pulled in resulting in 'interface' being a reserved keyword, and changes to a few POSIX definitions. Signed-off-by: Jens Axboe --- engines/net.c | 18 +++++++++--------- os/os-windows.h | 9 ++++----- os/windows/posix.c | 9 +++++++++ os/windows/posix/include/arpa/inet.h | 13 +++++++++++++ 4 files changed, 35 insertions(+), 14 deletions(-) diff --git a/engines/net.c b/engines/net.c index 0c90e1ca..52cc8a7f 100644 --- a/engines/net.c +++ b/engines/net.c @@ -38,7 +38,7 @@ struct netio_options { unsigned int pingpong; unsigned int nodelay; unsigned int ttl; - char * interface; + char *intfc; }; struct udp_close_msg { @@ -134,7 +134,7 @@ static struct fio_option options[] = { .name = "interface", .lname = "net engine interface", .type = FIO_OPT_STR_STORE, - .off1 = offsetof(struct netio_options, interface), + .off1 = offsetof(struct netio_options, intfc), .help = "Network interface to use", .category = FIO_OPT_C_ENGINE, .group = FIO_OPT_G_NETIO, @@ -557,20 +557,20 @@ static int fio_netio_connect(struct thread_data *td, struct fio_file *f) if (!fio_netio_is_multicast(td->o.filename)) return 0; - if (o->interface) { + if (o->intfc) { struct in_addr interface_addr; - if (inet_aton(o->interface, &interface_addr) == 0) { + if (inet_aton(o->intfc, &interface_addr) == 0) { log_err("fio: interface not valid interface IP\n"); close(f->fd); return 1; } - if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_IF, &interface_addr, sizeof(interface_addr)) < 0) { + if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_IF, (const char*)&interface_addr, sizeof(interface_addr)) < 0) { td_verror(td, errno, "setsockopt IP_MULTICAST_IF"); close(f->fd); return 1; } } - if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_TTL, &o->ttl, sizeof(o->ttl)) < 0) { + if (setsockopt(f->fd, IPPROTO_IP, IP_MULTICAST_TTL, (const char*)&o->ttl, sizeof(o->ttl)) < 0) { td_verror(td, errno, "setsockopt IP_MULTICAST_TTL"); close(f->fd); return 1; @@ -884,8 +884,8 @@ static int fio_netio_setup_listen_inet(struct thread_data *td, short port) inet_aton(td->o.filename, &sin.sin_addr); mr.imr_multiaddr = sin.sin_addr; - if (o->interface) { - if (inet_aton(o->interface, &mr.imr_interface) == 0) { + if (o->intfc) { + if (inet_aton(o->intfc, &mr.imr_interface) == 0) { log_err("fio: interface not valid interface IP\n"); close(fd); return 1; @@ -893,7 +893,7 @@ static int fio_netio_setup_listen_inet(struct thread_data *td, short port) } else { mr.imr_interface.s_addr = htonl(INADDR_ANY); } - if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) { + if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char*)&mr, sizeof(mr)) < 0) { td_verror(td, errno, "setsockopt IP_ADD_MEMBERSHIP"); close(fd); return 1; diff --git a/os/os-windows.h b/os/os-windows.h index 4f4e2bb3..de120b64 100644 --- a/os/os-windows.h +++ b/os/os-windows.h @@ -18,6 +18,10 @@ #include "windows/posix.h" +#ifndef PTHREAD_STACK_MIN +#define PTHREAD_STACK_MIN 65535 +#endif + #define FIO_HAVE_ODIRECT #define FIO_HAVE_CPU_AFFINITY #define FIO_HAVE_CHARDEV_SIZE @@ -38,9 +42,6 @@ typedef DWORD_PTR os_cpu_mask_t; -#define CLOCK_REALTIME 1 -#define CLOCK_MONOTONIC 2 - #define _SC_PAGESIZE 0x1 #define _SC_NPROCESSORS_ONLN 0x2 #define _SC_PHYS_PAGES 0x4 @@ -115,7 +116,6 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) HANDLE hFile; GET_LENGTH_INFORMATION info; DWORD outBytes; - LARGE_INTEGER size; if (f->hFile == NULL) { hFile = CreateFile(f->file_name, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, @@ -124,7 +124,6 @@ static inline int blockdev_size(struct fio_file *f, unsigned long long *bytes) hFile = f->hFile; } - size.QuadPart = 0; if (DeviceIoControl(hFile, IOCTL_DISK_GET_LENGTH_INFO, NULL, 0, &info, sizeof(info), &outBytes, NULL)) *bytes = info.Length.QuadPart; else diff --git a/os/windows/posix.c b/os/windows/posix.c index 49bce439..8153b455 100755 --- a/os/windows/posix.c +++ b/os/windows/posix.c @@ -12,6 +12,7 @@ #include #include #include +#include #include #include #include @@ -872,6 +873,14 @@ uid_t geteuid(void) return -1; } +in_addr_t inet_network(const char *cp) +{ + in_addr_t hbo; + in_addr_t nbo = inet_addr(cp); + hbo = ((nbo & 0xFF) << 24) + ((nbo & 0xFF00) << 8) + ((nbo & 0xFF0000) >> 8) + ((nbo & 0xFF000000) >> 24); + return hbo; +} + const char* inet_ntop(int af, const void *restrict src, char *restrict dst, socklen_t size) { diff --git a/os/windows/posix/include/arpa/inet.h b/os/windows/posix/include/arpa/inet.h index 7e3bfb7e..59c50ad1 100644 --- a/os/windows/posix/include/arpa/inet.h +++ b/os/windows/posix/include/arpa/inet.h @@ -5,6 +5,19 @@ #include typedef int socklen_t; +typedef int in_addr_t; + +#define IP_MULTICAST_IF 2 +#define IP_MULTICAST_TTL 3 +#define IP_ADD_MEMBERSHIP 5 + +struct ip_mreq +{ + struct in_addr imr_multiaddr; + struct in_addr imr_interface; +}; + +in_addr_t inet_network(const char *cp); const char *inet_ntop(int af, const void *restrict src, char *restrict dst, socklen_t size); -- 2.25.1