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 del_certs(certs, CFRelease); + std::unique_ptr 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 certDeleter(cert, gnutls_x509_crt_deinit); + std::unique_ptr::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 certDeleter(peerCert, X509_free); + std::unique_ptr 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 (X509_get_ext_d2i(peerCert, NID_subject_alt_name, NULL, NULL)); if(altNames) { - auto_delete altNamesDeleter - (altNames, GENERAL_NAMES_free); + std::unique_ptr + 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& resolvedAddresses, hostname.c_str(), gai_strerror(s)), error_code::NAME_RESOLVE_ERROR); } - WSAAPI_AUTO_DELETE resDeleter(res, freeaddrinfo); + std::unique_ptr resDeleter + (res, freeaddrinfo); struct addrinfo* rp; for(rp = res; rp; rp = rp->ai_next) { std::pair 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 resDeleter(res, freeaddrinfo); + std::unique_ptr 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 resDeleter(res, freeaddrinfo); + std::unique_ptr 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 resDeleter(res, freeaddrinfo); + std::unique_ptr 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 ifaddrDeleter(ifaddr, freeifaddrs); + std::unique_ptr 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 resDeleter(res, freeaddrinfo); + std::unique_ptr 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 resDeleter(res, freeaddrinfo); + std::unique_ptr 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 ifaddrDeleter(ifaddr, freeifaddrs); + std::unique_ptr 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 -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 -class auto_delete_d { -private: - T obj_; -public: - auto_delete_d(T obj):obj_(obj) {} - - ~auto_delete_d() - { - delete obj_; - } -}; - template 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 -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; diff --git a/test/SocketCoreTest.cc b/test/SocketCoreTest.cc index 47a3b1ff..064a5141 100644 --- a/test/SocketCoreTest.cc +++ b/test/SocketCoreTest.cc @@ -89,7 +89,8 @@ void SocketCoreTest::testInetNtop() addrinfo* res; CPPUNIT_ASSERT_EQUAL(0, callGetaddrinfo(&res, s.c_str(), 0, AF_INET, SOCK_STREAM, 0, 0)); - WSAAPI_AUTO_DELETE resDeleter(res, freeaddrinfo); + std::unique_ptr resDeleter + (res, freeaddrinfo); sockaddr_in addr; memcpy(&addr, res->ai_addr, sizeof(addr)); CPPUNIT_ASSERT_EQUAL(0, inetNtop(AF_INET, &addr.sin_addr, @@ -101,7 +102,8 @@ void SocketCoreTest::testInetNtop() addrinfo* res; CPPUNIT_ASSERT_EQUAL(0, callGetaddrinfo(&res, s.c_str(), 0, AF_INET6, SOCK_STREAM, 0, 0)); - WSAAPI_AUTO_DELETE resDeleter(res, freeaddrinfo); + std::unique_ptr resDeleter + (res, freeaddrinfo); sockaddr_in6 addr; memcpy(&addr, res->ai_addr, sizeof(addr)); CPPUNIT_ASSERT_EQUAL(0, inetNtop(AF_INET6, &addr.sin6_addr,