Skip to content

Commit bedf95a

Browse files
committed
another byte positioning bug
1 parent 8b0a1b3 commit bedf95a

File tree

2 files changed

+35
-2
lines changed

2 files changed

+35
-2
lines changed

packed_struct_codegen/src/pack_parse_attributes.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -162,11 +162,15 @@ pub fn parse_position_val(v: &str, multiplier: usize) -> BitsPositionParsed {
162162
if s.len() == 2 {
163163
let start = parse_num(s[0]);
164164
let end = parse_num(s[1]);
165-
return BitsPositionParsed::Range(start * multiplier, end * multiplier);
165+
if multiplier > 1 {
166+
return BitsPositionParsed::Range(start * multiplier, ((end+1) * multiplier)-1);
167+
} else {
168+
return BitsPositionParsed::Range(start * multiplier, end * multiplier);
169+
}
166170
}
167171
} else {
168172
let start = parse_num(v);
169-
if multiplier > 1 {
173+
if multiplier > 1 {
170174
return BitsPositionParsed::Range(start * multiplier, ((start+1) * multiplier)-1);
171175
} else {
172176
return BitsPositionParsed::Range(start * multiplier, start * multiplier);

packed_struct_tests/tests/packing_bit_positioning.rs

+29
Original file line numberDiff line numberDiff line change
@@ -61,3 +61,32 @@ fn test_packing_bit_positions_lsb() {
6161
let unpacked = SmallIntsLsb::unpack(&packed).unwrap();
6262
assert_eq!(a, unpacked);
6363
}
64+
65+
66+
67+
#[test]
68+
fn test_packing_byte_position() {
69+
#[derive(Copy, Clone, Debug, PartialEq, PackedStruct)]
70+
#[packed_struct(bit_numbering="msb0", endian="msb")]
71+
pub struct BufferChecksum {
72+
#[packed_field(bytes="0")]
73+
pub version: u8,
74+
#[packed_field(bytes="1..4")]
75+
pub size: u32,
76+
#[packed_field(bytes="5..")]
77+
pub checksum: u64
78+
}
79+
80+
let b = BufferChecksum {
81+
version: 101,
82+
size: 52748273,
83+
checksum: 869034217895
84+
};
85+
86+
let packed = b.pack();
87+
assert_eq!(packed.len(), 13);
88+
89+
let unpacked = BufferChecksum::unpack(&packed).unwrap();
90+
91+
assert_eq!(b, unpacked);
92+
}

0 commit comments

Comments
 (0)