Skip to content

pad_XXX/align_XX attributes write unexpected zeros. #295

Description

@ismell

Take the following:

pub struct BootImage {
    pub header: BootImageHeader,

    // Skip reading the individual ramdisk fragments.
    #[brw(pad_size_to = header.ramdisk_size, align_after = header.page_size)]
    pub ramdisk_fragments: (),
   
   ...
}

I'm reading BootImage from a file, changing a couple properties, and writing BootImage back to the same file. I was surprised to find out that the ramdisk_fragments part of my file was all zeros. I wanted to skip reading/writing the ramdisk_fragments since it's not relevant to my use case.

Reading the documentation for align_before, align_after, and pad_size_to, it says "Aligns the reader/writer to the Nth byte before a field." and "Ensures the reader/writer is always advanced at least N bytes.". It doesn't mention that it zero fills the space. Reading the pad_after function shows the zeroing code.

I doubt we can change the behavior at this point, but maybe we can update the documentation?

I can work around my issue by using seek_before, it just makes the struct less readable.

Thanks!

Metadata

Metadata

Assignees

No one assigned

    Labels

    confusing apiOops! Confusion occurreddocumentationImprovements or additions to documentationgood first issueGood for newcomers

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions