Use template instead of macro to release UniquePtrs.
Change-Id: Icb6674517ed48e3f4bb56818eef0c0756d6dd3d3
diff --git a/softkeymaster/keymaster_openssl.cpp b/softkeymaster/keymaster_openssl.cpp
index 3bf4cec..5a25b65 100644
--- a/softkeymaster/keymaster_openssl.cpp
+++ b/softkeymaster/keymaster_openssl.cpp
@@ -92,8 +92,10 @@
* scoped pointers when we've transferred ownership, without
* triggering a warning by not using the result of release().
*/
-#define OWNERSHIP_TRANSFERRED(obj) \
- typeof(obj.release()) _dummy __attribute__((unused)) = obj.release()
+template <typename T, typename Delete_T>
+inline void release_because_ownership_transferred(UniquePtr<T, Delete_T>& p) {
+ T* val __attribute__((unused)) = p.release();
+}
/*
* Checks this thread's OpenSSL error queue and logs if
@@ -274,7 +276,7 @@
logOpenSSLError("generate_dsa_keypair");
return -1;
}
- OWNERSHIP_TRANSFERRED(dsa);
+ release_because_ownership_transferred(dsa);
return 0;
}
@@ -331,7 +333,7 @@
logOpenSSLError("generate_ec_keypair");
return -1;
}
- OWNERSHIP_TRANSFERRED(eckey);
+ release_because_ownership_transferred(eckey);
return 0;
}
@@ -365,7 +367,7 @@
logOpenSSLError("generate_rsa_keypair");
return -1;
}
- OWNERSHIP_TRANSFERRED(rsa);
+ release_because_ownership_transferred(rsa);
return 0;
}
@@ -431,7 +433,7 @@
logOpenSSLError("openssl_import_keypair");
return -1;
}
- OWNERSHIP_TRANSFERRED(pkcs8);
+ release_because_ownership_transferred(pkcs8);
if (wrap_key(pkey.get(), EVP_PKEY_type(pkey->type), key_blob, key_blob_length)) {
return -1;