From a3dfbcb14ef955d9f85558b7539458875ed0baff Mon Sep 17 00:00:00 2001 From: Tomasz Wasilczyk Date: Mon, 23 Jan 2017 14:33:50 -0800 Subject: [PATCH] Implement radio_metadata wrapper for safer memory management. Bug: b/34054813 Test: VTS, manual - both done in internal branch Change-Id: If9c27669bb0d75ca67b75a761afe4cdc9dc51f0b --- radio/Android.bp | 5 ++++- radio/include/system/RadioMetadataWrapper.h | 21 +++++++++++++++++++++ radio/src/RadioMetadataWrapper.cpp | 26 ++++++++++++++++++++++++++ 3 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 radio/include/system/RadioMetadataWrapper.h create mode 100644 radio/src/RadioMetadataWrapper.cpp diff --git a/radio/Android.bp b/radio/Android.bp index 2b7a0537..b56434d1 100644 --- a/radio/Android.bp +++ b/radio/Android.bp @@ -1,7 +1,10 @@ cc_library_shared { name: "libradio_metadata", - srcs: ["src/radio_metadata.c"], + srcs: [ + "src/radio_metadata.c", + "src/RadioMetadataWrapper.cpp", + ], cflags: [ "-Werror", diff --git a/radio/include/system/RadioMetadataWrapper.h b/radio/include/system/RadioMetadataWrapper.h new file mode 100644 index 00000000..fae4d1c2 --- /dev/null +++ b/radio/include/system/RadioMetadataWrapper.h @@ -0,0 +1,21 @@ +#ifndef ANDROID_RADIO_METADATA_WRAPPER_H +#define ANDROID_RADIO_METADATA_WRAPPER_H + +#include + +namespace android { + +class ANDROID_API RadioMetadataWrapper +{ +public: + explicit RadioMetadataWrapper(radio_metadata_t **metadata); + + virtual ~RadioMetadataWrapper(); + +private: + radio_metadata_t **mMetadata; +}; + +} // namespace android + +#endif // ANDROID_RADIO_METADATA_WRAPPER_H diff --git a/radio/src/RadioMetadataWrapper.cpp b/radio/src/RadioMetadataWrapper.cpp new file mode 100644 index 00000000..d7843f24 --- /dev/null +++ b/radio/src/RadioMetadataWrapper.cpp @@ -0,0 +1,26 @@ +#define LOG_TAG "RadioMetadataWrapper" +//#define LOG_NDEBUG 0 + +#include +#include + +namespace android { + +RadioMetadataWrapper::RadioMetadataWrapper(radio_metadata_t **metadata) + : mMetadata(metadata) +{ + *mMetadata = nullptr; + + auto status = radio_metadata_allocate(mMetadata, 0, 0); + if (status != 0) { + // *mMetadata remains NULL if allocation fails + ALOGE("Failed to allocate metadata buffer"); + } +} + +RadioMetadataWrapper::~RadioMetadataWrapper() +{ + radio_metadata_deallocate(*mMetadata); +} + +} // namespace android -- 2.11.0