diff --git a/example/scp_nonblock.c b/example/scp_nonblock.c index a1cc668e..ceb136c5 100644 --- a/example/scp_nonblock.c +++ b/example/scp_nonblock.c @@ -32,7 +32,7 @@ #ifdef HAVE_ARPA_INET_H #include #endif -#if !defined(_WIN32) || defined(__MINGW32__) +#ifndef _MSC_VER #include /* for timeval, gettimeofday() */ #endif @@ -44,14 +44,31 @@ static const char *username = "username"; static const char *password = "password"; static const char *scppath = "/tmp/TEST"; -#ifdef HAVE_GETTIMEOFDAY +#ifdef _MSC_VER +static int gettimeofday(struct timeval *tp, void *tzp) +{ + (void)tzp; + if(tp) { +/* Offset between 1601-01-01 and 1970-01-01 in 100 nanosec units */ +#define WIN32_FT_OFFSET 116444736000000000 + union { + libssh2_uint64_t ns100; /* time since 1 Jan 1601 in 100ns units */ + FILETIME ft; + } now; + GetSystemTimeAsFileTime(&now.ft); + tp->tv_usec = (long)((now.ns100 / 10) % 1000000); + tp->tv_sec = (long)((now.ns100 - WIN32_FT_OFFSET) / 10000000); + } + return 0; +} +#endif + /* diff in ms */ static long tvdiff(struct timeval newer, struct timeval older) { return (newer.tv_sec - older.tv_sec) * 1000 + (newer.tv_usec - older.tv_usec) / 1000; } -#endif static int waitsocket(libssh2_socket_t socket_fd, LIBSSH2_SESSION *session) { @@ -101,11 +118,9 @@ int main(int argc, char *argv[]) LIBSSH2_SESSION *session = NULL; LIBSSH2_CHANNEL *channel; libssh2_struct_stat fileinfo; -#ifdef HAVE_GETTIMEOFDAY struct timeval start; struct timeval end; long time_ms; -#endif int spin = 0; libssh2_struct_stat_size got = 0; libssh2_struct_stat_size total = 0; @@ -164,9 +179,7 @@ int main(int argc, char *argv[]) /* Since we have set non-blocking, tell libssh2 we are non-blocking */ libssh2_session_set_blocking(session, 0); -#ifdef HAVE_GETTIMEOFDAY gettimeofday(&start, NULL); -#endif /* ... start it up. This trades welcome banners, exchange keys, * and setup crypto, compression, and MAC layers @@ -282,16 +295,12 @@ int main(int argc, char *argv[]) break; } -#ifdef HAVE_GETTIMEOFDAY gettimeofday(&end, NULL); time_ms = tvdiff(end, start); fprintf(stderr, "Got %ld bytes in %ld ms = %.1f bytes/sec spin: %d\n", (long)total, time_ms, (double)total / ((double)time_ms / 1000.0), spin); -#else - fprintf(stderr, "Got %ld bytes spin: %d\n", (long)total, spin); -#endif libssh2_channel_free(channel); diff --git a/example/sftp_nonblock.c b/example/sftp_nonblock.c index 4026de7a..e903d127 100644 --- a/example/sftp_nonblock.c +++ b/example/sftp_nonblock.c @@ -33,7 +33,7 @@ #ifdef HAVE_ARPA_INET_H #include #endif -#if !defined(_WIN32) || defined(__MINGW32__) +#ifndef _MSC_VER #include /* for timeval, gettimeofday() */ #endif @@ -45,14 +45,31 @@ static const char *username = "username"; static const char *password = "password"; static const char *sftppath = "/tmp/TEST"; -#ifdef HAVE_GETTIMEOFDAY +#ifdef _MSC_VER +static int gettimeofday(struct timeval *tp, void *tzp) +{ + (void)tzp; + if(tp) { +/* Offset between 1601-01-01 and 1970-01-01 in 100 nanosec units */ +#define WIN32_FT_OFFSET 116444736000000000 + union { + libssh2_uint64_t ns100; /* time since 1 Jan 1601 in 100ns units */ + FILETIME ft; + } now; + GetSystemTimeAsFileTime(&now.ft); + tp->tv_usec = (long)((now.ns100 / 10) % 1000000); + tp->tv_sec = (long)((now.ns100 - WIN32_FT_OFFSET) / 10000000); + } + return 0; +} +#endif + /* diff in ms */ static long tvdiff(struct timeval newer, struct timeval older) { return (newer.tv_sec - older.tv_sec) * 1000 + (newer.tv_usec - older.tv_usec) / 1000; } -#endif static int waitsocket(libssh2_socket_t socket_fd, LIBSSH2_SESSION *session) { @@ -102,11 +119,9 @@ int main(int argc, char *argv[]) LIBSSH2_SESSION *session = NULL; LIBSSH2_SFTP *sftp_session; LIBSSH2_SFTP_HANDLE *sftp_handle; -#ifdef HAVE_GETTIMEOFDAY struct timeval start; struct timeval end; long time_ms; -#endif libssh2_struct_stat_size total = 0; int spin = 0; @@ -165,9 +180,7 @@ int main(int argc, char *argv[]) /* Since we have set non-blocking, tell libssh2 we are non-blocking */ libssh2_session_set_blocking(session, 0); -#ifdef HAVE_GETTIMEOFDAY gettimeofday(&start, NULL); -#endif /* ... start it up. This trades welcome banners, exchange keys, * and setup crypto, compression, and MAC layers @@ -277,15 +290,11 @@ int main(int argc, char *argv[]) break; } while(1); -#ifdef HAVE_GETTIMEOFDAY gettimeofday(&end, NULL); time_ms = tvdiff(end, start); fprintf(stderr, "Got %ld bytes in %ld ms = %.1f bytes/sec spin: %d\n", (long)total, time_ms, (double)total / ((double)time_ms / 1000.0), spin); -#else - fprintf(stderr, "Got %ld bytes spin: %d\n", (long)total, spin); -#endif libssh2_sftp_close(sftp_handle); libssh2_sftp_shutdown(sftp_session);