Fix win32 so it works again
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -39,6 +39,7 @@
|
||||
|
||||
#if defined(WIN32)
|
||||
#include <winsock2.h>
|
||||
#include "win32/win32_compat.h"
|
||||
#else
|
||||
#include <strings.h>
|
||||
#endif
|
||||
|
||||
21
lib/socket.c
21
lib/socket.c
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user