unique_malloced_ptr: RAII guard for C-style allocations

This type is helpful in cases where we need unique ownership for
memory allocated using the C mechanisms (malloc, etc).

Test: atest libmediautils_test
Change-Id: Ia8b273bfd91c26ed99e6ca1a4087ef77bbc92fc6
diff --git a/media/libaudiohal/impl/StreamHalHidl.cpp b/media/libaudiohal/impl/StreamHalHidl.cpp
index 263ee67..8ba0f72 100644
--- a/media/libaudiohal/impl/StreamHalHidl.cpp
+++ b/media/libaudiohal/impl/StreamHalHidl.cpp
@@ -20,6 +20,7 @@
 #include <android/hidl/manager/1.0/IServiceManager.h>
 #include <hwbinder/IPCThreadState.h>
 #include <media/AudioParameter.h>
+#include <mediautils/memory.h>
 #include <mediautils/SchedulingPolicyService.h>
 #include <utils/Log.h>
 
@@ -275,15 +276,15 @@
                                                std::optional<audio_source_t> source,
                                                audio_devices_t type) {
     LOG_ALWAYS_FATAL_IF(port.type != AUDIO_PORT_TYPE_DEVICE, "port type must be device");
-    char* address;
+    unique_malloced_ptr<char> address;
     if (strcmp(port.ext.device.address, "") != 0) {
         // FIXME: we only support address on first sink with HAL version < 3.0
-        address = audio_device_address_to_parameter(port.ext.device.type, port.ext.device.address);
+        address.reset(
+                audio_device_address_to_parameter(port.ext.device.type, port.ext.device.address));
     } else {
-        address = (char*)calloc(1, 1);
+        address.reset((char*)calloc(1, 1));
     }
-    AudioParameter param = AudioParameter(String8(address));
-    free(address);
+    AudioParameter param = AudioParameter(String8(address.get()));
     param.addInt(String8(AudioParameter::keyRouting), (int)type);
     if (source.has_value()) {
         param.addInt(String8(AudioParameter::keyInputSource), (int)source.value());