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

Commit 0efe4796 authored by Dennis Shen's avatar Dennis Shen
Browse files

aconfig: update storage write api

Now we are storing flag index instead of flag byte offset in storage
files, need to update storage write api accordingly.

Bug: b/321077378
Test: atest -c
Change-Id: I67e55287a242df0af1925ede886f8c087d343c1f
parent b18227e8
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -22,7 +22,7 @@ use anyhow::anyhow;
/// Set flag value
pub fn update_boolean_flag_value(
    buf: &mut [u8],
    flag_offset: u32,
    flag_index: u32,
    flag_value: bool,
) -> Result<(), AconfigStorageError> {
    let interpreted_header = FlagValueHeader::from_bytes(buf)?;
@@ -34,10 +34,8 @@ pub fn update_boolean_flag_value(
        )));
    }

    let head = (interpreted_header.boolean_value_offset + flag_offset) as usize;

    // TODO: right now, there is only boolean flags, with more flag value types added
    // later, the end of boolean flag value section should be updated (b/322826265).
    // get byte offset to the flag
    let head = (interpreted_header.boolean_value_offset + flag_index) as usize;
    if head >= interpreted_header.file_size as usize {
        return Err(AconfigStorageError::InvalidStorageFileOffset(anyhow!(
            "Flag value offset goes beyond the end of the file."
+7 −7
Original line number Diff line number Diff line
@@ -55,16 +55,16 @@ pub unsafe fn get_mapped_flag_value_file(container: &str) -> Result<MmapMut, Aco
/// Set boolean flag value thru mapped file and flush the change to file
///
/// \input mapped_file: the mapped flag value file
/// \input offset: flag value offset
/// \input index: flag index
/// \input value: updated flag value
/// \return a result of ()
///
pub fn set_boolean_flag_value(
    file: &mut MmapMut,
    offset: u32,
    index: u32,
    value: bool,
) -> Result<(), AconfigStorageError> {
    crate::flag_value_update::update_boolean_flag_value(file, offset, value)?;
    crate::flag_value_update::update_boolean_flag_value(file, index, value)?;
    file.flush().map_err(|errmsg| {
        AconfigStorageError::MapFlushFail(anyhow!("fail to flush storage file: {}", errmsg))
    })
@@ -106,15 +106,15 @@ pub fn create_flag_info(
        )));
    }

    let mut package_offsets = vec![0; package_table.header.num_packages as usize];
    let mut package_start_index = vec![0; package_table.header.num_packages as usize];
    for node in package_table.nodes.iter() {
        package_offsets[node.package_id as usize] = node.boolean_offset;
        package_start_index[node.package_id as usize] = node.boolean_start_index;
    }

    let mut is_flag_rw = vec![false; flag_table.header.num_flags as usize];
    for node in flag_table.nodes.iter() {
        let flag_offset = package_offsets[node.package_id as usize] + node.flag_id as u32;
        is_flag_rw[flag_offset as usize] = node.flag_type == StoredFlagType::ReadWriteBoolean;
        let flag_index = package_start_index[node.package_id as usize] + node.flag_index as u32;
        is_flag_rw[flag_index as usize] = node.flag_type == StoredFlagType::ReadWriteBoolean;
    }

    let mut list = FlagInfoList {