Skip to content

Commit e0296d2

Browse files
committed
fix: internal use area: make fixed size optional
1 parent 6f8cfe8 commit e0296d2

2 files changed

Lines changed: 13 additions & 14 deletions

File tree

frugy/cli.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def main():
138138

139139
parser.add_argument('--internal-area-size',
140140
type=int,
141-
help='set internal area size (including format byte), default is recommended 72 (only valid in write mode)'
141+
help='set fixed size for internal use area (including format byte)'
142142
)
143143
parser.add_argument('-v', '--verbosity',
144144
type=int,
@@ -178,11 +178,10 @@ def main():
178178
if read_mode and args.ignore_checksum_errors:
179179
FruAreaChecksummed.ignore_checksum_errors = True
180180

181-
if args.internal_area_size == None:
182-
args.internal_area_size = 72 # Recommended size in FRU document
183-
if args.internal_area_size % 8 != 0:
181+
if args.internal_area_size and args.internal_area_size % 8 != 0:
184182
print("Internal area size must be a multiple of 8 bytes", file=sys.stderr)
185183
sys.exit(1)
184+
186185
# In read mode, this isn't used, we always use the size of the section in
187186
# the file since there is no length field.
188187
FruAreaInternalUse.internal_area_size = args.internal_area_size

frugy/types.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -698,7 +698,7 @@ class FruAreaInternalUse(FruAreaBase):
698698
''' FRU Internal use area featuring a version field but no checksum, will
699699
be padded to whatever internal area is specified'''
700700

701-
internal_area_size = 72
701+
internal_area_size = None
702702

703703
def __init__(self, initdict=None):
704704
self._format_version = _format_version_default
@@ -715,23 +715,23 @@ def _prologue(self) -> bytearray:
715715
return self._format_version.to_bytes(1, 'little')
716716

717717
def _epilogue(self, payload: bytearray) -> bytearray:
718-
''' return data to append, padded of zero bytes'''
719-
numPadBytes, _ = _sizeAlign(len(payload), self.internal_area_size)
718+
''' return data to append, padded of 0xff bytes'''
719+
numPadBytes, _ = _sizeAlign(len(payload), self.internal_area_size or 8)
720720
return b'\xff' * numPadBytes
721721

722-
def size_payload(self) -> int:
723-
return self.internal_area_size
724-
725722
def size_total(self) -> int:
726-
return self.internal_area_size
723+
# payload plus "format version" prologue
724+
total_size_base = self.size_payload() + 1
725+
_, total_size_base = _sizeAlign(total_size_base, self.internal_area_size or 8)
726+
return total_size_base
727727

728728
def serialize(self) -> bytearray:
729729
payload = self._prologue()
730-
body = self._serialize()
731-
payload += body[:self.internal_area_size - 1]
730+
payload += self._serialize()
732731
return payload + self._epilogue(payload)
733-
732+
734733
def deserialize(self, input: bytearray):
734+
logging.debug(f"bytearray: {input} len: {len(input)}")
735735
self._format_version = input[0]
736736
return self._deserialize(input[1:])
737737

0 commit comments

Comments
 (0)