"""Tiny CFB writer solely for bounded native-format unit fixtures (never application data).""" import math import struct FREE=0xffffffff; END=0xfffffffe; FAT=0xfffffffd def cfb(streams): entries=[('Root Entry',5,b'',[])] storages={} for name,data in streams.items(): parts=name.split('/'); parent=0 for part in parts[:-1]: key=(parent,part) if key not in storages: storages[key]=len(entries);entries.append((part,1,b'',[]));entries[parent][3].append(storages[key]) parent=storages[key] entries[parent][3].append(len(entries));entries.append((parts[-1],2,data,[])) # This fixture deliberately uses normal >=4096-byte streams, with padding INSIDE native records. assert all(len(e[2])>=4096 for e in entries if e[1]==2) sectors=[];links=[];starts={} def allocate(data): start=len(sectors); count=math.ceil(len(data)/512) for i in range(count):sectors.append(data[i*512:(i+1)*512].ljust(512,b'\0'));links.append(start+i+1 if i+1