summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-06-22 18:51:29 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-06-22 18:51:29 +0900
commit05d85e296563842ab57eb201fb6d11a68cf8fa41 (patch)
tree660bba2e5d2e90b5be41eb55398673ad91411e87 /src
parente791eb9ca334e7746bc0735cebcda09e30fa65df (diff)
Remove auto_delete in favor of std::unique_ptr
Diffstat (limited to 'src')
-rw-r--r--src/AppleTLSSession.cc2
-rw-r--r--src/LibgnutlsTLSSession.cc4
-rw-r--r--src/LibsslTLSSession.cc7
-rw-r--r--src/NameResolver.cc3
-rw-r--r--src/SocketCore.cc21
-rw-r--r--src/a2functional.h27
-rw-r--r--src/a2netcompat.h20
7 files changed, 24 insertions, 60 deletions
diff --git a/src/AppleTLSSession.cc b/src/AppleTLSSession.cc
index 1e56cd30..8a5a9b82 100644
--- a/src/AppleTLSSession.cc
+++ b/src/AppleTLSSession.cc
@@ -349,7 +349,7 @@ AppleTLSSession::AppleTLSSession(AppleTLSContext* ctx)
state_ = st_error;
return;
}
- auto_delete<const void*> del_certs(certs, CFRelease);
+ std::unique_ptr<void, decltype(&CFRelease)> del_certs(certs, CFRelease);
lastError_ = SSLSetCertificate(sslCtx_, certs);
if (lastError_ != noErr) {
A2_LOG_ERROR(fmt("AppleTLS: Failed to set credentials: %s", getLastErrorString().c_str()));
diff --git a/src/LibgnutlsTLSSession.cc b/src/LibgnutlsTLSSession.cc
index c855750d..e8eeda8f 100644
--- a/src/LibgnutlsTLSSession.cc
+++ b/src/LibgnutlsTLSSession.cc
@@ -209,7 +209,9 @@ int GnuTLSSession::tlsConnect(const std::string& hostname,
if(rv_ != GNUTLS_E_SUCCESS) {
return TLS_ERR_ERROR;
}
- auto_delete<gnutls_x509_crt_t> certDeleter(cert, gnutls_x509_crt_deinit);
+ std::unique_ptr<std::remove_pointer<gnutls_x509_crt_t>::type,
+ decltype(&gnutls_x509_crt_deinit)> certDeleter
+ (cert, gnutls_x509_crt_deinit);
rv_ = gnutls_x509_crt_import(cert, &peerCerts[0], GNUTLS_X509_FMT_DER);
if(rv_ != GNUTLS_E_SUCCESS) {
return TLS_ERR_ERROR;
diff --git a/src/LibsslTLSSession.cc b/src/LibsslTLSSession.cc
index 65b66b43..492c87c1 100644
--- a/src/LibsslTLSSession.cc
+++ b/src/LibsslTLSSession.cc
@@ -193,7 +193,8 @@ int OpenSSLTLSSession::tlsConnect(const std::string& hostname,
handshakeErr = "certificate not found";
return TLS_ERR_ERROR;
}
- auto_delete<X509*> certDeleter(peerCert, X509_free);
+ std::unique_ptr<X509, decltype(&X509_free)> certDeleter
+ (peerCert, X509_free);
long verifyResult = SSL_get_verify_result(ssl_);
if(verifyResult != X509_V_OK) {
handshakeErr = X509_verify_cert_error_string(verifyResult);
@@ -206,8 +207,8 @@ int OpenSSLTLSSession::tlsConnect(const std::string& hostname,
altNames = reinterpret_cast<GENERAL_NAMES*>
(X509_get_ext_d2i(peerCert, NID_subject_alt_name, NULL, NULL));
if(altNames) {
- auto_delete<GENERAL_NAMES*> altNamesDeleter
- (altNames, GENERAL_NAMES_free);
+ std::unique_ptr<GENERAL_NAMES, decltype(&GENERAL_NAMES_free)>
+ altNamesDeleter(altNames, GENERAL_NAMES_free);
size_t n = sk_GENERAL_NAME_num(altNames);
for(size_t i = 0; i < n; ++i) {
const GENERAL_NAME* altName = sk_GENERAL_NAME_value(altNames, i);
diff --git a/src/NameResolver.cc b/src/NameResolver.cc
index 35f423eb..33954423 100644
--- a/src/NameResolver.cc
+++ b/src/NameResolver.cc
@@ -58,7 +58,8 @@ void NameResolver::resolve(std::vector<std::string>& resolvedAddresses,
hostname.c_str(), gai_strerror(s)),
error_code::NAME_RESOLVE_ERROR);
}
- WSAAPI_AUTO_DELETE<struct addrinfo*> resDeleter(res, freeaddrinfo);
+ std::unique_ptr<addrinfo, decltype(&freeaddrinfo)> resDeleter
+ (res, freeaddrinfo);
struct addrinfo* rp;
for(rp = res; rp; rp = rp->ai_next) {
std::pair<std::string, uint16_t> addressPort
diff --git a/src/SocketCore.cc b/src/SocketCore.cc
index a3f24306..ca451339 100644
--- a/src/SocketCore.cc
+++ b/src/SocketCore.cc
@@ -250,7 +250,8 @@ static sock_t bindTo
error = gai_strerror(s);
return -1;
}
- WSAAPI_AUTO_DELETE<struct addrinfo*> resDeleter(res, freeaddrinfo);
+ std::unique_ptr<addrinfo, decltype(&freeaddrinfo)> resDeleter
+ (res, freeaddrinfo);
struct addrinfo* rp;
for(rp = res; rp; rp = rp->ai_next) {
sock_t fd = bindInternal(rp->ai_family, rp->ai_socktype, rp->ai_protocol,
@@ -409,7 +410,8 @@ void SocketCore::establishConnection(const std::string& host, uint16_t port,
if(s) {
throw DL_ABORT_EX(fmt(EX_RESOLVE_HOSTNAME, host.c_str(), gai_strerror(s)));
}
- WSAAPI_AUTO_DELETE<struct addrinfo*> resDeleter(res, freeaddrinfo);
+ std::unique_ptr<addrinfo, decltype(&freeaddrinfo)> resDeleter
+ (res, freeaddrinfo);
struct addrinfo* rp;
int errNum;
for(rp = res; rp; rp = rp->ai_next) {
@@ -888,7 +890,8 @@ ssize_t SocketCore::writeData(const void* data, size_t len,
if(s) {
throw DL_ABORT_EX(fmt(EX_SOCKET_SEND, gai_strerror(s)));
}
- WSAAPI_AUTO_DELETE<struct addrinfo*> resDeleter(res, freeaddrinfo);
+ std::unique_ptr<addrinfo, decltype(&freeaddrinfo)> resDeleter
+ (res, freeaddrinfo);
struct addrinfo* rp;
ssize_t r = -1;
int errNum = 0;
@@ -1005,7 +1008,8 @@ void getInterfaceAddress
A2_LOG_INFO(fmt(MSG_INTERFACE_NOT_FOUND,
iface.c_str(), errorMsg(errNum).c_str()));
} else {
- auto_delete<ifaddrs*> ifaddrDeleter(ifaddr, freeifaddrs);
+ std::unique_ptr<ifaddrs, decltype(&freeifaddrs)> ifaddrDeleter
+ (ifaddr, freeifaddrs);
for(ifaddrs* ifa = ifaddr; ifa; ifa = ifa->ifa_next) {
if(!ifa->ifa_addr) {
continue;
@@ -1044,7 +1048,8 @@ void getInterfaceAddress
if(s) {
A2_LOG_INFO(fmt(MSG_INTERFACE_NOT_FOUND, iface.c_str(), gai_strerror(s)));
} else {
- WSAAPI_AUTO_DELETE<addrinfo*> resDeleter(res, freeaddrinfo);
+ std::unique_ptr<addrinfo, decltype(&freeaddrinfo)> resDeleter
+ (res, freeaddrinfo);
addrinfo* rp;
for(rp = res; rp; rp = rp->ai_next) {
// Try to bind socket with this address. If it fails, the
@@ -1156,7 +1161,8 @@ size_t getBinAddr(void* dest, const std::string& ip)
0, AI_NUMERICHOST, 0) != 0) {
return len;
}
- WSAAPI_AUTO_DELETE<addrinfo*> resDeleter(res, freeaddrinfo);
+ std::unique_ptr<addrinfo, decltype(&freeaddrinfo)> resDeleter
+ (res, freeaddrinfo);
for(addrinfo* rp = res; rp; rp = rp->ai_next) {
sockaddr_union su;
memcpy(&su, rp->ai_addr, rp->ai_addrlen);
@@ -1309,7 +1315,8 @@ void checkAddrconfig()
A2_LOG_INFO(fmt("getifaddrs failed. Cause: %s", errorMsg(errNum).c_str()));
return;
}
- auto_delete<ifaddrs*> ifaddrDeleter(ifaddr, freeifaddrs);
+ std::unique_ptr<ifaddrs, decltype(&freeifaddrs)> ifaddrDeleter
+ (ifaddr, freeifaddrs);
char host[NI_MAXHOST];
sockaddr_union ad;
for(ifaddrs* ifa = ifaddr; ifa; ifa = ifa->ifa_next) {
diff --git a/src/a2functional.h b/src/a2functional.h
index 34b0fda5..dc13a443 100644
--- a/src/a2functional.h
+++ b/src/a2functional.h
@@ -54,33 +54,6 @@ public:
}
};
-template<typename T>
-class auto_delete {
-private:
- T obj_;
- void (*deleter_)(T);
-public:
- auto_delete(T obj, void (*deleter)(T)):obj_(obj), deleter_(deleter) {}
-
- ~auto_delete()
- {
- deleter_(obj_);
- }
-};
-
-template<typename T>
-class auto_delete_d {
-private:
- T obj_;
-public:
- auto_delete_d(T obj):obj_(obj) {}
-
- ~auto_delete_d()
- {
- delete obj_;
- }
-};
-
template<typename T, typename R>
class auto_delete_r {
private:
diff --git a/src/a2netcompat.h b/src/a2netcompat.h
index 5864277b..c010680a 100644
--- a/src/a2netcompat.h
+++ b/src/a2netcompat.h
@@ -108,26 +108,6 @@
# endif // !SHUT_WR
#endif // __MINGW32__
-#ifdef __MINGW32__
-template<typename T>
-class wsaapi_auto_delete {
-private:
- T obj_;
- void (WSAAPI*deleter_)(T);
-public:
- wsaapi_auto_delete(T obj, void (WSAAPI*deleter)(T)):
- obj_(obj), deleter_(deleter) {}
-
- ~wsaapi_auto_delete()
- {
- deleter_(obj_);
- }
-};
-# define WSAAPI_AUTO_DELETE wsaapi_auto_delete
-#else // !__MINGW32__
-# define WSAAPI_AUTO_DELETE auto_delete
-#endif // !__MINGW32__
-
union sockaddr_union {
sockaddr sa;
sockaddr_storage storage;