diff options
-rw-r--r-- | CMakeLists.txt | 3 | ||||
-rw-r--r-- | common/rdr/TLSErrno.h | 46 | ||||
-rw-r--r-- | common/rdr/TLSInStream.cxx | 9 | ||||
-rw-r--r-- | common/rdr/TLSOutStream.cxx | 7 | ||||
-rw-r--r-- | config.h.in | 3 |
5 files changed, 55 insertions, 13 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 252a42c8..9cf3dd32 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -356,7 +356,8 @@ if(ENABLE_GNUTLS) # system's version (if available) to perform this test. set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES};-lz) endif() - check_function_exists(gnutls_transport_set_global_errno HAVE_OLD_GNUTLS) + check_function_exists(gnutls_transport_set_errno HAVE_GNUTLS_SET_ERRNO) + check_function_exists(gnutls_transport_set_global_errno HAVE_GNUTLS_SET_GLOBAL_ERRNO) check_function_exists(gnutls_x509_crt_print HAVE_GNUTLS_X509_CRT_PRINT) check_type_size(gnutls_x509_crt_t GNUTLS_X509_CRT_T) check_type_size(gnutls_datum_t GNUTLS_DATUM_T) diff --git a/common/rdr/TLSErrno.h b/common/rdr/TLSErrno.h new file mode 100644 index 00000000..c2ff0236 --- /dev/null +++ b/common/rdr/TLSErrno.h @@ -0,0 +1,46 @@ +/* Copyright (C) 2012 Pierre Ossman for Cendio AB + * + * This is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this software; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, + * USA. + */ + +#ifndef __RDR_TLSERRNO_H__ +#define __RDR_TLSERRNO_H__ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#ifdef HAVE_GNUTLS + +#include <errno.h> + +namespace rdr { + + static inline void gnutls_errno_helper(gnutls_session session, int _errno) + { +#if defined(HAVE_GNUTLS_SET_ERRNO) + gnutls_transport_set_errno(session, _errno); +#elif defined(HAVE_GNUTLS_SET_GLOBAL_ERRNO) + gnutls_transport_set_global_errno(_errno); +#else + errno = _errno; +#endif + } +}; + +#endif + +#endif diff --git a/common/rdr/TLSInStream.cxx b/common/rdr/TLSInStream.cxx index e553085f..4d2c9ecb 100644 --- a/common/rdr/TLSInStream.cxx +++ b/common/rdr/TLSInStream.cxx @@ -25,12 +25,9 @@ #include <rdr/Exception.h> #include <rdr/TLSException.h> #include <rdr/TLSInStream.h> +#include <rdr/TLSErrno.h> #include <errno.h> -#ifdef HAVE_OLD_GNUTLS -#define gnutls_transport_set_global_errno(A) do { errno = (A); } while(0) -#endif - #ifdef HAVE_GNUTLS using namespace rdr; @@ -43,7 +40,7 @@ ssize_t TLSInStream::pull(gnutls_transport_ptr str, void* data, size_t size) try { if (!in->check(1, 1, false)) { - gnutls_transport_set_global_errno(EAGAIN); + gnutls_errno_helper(self->session, EAGAIN); return -1; } @@ -53,7 +50,7 @@ ssize_t TLSInStream::pull(gnutls_transport_ptr str, void* data, size_t size) in->readBytes(data, size); } catch (Exception& e) { - gnutls_transport_set_global_errno(EINVAL); + gnutls_errno_helper(self->session, EINVAL); return -1; } diff --git a/common/rdr/TLSOutStream.cxx b/common/rdr/TLSOutStream.cxx index ec21670c..ef32d7db 100644 --- a/common/rdr/TLSOutStream.cxx +++ b/common/rdr/TLSOutStream.cxx @@ -25,12 +25,9 @@ #include <rdr/Exception.h> #include <rdr/TLSException.h> #include <rdr/TLSOutStream.h> +#include <rdr/TLSErrno.h> #include <errno.h> -#ifdef HAVE_OLD_GNUTLS -#define gnutls_transport_set_global_errno(A) do { errno = (A); } while(0) -#endif - #ifdef HAVE_GNUTLS using namespace rdr; @@ -46,7 +43,7 @@ ssize_t TLSOutStream::push(gnutls_transport_ptr str, const void* data, out->writeBytes(data, size); out->flush(); } catch (Exception& e) { - gnutls_transport_set_global_errno(EINVAL); + gnutls_errno_helper(self->session, EINVAL); return -1; } diff --git a/config.h.in b/config.h.in index faeaffa8..a11ec10b 100644 --- a/config.h.in +++ b/config.h.in @@ -8,7 +8,8 @@ #cmakedefine HAVE_STRCASECMP #cmakedefine HAVE_STRNCASECMP #cmakedefine HAVE_VSNPRINTF -#cmakedefine HAVE_OLD_GNUTLS +#cmakedefine HAVE_GNUTLS_SET_GLOBAL_ERRNO +#cmakedefine HAVE_GNUTLS_SET_ERRNO #cmakedefine HAVE_GNUTLS_X509_CRT_PRINT #cmakedefine HAVE_GNUTLS_X509_CRT_T #cmakedefine HAVE_GNUTLS_DATUM_T |