On Tue, 28 Dec 2010, S.Gopi wrote:

I'm CC'ing this to the libssh2 list as well. First mail is found here: http://curl.haxx.se/mail/lib-2010-12/0400.html

[both lists only allow subscribers to post, so if you cross-post you should be aware]

In scp_recv function in ssh.c, libssh2_channel_read function is called which returns ERROR_EAGAIN which is stored in variable 'nread'. This variable nread is declared ssize_t (typedef __int64 for Windows 64 in config-win32.h). For reason which I don't know of, nread has an arbitrary current value of 4294967259 instead of expected -37 (ERROR_EAGAIN).

BTW, when I declared ssize_t as int (instead of __int64) in config_win32.h, then the problem goes away and the file gets downloaded successfully.

In the public libssh2.h header the ssize_t is typedef'ed to an int. Isn't that causing this problem?

I would expect that libssh2 needs something similar to this to start with:

diff --git a/include/libssh2.h b/include/libssh2.h
index e011d49..1347b74 100644
--- a/include/libssh2.h
+++ b/include/libssh2.h
@@ -122,7 +122,11 @@ typedef unsigned int uint32_t;
 typedef unsigned __int64 libssh2_uint64_t;
 typedef __int64 libssh2_int64_t;
 # ifndef _SSIZE_T_DEFINED
+#ifdef _WIN64
+typedef __int64 ssize_t;
+#else
 typedef int ssize_t;
+#endif
 # define _SSIZE_T_DEFINED
 #endif
 #else




--

 / daniel.haxx.se
_______________________________________________
libssh2-devel http://cool.haxx.se/cgi-bin/mailman/listinfo/libssh2-devel

Reply via email to