Make fat16copy.py add . and .. entries to directories
Test: fsck no longer complains
Bug: None
(cherry picked from commit 7d38ec37432c307d729b9a8fdb78dbf820427538)
Change-Id: I587f400df2f57b987df8b92d551c99f2f42a9af6
diff --git a/tools/fat16copy.py b/tools/fat16copy.py
index 1dd15b7..77500eb 100755
--- a/tools/fat16copy.py
+++ b/tools/fat16copy.py
@@ -222,7 +222,11 @@
data.seek(0, os.SEEK_END)
size = data.tell()
- chunk = self.backing.fs.allocate(size or 1)
+ chunk = 0
+
+ if size > 0:
+ chunk = self.backing.fs.allocate(size)
+
(shortname, ext) = self.make_short_name(name)
self.add_dentry(0, shortname, ext, name, chunk, size)
@@ -240,10 +244,19 @@
"""
chunk = self.backing.fs.allocate(1)
(shortname, ext) = self.make_short_name(name)
- new_dentry = dentry(self.backing.fs, ATTRIBUTE_SUBDIRECTORY,
- shortname, ext, name, chunk, 0)
- new_dentry.commit(self.backing)
- return new_dentry.open_directory()
+ new_dentry = self.add_dentry(ATTRIBUTE_SUBDIRECTORY, shortname,
+ ext, name, chunk, 0)
+ result = new_dentry.open_directory()
+
+ parent_cluster = 0
+
+ if hasattr(self.backing, 'start_cluster'):
+ parent_cluster = self.backing.start_cluster
+
+ result.add_dentry(ATTRIBUTE_SUBDIRECTORY, '.', '', '', chunk, 0)
+ result.add_dentry(ATTRIBUTE_SUBDIRECTORY, '..', '', '', parent_cluster, 0)
+
+ return result
def lfn_checksum(name_data):
"""
@@ -624,6 +637,9 @@
Allocate a new cluster chain big enough to hold at least the given amount
of bytes.
"""
+
+ assert amount > 0, "Must allocate a non-zero amount."
+
f = self.f
f.seek(FAT_TABLE_START + 4)
@@ -708,8 +724,9 @@
return_cluster = return_cluster or cluster
position += 2
self.write_cluster_entry(cluster)
+ amount -= self.bytes_per_cluster
- if amount < 0:
+ if amount <= 0:
self.write_cluster_entry(0xFFFF)
return return_cluster