WIN32: Make dup2 a NO-OP under win32.

There is something wrong with dup2 under win32 and I do not know win32
well enough to fix it, thus this workaround.

Signed-off-by: Ronnie Sahlberg <ronniesahlberg@gmail.com>
This commit is contained in:
Ronnie Sahlberg
2017-06-14 08:20:42 -07:00
parent 64ffae4062
commit 446a0f5d2f
2 changed files with 17 additions and 0 deletions

View File

@@ -208,4 +208,20 @@ ssize_t win32_writev(int fd, const struct iovec *iov, int iovcnt)
return send(fd, iov[0].iov_base, iov[0].iov_len, 0);
}
/* Something is broken with how I use dup2 for windows and I do not know
* win32 API well enought to figure out why, thus our dup2 for win32 will be
* a NO-OP.
* The only consequence of this is that the filedescriptor for libiscsi may
* now suddenly change under win32. As long as the application just calls
* iscsi_get_fd() before poll or its equivalent every time ot goes through
* its event loop, everything should work.
* IF the app tries to be clever/optimized and only calls iscsi_get_fd()
* one single time and re-uses that file descriptor number throughout
* any future iterations in the event loop, then things will break :-(
*/
int win32_dup2(int oldfd, int newfd)
{
return 0;
}
#endif

View File

@@ -65,6 +65,7 @@ typedef int socklen_t;
#define writev win32_writev
#define strncasecmp _strnicmp
#define strdup _strdup
#define dup2(x, y, z) win32_dup2(x, y)
#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)