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());