1
0
Ficheiros
android_device_xiaomi_sm845…/sensors/sensor-notifier/utils/SensorNotifierUtils.cpp
Arian b6d0f0fb2b sm8450-common: nonui-notifier: Switch to shared_ptr to avoid memory leaks
Change-Id: I950bd5f6abd1dd78093864f5813ab22f0e093ded
2025-03-25 17:26:37 +01:00

62 linhas
1.5 KiB
C++

/*
* Copyright (C) 2024 The LineageOS Project
*
* SPDX-License-Identifier: Apache-2.0
*/
#define LOG_TAG "SensorNotifierUtils"
#include "SensorNotifierUtils.h"
#include <android-base/logging.h>
bool readBool(int fd) {
char c;
int rc;
rc = lseek(fd, 0, SEEK_SET);
if (rc) {
LOG(ERROR) << "failed to seek fd, err: " << rc;
return false;
}
rc = read(fd, &c, sizeof(char));
if (rc != 1) {
LOG(ERROR) << "failed to read bool from fd, err: " << rc;
return false;
}
return c != '0';
}
std::shared_ptr<disp_event_resp> parseDispEvent(int fd) {
disp_event header;
ssize_t headerSize = read(fd, &header, sizeof(header));
if (headerSize < sizeof(header)) {
LOG(ERROR) << "unexpected display event header size: " << headerSize;
return nullptr;
}
std::shared_ptr<disp_event_resp> response(static_cast<disp_event_resp*>(malloc(header.length)),
free);
if (!response) {
LOG(ERROR) << "failed to allocate memory for display event response";
return nullptr;
}
response->base = header;
int dataLength = response->base.length - sizeof(response->base);
if (dataLength < 0) {
LOG(ERROR) << "invalid data length: " << response->base.length;
return nullptr;
}
ssize_t dataSize = read(fd, &response->data, dataLength);
if (dataSize < dataLength) {
LOG(ERROR) << "unexpected display event data size: " << dataSize;
return nullptr;
}
return response;
}