Byte alignment problem using Preon

583 views Asked by At

Hello everybody :) I am currently using preon for a spare time project, and I have encountered the following problem: I am trying to read a fixed length String with the following code:

@Bound int string_size;
@ByteAlign @BoundString(size = "string_size") my_string;

The file specification expects a variable padding, so that the next block's offset is a multiple of 4. For example, if string_size = 5, then 3 null bytes will be added, and so on. I initially thought that the @ByteAlign annotation did exactly this, however, looking into the source code, I realized that it wasn't the case.

I tried to make this quick fix:

@If ("string_size % 4 == 2") @BoundList(size = "2", type = Byte.class) byte[] padding;

Sadly, Limbo doesn't seem to support the "%" operator. Is there a way around this?

(Also, where/how can I get the latest version?) Thanks in advance.

1

There are 1 answers

1
Wilfred Springer On

Preon currently doesn't have a solution for your issue built-in. As you said, it's expression language doesn't have a modulo operator, and it looks like you could use one. You can however implement your own CodecDecorator, which is probably the thing you want to do. You could implement a CodecDecorator that inserts a Codec reading a couple of extrac bytes after it decoded the value.

The latest version of Preon is at Codehaus:

git://git.codehaus.org/preon.git

You could checkout the head, but there's also a separate branch called PREON-35 that has the bits for doing what is discussed over here.