Update fat_tool helper script

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
2026-04-18 00:48:58 +01:00
parent 67233c9102
commit 2207539dcf
+12 -1
View File
@@ -50,10 +50,17 @@ class Fat32:
try: try:
self._read_bpb() self._read_bpb()
self._load_fat() self._load_fat()
except: except Exception:
self.f.close() self.f.close()
raise raise
def __enter__(self):
return self
def __exit__(self, *args):
self.close()
return False
def _read_bpb(self): def _read_bpb(self):
self.f.seek(self.offset) self.f.seek(self.offset)
bpb = self.f.read(512) bpb = self.f.read(512)
@@ -119,6 +126,8 @@ class Fat32:
return bytearray(self.f.read(self.cluster_size)) return bytearray(self.f.read(self.cluster_size))
def _write_cluster(self, cluster, data): def _write_cluster(self, cluster, data):
if len(data) > self.cluster_size:
raise RuntimeError(f"_write_cluster: data size {len(data)} exceeds cluster size {self.cluster_size}")
self.f.seek(self._cluster_offset(cluster)) self.f.seek(self._cluster_offset(cluster))
self.f.write(data[: self.cluster_size]) self.f.write(data[: self.cluster_size])
@@ -536,6 +545,8 @@ class Fat32:
if parent_entry is None or not parent_entry["is_dir"]: if parent_entry is None or not parent_entry["is_dir"]:
raise RuntimeError(f"cp-in: directory '{parent_path}' not found") raise RuntimeError(f"cp-in: directory '{parent_path}' not found")
parent_cluster = parent_entry["first_cluster"] parent_cluster = parent_entry["first_cluster"]
if parent_cluster < 2:
raise RuntimeError(f"cp-in: parent cluster {parent_cluster} is invalid")
else: else:
parent_cluster = self.root_cluster parent_cluster = self.root_cluster