Changes in tools/mkfat.py [c4702798:f4057f5] in mainline


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/mkfat.py

    rc4702798 rf4057f5  
    2727# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828#
     29
    2930"""
    3031FAT creator
     
    4546                return size
    4647       
    47         return (((size / alignment) + 1) * alignment)
     48        return ((size // alignment) + 1) * alignment
    4849
    4950def subtree_size(root, cluster_size, dirent_size):
     
    7879        first = 0
    7980       
    80         inf = file(path, "r")
     81        inf = open(path, "rb")
    8182        rd = 0;
    8283        while (rd < size):
     
    9192                prev = empty_cluster
    9293               
    93                 data = inf.read(cluster_size);
     94                data = bytes(inf.read(cluster_size));
    9495                outf.seek(data_start + (empty_cluster - reserved_clusters) * cluster_size)
    9596                outf.write(data)
     
    119120                prev = empty_cluster
    120121               
    121                 data = ''
     122                data = bytes()
    122123                data_len = 0
    123124                while ((i < length) and (data_len < cluster_size)):
     
    342343def usage(prname):
    343344        "Print usage syntax"
    344         print prname + " <PATH> <IMAGE>"
     345        print(prname + " <EXTRA_BYTES> <PATH> <IMAGE>")
    345346
    346347def main():
    347         if (len(sys.argv) < 3):
     348        if (len(sys.argv) < 4):
    348349                usage(sys.argv[0])
    349350                return
    350351       
    351         path = os.path.abspath(sys.argv[1])
     352        if (not sys.argv[1].isdigit()):
     353                print("<EXTRA_BYTES> must be a number")
     354                return
     355       
     356        extra_bytes = int(sys.argv[1])
     357       
     358        path = os.path.abspath(sys.argv[2])
    352359        if (not os.path.isdir(path)):
    353                 print "<PATH> must be a directory"
     360                print("<PATH> must be a directory")
    354361                return
    355362       
     
    363370        reserved_clusters = 2
    364371       
    365         # Make sure the filesystem is large enought for FAT16
    366         size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
    367         while (size / cluster_size < fat16_clusters):
     372        # Make sure the filesystem is large enough for FAT16
     373        size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size + extra_bytes
     374        while (size // cluster_size < fat16_clusters):
    368375                if (cluster_size > sector_size):
    369                         cluster_size /= 2
    370                         size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
     376                        cluster_size = cluster_size // 2
     377                        size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size + extra_bytes
    371378                else:
    372379                        size = fat16_clusters * cluster_size + reserved_clusters * cluster_size
     
    374381        root_size = align_up(root_entries(path) * dirent_size, cluster_size)
    375382       
    376         fat_size = align_up(align_up(size, cluster_size) / cluster_size * fatent_size, sector_size)
    377        
    378         sectors = (cluster_size + fat_count * fat_size + root_size + size) / sector_size
     383        fat_size = align_up(align_up(size, cluster_size) // cluster_size * fatent_size, sector_size)
     384       
     385        sectors = (cluster_size + fat_count * fat_size + root_size + size) // sector_size
    379386        root_start = cluster_size + fat_count * fat_size
    380387        data_start = root_start + root_size
    381388       
    382         outf = file(sys.argv[2], "w")
     389        outf = open(sys.argv[3], "wb")
    383390       
    384391        boot_sector = xstruct.create(BOOT_SECTOR)
    385392        boot_sector.jmp = [0xEB, 0x3C, 0x90]
    386         boot_sector.oem = "MSDOS5.0"
     393        boot_sector.oem = b'MSDOS5.0'
    387394        boot_sector.sector = sector_size
    388         boot_sector.cluster = cluster_size / sector_size
    389         boot_sector.reserved = cluster_size / sector_size
     395        boot_sector.cluster = cluster_size // sector_size
     396        boot_sector.reserved = cluster_size // sector_size
    390397        boot_sector.fats = fat_count
    391         boot_sector.rootdir = root_size / dirent_size
     398        boot_sector.rootdir = root_size // dirent_size
    392399        if (sectors <= 65535):
    393400                boot_sector.sectors = sectors
     
    395402                boot_sector.sectors = 0
    396403        boot_sector.descriptor = 0xF8
    397         boot_sector.fat_sectors = fat_size / sector_size
     404        boot_sector.fat_sectors = fat_size // sector_size
    398405        boot_sector.track_sectors = 63
    399406        boot_sector.heads = 6
     
    407414        boot_sector.extboot_signature = 0x29
    408415        boot_sector.serial = random.randint(0, 0x7fffffff)
    409         boot_sector.label = "HELENOS"
    410         boot_sector.fstype = "FAT16   "
     416        boot_sector.label = b'HELENOS'
     417        boot_sector.fstype = b'FAT16   '
    411418        boot_sector.boot_signature = [0x55, 0xAA]
    412419       
     
    416423       
    417424        # Reserved sectors
    418         for i in range(1, cluster_size / sector_size):
     425        for i in range(1, cluster_size // sector_size):
    419426                outf.write(empty_sector.pack())
    420427       
    421428        # FAT tables
    422429        for i in range(0, fat_count):
    423                 for j in range(0, fat_size / sector_size):
     430                for j in range(0, fat_size // sector_size):
    424431                        outf.write(empty_sector.pack())
    425432       
    426433        # Root directory
    427         for i in range(0, root_size / sector_size):
     434        for i in range(0, root_size // sector_size):
    428435                outf.write(empty_sector.pack())
    429436       
    430437        # Data
    431         for i in range(0, size / sector_size):
     438        for i in range(0, size // sector_size):
    432439                outf.write(empty_sector.pack())
    433440       
    434         fat = array.array('L', [0] * (fat_size / fatent_size))
     441        fat = array.array('L', [0] * (fat_size // fatent_size))
    435442        fat[0] = 0xfff8
    436443        fat[1] = 0xffff
     
    442449        for i in range(0, fat_count):
    443450                outf.seek(cluster_size + i * fat_size)
    444                 for j in range(0, fat_size / fatent_size):
     451                for j in range(0, fat_size // fatent_size):
    445452                        fat_entry.next = fat[j]
    446453                        outf.write(fat_entry.pack())
Note: See TracChangeset for help on using the changeset viewer.