Skip to content

[Feature] Set default value for in variables in patterns #1916

Open
@Alex-Addy

Description

What feature would you like to see?

It would be nice to have some way to set a non-zero default value for an in variable.

An example:

u32 max_data_size in = 1024 * 1024;

Alternatively it might be better to have an attribute or the like to set the value instead.

How will this feature be useful to you and others?

I have a use case where I would like to avoid parsing some data depending on the size to keep the pattern fast. However it would be good to have a way for the user to increase or decrease the values depending on their usage.

I believe that this would make variables useful in situations where having a zero value in the variable isn't very useful or may even cause errors.

Request Type

  • I can provide a PoC for this feature or am willing to work on it myself and submit a PR

Additional context?

I have this pattern for afs files (archive files used by sega, see [https://github.com/fuzziqersoftware/gctools/blob/master/src/afsdump.cc] for some code that pulls out the data):

#pragma magic [41 46 53 00] @ 0x00

u32 max_data_size = 1024 * 1024;

struct file {
  le u32 offset;
  le u32 size;
  if (size < max_data_size) {
    u8 data[size] @ offset;
  }
};

struct afs {
  le u32 magic;
  le u32 num_files;
  file files[num_files];
};

afs afs @ 0x00;

I would like to have max_data_size be an in variable, but can't do that without it being zero by default.

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions