gnutls_transport_set_errno(). Make sure we call the right errno function depending on which GnuTLS we're using. git-svn-id: svn://svn.code.sf.net/p/tigervnc/code/trunk@4922 3789f03b-4d11-0410-bbf8-ca57d06f2519tags/v1.2.90
@@ -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) |
@@ -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 |
@@ -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; | |||
} | |||
@@ -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; | |||
} | |||
@@ -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 |