[gnutls-dev] Gnutls4win: Problem with custom push/pull functions, errno and Visual Studio (Workaround included)

Tim Kosse tim.kosse at filezilla-project.org
Sat Nov 4 16:30:44 CET 2006


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

I encountered some problems while trying to use custom push/pull
functions in a program compiled with Visual Studio.

Just setting errno to EAGAIN and returning -1 caused gnutls to fail with
GNUTLS_E_PUSH_ERROR.

I found out that libgnutls-13.dll is linked against msvcrt.dll, whereas
visual studio programs use a different runtime library (msvcr71.dll for
example). These libraries bring along their own version of errno.

So the errno inside the program is different from the one used in GnuTLS.

A workaround is to load the correct errno from msvcrt.dll:

	HMODULE crtdll = LoadLibrary(_T("msvcrt.dll"));
	typedef int* (*t_errno)(void);
	t_errno pErrno = (t_errno)GetProcAddress(crtdll, "_errno");
	*pErrno() = EAGAIN;
	FreeLibrary(crtdll);

Would it be possible to add a function like for example void
gnutls_transport_set_errno(int), which does nothing else than setting
errno to the provided value?

Regards,
Tim Kosse
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (MingW32)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org

iD8DBQFFTLIk8N9+lcqiUkURAkWdAKDUwpSeZ+z/paTen8N0zq0sCohd8gCfZjcP
coCbXLJEiJL7urayR22GY8E=
=qL5q
-----END PGP SIGNATURE-----




More information about the Gnutls-devel mailing list