Fix bug in device path proto reading

aconfig_device_paths uses `include_str!` to include a text file
containing comma-separated strings with each partition aconfig file.
The lib does not handle the escaped newlines and quotation marks.
Adds proper handling.

Test: cargo t  && m -j120 && acloud create --local-image && adb shell aflags list
Bug: 340514768
Change-Id: I75214bf02dd962d8291f1654ade8cbce1cda9fde
This commit is contained in:
Ted Bauer 2024-05-14 15:12:10 -04:00
parent a4b1e92ee0
commit 1f9d55d2ab

View file

@ -21,11 +21,19 @@ use std::path::PathBuf;
use std::fs;
fn read_partition_paths() -> Vec<PathBuf> {
include_str!("../partition_aconfig_flags_paths.txt")
.split(',')
.map(|s| s.trim().trim_matches('"'))
.filter(|s| !s.is_empty())
.map(|s| PathBuf::from(s.to_string()))
.collect()
}
/// Determine all paths that contain an aconfig protobuf file.
pub fn parsed_flags_proto_paths() -> Result<Vec<PathBuf>> {
let mut result: Vec<PathBuf> = [include_str!("../partition_aconfig_flags_paths.txt")]
.map(|s| PathBuf::from(s.to_string()))
.to_vec();
let mut result: Vec<PathBuf> = read_partition_paths();
for dir in fs::read_dir("/apex")? {
let dir = dir?;
@ -45,3 +53,23 @@ pub fn parsed_flags_proto_paths() -> Result<Vec<PathBuf>> {
Ok(result)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_read_partition_paths() {
assert_eq!(read_partition_paths().len(), 4);
assert_eq!(
read_partition_paths(),
vec![
PathBuf::from("/system/etc/aconfig_flags.pb"),
PathBuf::from("/system_ext/etc/aconfig_flags.pb"),
PathBuf::from("/product/etc/aconfig_flags.pb"),
PathBuf::from("/vendor/etc/aconfig_flags.pb")
]
);
}
}