On 11/22/2010 01:42 PM, Matthias Bolte wrote: >>> This doesn't entirely make any sense to me. GNUTLS also uses GNULIB, >>> including all its socket wrappers for send/recv. If the push/pull >>> function is NULL, gnulib does this >>> >>> if (session->internals._gnutls_push_func == NULL) >>> { >>> i = send (GNUTLS_POINTER_TO_INT (fd), &ptr[n - left], left, 0); >>> > > Okay, yes GnuTLS uses gnulib, but they explicitly don't use gnulib's > replacements for send() and recv() on Windows. See > lib/gnutls_buffers.c: > > /* We need to disable gnulib's replacement wrappers to get native > Windows interfaces. */ > #undef recv > #undef send > > GnuTLS decided to use the native Windows versions of send() and > recv(). This cannot be changed, as that would break existing > applications using GnuTLS on Windows relying on GnuTLS using the > native Windows versions of send() and recv(). Therefore, I think my > patch is necessary, as libvirt requires GnuTLS to use gnulib's > replacement functions. Makes sense to me. However, why the double cast? +#if HAVE_WINSOCK2_H +static ssize_t +custom_gnutls_push(void *s, const void *buf, size_t len) +{ + return send((int)(long)s, buf, len, 0); +} + +static ssize_t +custom_gnutls_pull(void *s, void *buf, size_t len) +{ + return recv((int)(long)s, buf, len, 0); +} +#endif Wouldn't send((size_t)s, ...) be better than send((int)(long)s,...)? -- Eric Blake eblake@xxxxxxxxxx +1-801-349-2682 Libvirt virtualization library http://libvirt.org
Attachment:
signature.asc
Description: OpenPGP digital signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list