Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd4ffa35 authored by Ytai Ben-tsvi's avatar Ytai Ben-tsvi Committed by Android (Google) Code Review
Browse files

Merge "unique_malloced_ptr: RAII guard for C-style allocations"

parents b7133fdc db6f8980
Loading
Loading
Loading
Loading
+6 −5
Original line number Diff line number Diff line
@@ -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 @@ status_t StreamHalHidl::legacyCreateAudioPatch(const struct audio_port_config& p
                                               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());
+4 −1
Original line number Diff line number Diff line
@@ -122,7 +122,10 @@ cc_library_headers {

cc_test {
    name: "libmediautils_test",
    srcs: ["TimerThread-test.cpp"],
    srcs: [
        "memory-test.cpp",
        "TimerThread-test.cpp",
    ],
    shared_libs: [
      "libmediautils",
      "libutils",
+33 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
#pragma once

namespace android {

namespace {
struct FreeDeleter {
    void operator()(void* p) { free(p); }
};

}  // namespace

/**
 * Used to wrap pointers allocated by legacy code using malloc / calloc / etc.
 */
template <typename T>
using unique_malloced_ptr = std::unique_ptr<T, FreeDeleter>;

}  // namespace android
+40 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#include <gtest/gtest.h>
#include <mediautils/memory.h>

namespace android {
namespace {

TEST(UniqueMallocedPtr, Void) {
    unique_malloced_ptr<void> p(std::malloc(10));
}

TEST(UniqueMallocedPtr, Char) {
    unique_malloced_ptr<char> p(reinterpret_cast<char*>(std::malloc(10)));
}

TEST(UniqueMallocedPtr, Null) {
    unique_malloced_ptr<char> p(nullptr);
}

TEST(UniqueMallocedPtr, Default) {
    unique_malloced_ptr<char> p;
}

}  // namespace
}  // namespace android