mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 15:58:43 +00:00
camera: Fix prefix length path for External Camera HAL
The default External Camera HAL accidentally used `sizeof` on a `char *`
to get the length of the string. This "worked" because the string in
question "/dev/" has length of 5, while on a 32-bit system `char *`
has a size of 4. This difference of 1 was handled a few lines later.
However on 64-bit system `sizeof(char *)` returns 8 which breaks the
logic later in code.
As `sizeof` was being used as a proxy for strlen, this CL converts the
uses C++'s std::char_traits::length to determine the string lengths
at compile time.
Bug: 265168485
Test: Manually tested that the calculated length is correct after the
fix.
Change-Id: I92481a2bcb74fdbbb483ef552168debf07b2d68a
This commit is contained in:
@@ -18,15 +18,16 @@
|
||||
//#define LOG_NDEBUG 0
|
||||
#include <log/log.h>
|
||||
|
||||
#include <regex>
|
||||
#include <sys/inotify.h>
|
||||
#include <cutils/properties.h>
|
||||
#include <errno.h>
|
||||
#include <linux/videodev2.h>
|
||||
#include <cutils/properties.h>
|
||||
#include "ExternalCameraProviderImpl_2_4.h"
|
||||
#include <sys/inotify.h>
|
||||
#include <regex>
|
||||
#include <string>
|
||||
#include "ExternalCameraDevice_3_4.h"
|
||||
#include "ExternalCameraDevice_3_5.h"
|
||||
#include "ExternalCameraDevice_3_6.h"
|
||||
#include "ExternalCameraProviderImpl_2_4.h"
|
||||
|
||||
namespace android {
|
||||
namespace hardware {
|
||||
@@ -41,10 +42,10 @@ namespace {
|
||||
// "device@<version>/external/<id>"
|
||||
const std::regex kDeviceNameRE("device@([0-9]+\\.[0-9]+)/external/(.+)");
|
||||
const int kMaxDevicePathLen = 256;
|
||||
const char* kDevicePath = "/dev/";
|
||||
constexpr char kPrefix[] = "video";
|
||||
constexpr int kPrefixLen = sizeof(kPrefix) - 1;
|
||||
constexpr int kDevicePrefixLen = sizeof(kDevicePath) + kPrefixLen + 1;
|
||||
constexpr const char* kDevicePath = "/dev/";
|
||||
constexpr const char* kPrefix = "video";
|
||||
constexpr int kPrefixLen = std::char_traits<char>::length(kPrefix);
|
||||
constexpr int kDevicePrefixLen = std::char_traits<char>::length(kDevicePath) + kPrefixLen;
|
||||
|
||||
bool matchDeviceName(int cameraIdOffset,
|
||||
const hidl_string& deviceName, std::string* deviceVersion,
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <linux/videodev2.h>
|
||||
#include <sys/inotify.h>
|
||||
#include <regex>
|
||||
#include <string>
|
||||
#include "ExternalCameraDevice_3_4.h"
|
||||
#include "ExternalCameraDevice_3_5.h"
|
||||
#include "ExternalCameraDevice_3_6.h"
|
||||
@@ -39,10 +40,10 @@ namespace {
|
||||
// "device@<version>/external/<id>"
|
||||
const std::regex kDeviceNameRE("device@([0-9]+\\.[0-9]+)/external/(.+)");
|
||||
const int kMaxDevicePathLen = 256;
|
||||
const char* kDevicePath = "/dev/";
|
||||
constexpr char kPrefix[] = "video";
|
||||
constexpr int kPrefixLen = sizeof(kPrefix) - 1;
|
||||
constexpr int kDevicePrefixLen = sizeof(kDevicePath) + kPrefixLen + 1;
|
||||
constexpr const char* kDevicePath = "/dev/";
|
||||
constexpr const char* kPrefix = "video";
|
||||
constexpr int kPrefixLen = std::char_traits<char>::length(kPrefix);
|
||||
constexpr int kDevicePrefixLen = std::char_traits<char>::length(kDevicePath) + kPrefixLen;
|
||||
|
||||
bool matchDeviceName(int cameraIdOffset, const hidl_string& deviceName, std::string* deviceVersion,
|
||||
std::string* cameraDevicePath) {
|
||||
|
||||
Reference in New Issue
Block a user