From 651e947eb84b9201faa63ff6dc855a8c99ac8018 Mon Sep 17 00:00:00 2001 From: Eli Zaretskii Date: Sun, 1 Jan 2012 18:26:51 +0200 Subject: [PATCH] Allow Emacs on w32 to build against and work with GnuTLS 3.x. src/gnutls.c (init_gnutls_functions): Load gnutls_check_version. Load gnutls_transport_set_lowat only if GnuTLS version is below 2.11.1. (emacs_gnutls_handshake): Call gnutls_transport_set_lowat only for GnuTLS versions below 2.11.1. lisp/term/w32-win.el (dynamic-library-alist) : Load libgnutls-28.dll, from GnuTLS version 3.x, in preference to libgnutls-26.dll. --- lisp/ChangeLog | 6 ++++++ lisp/term/w32-win.el | 2 +- src/ChangeLog | 8 ++++++++ src/gnutls.c | 14 ++++++++++++-- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index c7696651c67..5c9274fdda5 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-01 Eli Zaretskii + + * term/w32-win.el (dynamic-library-alist) : Load + libgnutls-28.dll, from GnuTLS version 3.x, in preference to + libgnutls-26.dll. + 2011-12-31 Andreas Schwab * emacs-lisp/bytecomp.el (byte-compile-file): Fix indentation. diff --git a/lisp/term/w32-win.el b/lisp/term/w32-win.el index b7f2a69e77b..c7189d15241 100644 --- a/lisp/term/w32-win.el +++ b/lisp/term/w32-win.el @@ -210,7 +210,7 @@ See the documentation of `create-fontset-from-fontset-spec' for the format.") '(gdk-pixbuf "libgdk_pixbuf-2.0-0.dll") '(glib "libglib-2.0-0.dll") '(gobject "libgobject-2.0-0.dll") - '(gnutls "libgnutls-26.dll"))) + '(gnutls "libgnutls-28.dll" "libgnutls-26.dll"))) ;;; multi-tty support (defvar w32-initialized nil diff --git a/src/ChangeLog b/src/ChangeLog index 937b96107bc..829895d1b72 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,3 +1,11 @@ +2012-01-01 Eli Zaretskii + + * gnutls.c (init_gnutls_functions): Load gnutls_check_version. + Load gnutls_transport_set_lowat only if GnuTLS version is below + 2.11.1. + (emacs_gnutls_handshake): Call gnutls_transport_set_lowat only for + GnuTLS versions below 2.11.1. + 2011-12-31 Antoine Levitt * xdisp.c (syms_of_xdisp) : Add warning diff --git a/src/gnutls.c b/src/gnutls.c index 500f09432b1..bcec07b36e6 100644 --- a/src/gnutls.c +++ b/src/gnutls.c @@ -125,6 +125,7 @@ DEF_GNUTLS_FN (ssize_t, gnutls_record_send, (gnutls_session_t, const void *, size_t)); DEF_GNUTLS_FN (const char *, gnutls_strerror, (int)); DEF_GNUTLS_FN (void, gnutls_transport_set_errno, (gnutls_session_t, int)); +DEF_GNUTLS_FN (const char *, gnutls_check_version, (const char *)); DEF_GNUTLS_FN (void, gnutls_transport_set_lowat, (gnutls_session_t, int)); DEF_GNUTLS_FN (void, gnutls_transport_set_ptr2, (gnutls_session_t, gnutls_transport_ptr_t, @@ -184,7 +185,11 @@ init_gnutls_functions (Lisp_Object libraries) LOAD_GNUTLS_FN (library, gnutls_record_send); LOAD_GNUTLS_FN (library, gnutls_strerror); LOAD_GNUTLS_FN (library, gnutls_transport_set_errno); - LOAD_GNUTLS_FN (library, gnutls_transport_set_lowat); + LOAD_GNUTLS_FN (library, gnutls_check_version); + /* We don't need to call gnutls_transport_set_lowat in GnuTLS 2.11.1 + and later, and the function was removed entirely in 3.0.0. */ + if (!fn_gnutls_check_version ("2.11.1")) + LOAD_GNUTLS_FN (library, gnutls_transport_set_lowat); LOAD_GNUTLS_FN (library, gnutls_transport_set_ptr2); LOAD_GNUTLS_FN (library, gnutls_transport_set_pull_function); LOAD_GNUTLS_FN (library, gnutls_transport_set_push_function); @@ -282,7 +287,12 @@ emacs_gnutls_handshake (struct Lisp_Process *proc) (Note: this is probably not strictly necessary as the lowat value is only used when no custom pull/push functions are set.) */ - fn_gnutls_transport_set_lowat (state, 0); + /* According to GnuTLS NEWS file, lowat level has been set to + zero by default in version 2.11.1, and the function + gnutls_transport_set_lowat was removed from the library in + version 2.99.0. */ + if (!fn_gnutls_check_version ("2.11.1")) + fn_gnutls_transport_set_lowat (state, 0); #else /* This is how GnuTLS takes sockets: as file descriptors passed in. For an Emacs process socket, infd and outfd are the -- 2.39.2