diff options
Diffstat (limited to 'libssh')
-rw-r--r-- | libssh/misc.c | 8 | ||||
-rw-r--r-- | libssh/poll.c | 9 | ||||
-rw-r--r-- | libssh/socket.c | 1 |
3 files changed, 16 insertions, 2 deletions
diff --git a/libssh/misc.c b/libssh/misc.c index 2b2158f..8cbc017 100644 --- a/libssh/misc.c +++ b/libssh/misc.c @@ -35,6 +35,7 @@ #ifdef _WIN32 #define _WIN32_IE 0x0501 //SHGetSpecialFolderPath #include <winsock2.h> // Must be the first to include +#include <ws2tcpip.h> #include <shlobj.h> #include <direct.h> #else @@ -531,7 +532,8 @@ int ssh_mkdir(const char *pathname, mode_t mode) { * @return The expanded directory, NULL on error. */ char *ssh_path_expand_tilde(const char *d) { - char *h, *r, *p; + char *h, *r; + const char *p; size_t ld; size_t lh = 0; @@ -543,6 +545,9 @@ char *ssh_path_expand_tilde(const char *d) { /* handle ~user/path */ p = strchr(d, '/'); if (p != NULL && p > d) { +#ifdef _WIN32 + return strdup(d); +#else struct passwd *pw; size_t s = p - d; char u[128]; @@ -558,6 +563,7 @@ char *ssh_path_expand_tilde(const char *d) { } ld = strlen(p); h = strdup(pw->pw_dir); +#endif } else { ld = strlen(d); p = (char *) d; diff --git a/libssh/poll.c b/libssh/poll.c index 327c9b2..fb88596 100644 --- a/libssh/poll.c +++ b/libssh/poll.c @@ -69,7 +69,6 @@ int ssh_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { #else /* HAVE_POLL */ -#include <sys/time.h> #include <sys/types.h> #ifdef _WIN32 @@ -77,11 +76,13 @@ int ssh_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { #define STRICT #endif +#include <time.h> #include <winsock2.h> #else #include <sys/select.h> #include <sys/socket.h> #include <unistd.h> +#include <sys/time.h> #endif static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { @@ -154,9 +155,15 @@ static int bsd_poll(ssh_pollfd_t *fds, nfds_t nfds, int timeout) { char data[64] = {0}; /* support for POLLHUP */ +#ifdef _WIN32 + if ((recv(fds[i].fd, data, 64, MSG_PEEK) == -1) && + (errno == WSAESHUTDOWN || errno == WSAECONNRESET || + errno == WSAECONNABORTED || errno == WSAENETRESET)) { +#else if ((recv(fds[i].fd, data, 64, MSG_PEEK) == -1) && (errno == ESHUTDOWN || errno == ECONNRESET || errno == ECONNABORTED || errno == ENETRESET)) { +#endif fds[i].revents |= POLLHUP; } else { fds[i].revents |= fds[i].events & (POLLIN | POLLRDNORM); diff --git a/libssh/socket.c b/libssh/socket.c index 76eaa3f..a8d7605 100644 --- a/libssh/socket.c +++ b/libssh/socket.c @@ -27,6 +27,7 @@ #include <stdio.h> #ifdef _WIN32 #include <winsock2.h> +#include <ws2tcpip.h> #else #include <fcntl.h> #include <sys/types.h> |