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

Commit 1f9d55d2 authored by Ted Bauer's avatar Ted Bauer
Browse files

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
parent a4b1e92e
Loading
Loading
Loading
Loading
+31 −3
Original line number Diff line number Diff line
@@ -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")
            ]
        );
    }
}