Fix win32 so it works again

This commit is contained in:
Ronnie Sahlberg
2013-10-05 15:34:56 -07:00
parent 27b82512d5
commit d7b7c7727a
7 changed files with 50 additions and 10 deletions

View File

@@ -69,7 +69,11 @@ iscsi_log_message(struct iscsi_context *iscsi, int level, const char *format, ..
if (iscsi->target_name[0]) {
static char message2[1024];
#if defined(WIN32)
_snprintf_s(message2, 1024, 1024, "%s [%s]", message, iscsi->target_name);
#else
snprintf(message2, 1024, "%s [%s]", message, iscsi->target_name);
#endif
iscsi->log_fn(level, message2);
}
else

View File

@@ -73,7 +73,11 @@ void iscsi_dump_pdu_header(struct iscsi_context *iscsi, unsigned char *data) {
char dump[ISCSI_RAW_HEADER_SIZE*3+1]={0};
int i;
for (i=0;i<ISCSI_RAW_HEADER_SIZE;i++) {
snprintf(&dump[i*3], 4," %02x",data[i]);
#if defined(WIN32)
_snprintf_s(&dump[i * 3], 4, 4, " %02x", data[i]);
#else
snprintf(&dump[i * 3], 4, " %02x", data[i]);
#endif
}
ISCSI_LOG(iscsi, 0, "PDU header:%s",dump);
}

View File

@@ -39,6 +39,7 @@
#if defined(WIN32)
#include <winsock2.h>
#include "win32/win32_compat.h"
#else
#include <strings.h>
#endif

View File

@@ -41,6 +41,7 @@
#if defined(WIN32)
#include <winsock2.h>
#include <ws2tcpip.h>
#include "win32/win32_compat.h"
#define ioctl ioctlsocket
#define close closesocket
#else
@@ -56,6 +57,7 @@
#include <sys/filio.h>
#endif
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
@@ -140,7 +142,7 @@ int set_tcp_sockopt(int sockfd, int optname, int value)
level = SOL_TCP;
#endif
return setsockopt(sockfd, level, optname, &value, sizeof(value));
return setsockopt(sockfd, level, optname, (char *)&value, sizeof(value));
}
#ifndef TCP_USER_TIMEOUT
@@ -327,7 +329,11 @@ iscsi_connect_async(struct iscsi_context *iscsi, const char *portal,
}
if (connect(iscsi->fd, &sa.sa, socksize) != 0
#if defined(WIN32)
&& WSAGetLastError() != WSAEWOULDBLOCK) {
#else
&& errno != EINPROGRESS) {
#endif
iscsi_set_error(iscsi, "Connect failed with errno : "
"%s(%d)", strerror(errno), errno);
close(iscsi->fd);
@@ -700,7 +706,7 @@ iscsi_write_to_socket(struct iscsi_context *iscsi)
return 0;
}
static inline int
static int
iscsi_service_reconnect_if_loggedin(struct iscsi_context *iscsi)
{
if (iscsi->is_loggedin) {
@@ -719,7 +725,7 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
socklen_t err_size = sizeof(err);
if (getsockopt(iscsi->fd, SOL_SOCKET, SO_ERROR,
&err, &err_size) != 0 || err != 0) {
(char *)&err, &err_size) != 0 || err != 0) {
if (err == 0) {
err = errno;
}
@@ -751,8 +757,11 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
if (iscsi->is_connected == 0 && iscsi->fd != -1 && revents&POLLOUT) {
int err = 0;
socklen_t err_size = sizeof(err);
struct sockaddr_in local;
socklen_t local_l = sizeof(local);
if (getsockopt(iscsi->fd, SOL_SOCKET, SO_ERROR,
&err, &err_size) != 0 || err != 0) {
(char *)&err, &err_size) != 0 || err != 0) {
if (err == 0) {
err = errno;
}
@@ -768,8 +777,6 @@ iscsi_service(struct iscsi_context *iscsi, int revents)
return iscsi_service_reconnect_if_loggedin(iscsi);
}
struct sockaddr_in local;
socklen_t local_l = sizeof(local);
if (getsockname(iscsi->fd, (struct sockaddr *) &local, &local_l) == 0) {
ISCSI_LOG(iscsi, 2, "connection established (%s:%u -> %s)", inet_ntoa(local.sin_addr),
(unsigned)ntohs(local.sin_port),iscsi->connected_portal);
@@ -881,7 +888,7 @@ int iscsi_set_tcp_keepalive(struct iscsi_context *iscsi, int idle _U_, int count
{
#ifdef SO_KEEPALIVE
int value = 1;
if (setsockopt(iscsi->fd, SOL_SOCKET, SO_KEEPALIVE, &value, sizeof(value)) != 0) {
if (setsockopt(iscsi->fd, SOL_SOCKET, SO_KEEPALIVE, (char *)&value, sizeof(value)) != 0) {
iscsi_set_error(iscsi, "TCP: Failed to set socket option SO_KEEPALIVE. Error %s(%d)", strerror(errno), errno);
return -1;
}

View File

@@ -11,6 +11,7 @@ cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\crc3
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\discovery.c -Folib\discovery.obj
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\init.c -Folib\init.obj
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\login.c -Folib\login.obj
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\logging.c -Folib\logging.obj
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\md5.c -Folib\md5.obj
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\nop.c -Folib\nop.obj
cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd lib\pdu.c -Folib\pdu.obj
@@ -27,9 +28,9 @@ cl /I. /Iinclude -Zi -Od -c -D_U_="" -DWIN32 -D_WIN32_WINNT=0x0600 -MDd win32\wi
rem
rem create a linklibrary/dll
rem
lib /out:lib\libiscsi.lib /def:lib\libiscsi.def lib\connect.obj lib\crc32c.obj lib\discovery.obj lib\init.obj lib\login.obj lib\md5.obj lib\nop.obj lib\pdu.obj lib\iscsi-command.obj lib\scsi-lowlevel.obj lib\socket.obj lib\sync.obj lib\task_mgmt.obj lib\win32_compat.obj
lib /out:lib\libiscsi.lib /def:lib\libiscsi.def lib\connect.obj lib\crc32c.obj lib\discovery.obj lib\init.obj lib\login.obj lib\logging.obj lib\md5.obj lib\nop.obj lib\pdu.obj lib\iscsi-command.obj lib\scsi-lowlevel.obj lib\socket.obj lib\sync.obj lib\task_mgmt.obj lib\win32_compat.obj
link /DLL /out:lib\libiscsi.dll /DEBUG /DEBUGTYPE:cv lib\libiscsi.exp lib\connect.obj lib\crc32c.obj lib\discovery.obj lib\init.obj lib\login.obj lib\md5.obj lib\nop.obj lib\pdu.obj lib\iscsi-command.obj lib\scsi-lowlevel.obj lib\socket.obj lib\sync.obj lib\task_mgmt.obj lib\win32_compat.obj ws2_32.lib kernel32.lib
link /DLL /out:lib\libiscsi.dll /DEBUG /DEBUGTYPE:cv lib\libiscsi.exp lib\connect.obj lib\crc32c.obj lib\discovery.obj lib\init.obj lib\login.obj lib\logging.obj lib\md5.obj lib\nop.obj lib\pdu.obj lib\iscsi-command.obj lib\scsi-lowlevel.obj lib\socket.obj lib\sync.obj lib\task_mgmt.obj lib\win32_compat.obj ws2_32.lib kernel32.lib

View File

@@ -198,4 +198,14 @@ int win32_gettimeofday(struct timeval *tv, struct timezone *tz)
return 0;
}
ssize_t win32_readv(int fd, const struct iovec *iov, int iovcnt)
{
return read(fd, iov[0].iov_base, iov[0].iov_len);
}
ssize_t win32_writev(int fd, const struct iovec *iov, int iovcnt)
{
return write(fd, iov[0].iov_base, iov[0].iov_len);
}
#endif

View File

@@ -32,13 +32,19 @@ THE SOFTWARE.
#include <Ws2ipdef.h>
#include <basetsd.h>
#include <io.h>
#include <malloc.h>
#include <sys/stat.h>
#define SOL_TCP IPPROTO_TCP
typedef int ssize_t;
typedef int uid_t;
typedef int gid_t;
typedef int socklen_t;
/* Wrapper macros to call misc. functions win32 is missing */
#define writev win32_writev
#define readv win32_readv
#define poll(x, y, z) win32_poll(x, y, z)
#define inet_pton(x,y,z) win32_inet_pton(x,y,z)
#define sleep(x) Sleep(x * 1000)
@@ -46,5 +52,12 @@ int win32_inet_pton(int af, const char * src, void * dst);
int win32_poll(struct pollfd *fds, unsigned int nfsd, int timeout);
int win32_gettimeofday(struct timeval *tv, struct timezone *tz);
struct iovec {
void *iov_base;
size_t iov_len;
};
#define inline
#endif//win32_COMPAT_H_
#endif//WIN32