OSDN Git Service

Implement radio_metadata wrapper for safer memory management.
authorTomasz Wasilczyk <twasilczyk@google.com>
Mon, 23 Jan 2017 22:33:50 +0000 (14:33 -0800)
committerTomasz Wasilczyk <twasilczyk@google.com>
Thu, 26 Jan 2017 23:26:04 +0000 (15:26 -0800)
Bug: b/34054813
Test: VTS, manual - both done in internal branch
Change-Id: If9c27669bb0d75ca67b75a761afe4cdc9dc51f0b

radio/Android.bp
radio/include/system/RadioMetadataWrapper.h [new file with mode: 0644]
radio/src/RadioMetadataWrapper.cpp [new file with mode: 0644]

index 2b7a053..b56434d 100644 (file)
@@ -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 (file)
index 0000000..fae4d1c
--- /dev/null
@@ -0,0 +1,21 @@
+#ifndef ANDROID_RADIO_METADATA_WRAPPER_H
+#define ANDROID_RADIO_METADATA_WRAPPER_H
+
+#include <system/radio_metadata.h>
+
+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 (file)
index 0000000..d7843f2
--- /dev/null
@@ -0,0 +1,26 @@
+#define LOG_TAG "RadioMetadataWrapper"
+//#define LOG_NDEBUG 0
+
+#include <system/RadioMetadataWrapper.h>
+#include <utils/Log.h>
+
+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