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


Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • tools/mkfat.py

    rf4057f5 rc4702798  
    2727# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    2828#
    29 
    3029"""
    3130FAT creator
     
    4645                return size
    4746       
    48         return ((size // alignment) + 1) * alignment
     47        return (((size / alignment) + 1) * alignment)
    4948
    5049def subtree_size(root, cluster_size, dirent_size):
     
    7978        first = 0
    8079       
    81         inf = open(path, "rb")
     80        inf = file(path, "r")
    8281        rd = 0;
    8382        while (rd < size):
     
    9291                prev = empty_cluster
    9392               
    94                 data = bytes(inf.read(cluster_size));
     93                data = inf.read(cluster_size);
    9594                outf.seek(data_start + (empty_cluster - reserved_clusters) * cluster_size)
    9695                outf.write(data)
     
    120119                prev = empty_cluster
    121120               
    122                 data = bytes()
     121                data = ''
    123122                data_len = 0
    124123                while ((i < length) and (data_len < cluster_size)):
     
    343342def usage(prname):
    344343        "Print usage syntax"
    345         print(prname + " <EXTRA_BYTES> <PATH> <IMAGE>")
     344        print prname + " <PATH> <IMAGE>"
    346345
    347346def main():
    348         if (len(sys.argv) < 4):
     347        if (len(sys.argv) < 3):
    349348                usage(sys.argv[0])
    350349                return
    351350       
    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])
     351        path = os.path.abspath(sys.argv[1])
    359352        if (not os.path.isdir(path)):
    360                 print("<PATH> must be a directory")
     353                print "<PATH> must be a directory"
    361354                return
    362355       
     
    370363        reserved_clusters = 2
    371364       
    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):
     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):
    375368                if (cluster_size > sector_size):
    376                         cluster_size = cluster_size // 2
    377                         size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size + extra_bytes
     369                        cluster_size /= 2
     370                        size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size
    378371                else:
    379372                        size = fat16_clusters * cluster_size + reserved_clusters * cluster_size
     
    381374        root_size = align_up(root_entries(path) * dirent_size, cluster_size)
    382375       
    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
     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
    386379        root_start = cluster_size + fat_count * fat_size
    387380        data_start = root_start + root_size
    388381       
    389         outf = open(sys.argv[3], "wb")
     382        outf = file(sys.argv[2], "w")
    390383       
    391384        boot_sector = xstruct.create(BOOT_SECTOR)
    392385        boot_sector.jmp = [0xEB, 0x3C, 0x90]
    393         boot_sector.oem = b'MSDOS5.0'
     386        boot_sector.oem = "MSDOS5.0"
    394387        boot_sector.sector = sector_size
    395         boot_sector.cluster = cluster_size // sector_size
    396         boot_sector.reserved = cluster_size // sector_size
     388        boot_sector.cluster = cluster_size / sector_size
     389        boot_sector.reserved = cluster_size / sector_size
    397390        boot_sector.fats = fat_count
    398         boot_sector.rootdir = root_size // dirent_size
     391        boot_sector.rootdir = root_size / dirent_size
    399392        if (sectors <= 65535):
    400393                boot_sector.sectors = sectors
     
    402395                boot_sector.sectors = 0
    403396        boot_sector.descriptor = 0xF8
    404         boot_sector.fat_sectors = fat_size // sector_size
     397        boot_sector.fat_sectors = fat_size / sector_size
    405398        boot_sector.track_sectors = 63
    406399        boot_sector.heads = 6
     
    414407        boot_sector.extboot_signature = 0x29
    415408        boot_sector.serial = random.randint(0, 0x7fffffff)
    416         boot_sector.label = b'HELENOS'
    417         boot_sector.fstype = b'FAT16   '
     409        boot_sector.label = "HELENOS"
     410        boot_sector.fstype = "FAT16   "
    418411        boot_sector.boot_signature = [0x55, 0xAA]
    419412       
     
    423416       
    424417        # Reserved sectors
    425         for i in range(1, cluster_size // sector_size):
     418        for i in range(1, cluster_size / sector_size):
    426419                outf.write(empty_sector.pack())
    427420       
    428421        # FAT tables
    429422        for i in range(0, fat_count):
    430                 for j in range(0, fat_size // sector_size):
     423                for j in range(0, fat_size / sector_size):
    431424                        outf.write(empty_sector.pack())
    432425       
    433426        # Root directory
    434         for i in range(0, root_size // sector_size):
     427        for i in range(0, root_size / sector_size):
    435428                outf.write(empty_sector.pack())
    436429       
    437430        # Data
    438         for i in range(0, size // sector_size):
     431        for i in range(0, size / sector_size):
    439432                outf.write(empty_sector.pack())
    440433       
    441         fat = array.array('L', [0] * (fat_size // fatent_size))
     434        fat = array.array('L', [0] * (fat_size / fatent_size))
    442435        fat[0] = 0xfff8
    443436        fat[1] = 0xffff
     
    449442        for i in range(0, fat_count):
    450443                outf.seek(cluster_size + i * fat_size)
    451                 for j in range(0, fat_size // fatent_size):
     444                for j in range(0, fat_size / fatent_size):
    452445                        fat_entry.next = fat[j]
    453446                        outf.write(fat_entry.pack())
Note: See TracChangeset for help on using the changeset viewer.