diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-06-22 18:51:29 +0900 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2013-06-22 18:51:29 +0900 |
| commit | 05d85e296563842ab57eb201fb6d11a68cf8fa41 (patch) | |
| tree | 660bba2e5d2e90b5be41eb55398673ad91411e87 /src | |
| parent | e791eb9ca334e7746bc0735cebcda09e30fa65df (diff) | |
Remove auto_delete in favor of std::unique_ptr
Diffstat (limited to 'src')
| -rw-r--r-- | src/AppleTLSSession.cc | 2 | ||||
| -rw-r--r-- | src/LibgnutlsTLSSession.cc | 4 | ||||
| -rw-r--r-- | src/LibsslTLSSession.cc | 7 | ||||
| -rw-r--r-- | src/NameResolver.cc | 3 | ||||
| -rw-r--r-- | src/SocketCore.cc | 21 | ||||
| -rw-r--r-- | src/a2functional.h | 27 | ||||
| -rw-r--r-- | src/a2netcompat.h | 20 |
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; |
