Changes in tools/mkfat.py [c4702798:f4057f5] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/mkfat.py
rc4702798 rf4057f5 27 27 # THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 28 # 29 29 30 """ 30 31 FAT creator … … 45 46 return size 46 47 47 return (( (size / alignment) + 1) * alignment)48 return ((size // alignment) + 1) * alignment 48 49 49 50 def subtree_size(root, cluster_size, dirent_size): … … 78 79 first = 0 79 80 80 inf = file(path, "r")81 inf = open(path, "rb") 81 82 rd = 0; 82 83 while (rd < size): … … 91 92 prev = empty_cluster 92 93 93 data = inf.read(cluster_size);94 data = bytes(inf.read(cluster_size)); 94 95 outf.seek(data_start + (empty_cluster - reserved_clusters) * cluster_size) 95 96 outf.write(data) … … 119 120 prev = empty_cluster 120 121 121 data = ''122 data = bytes() 122 123 data_len = 0 123 124 while ((i < length) and (data_len < cluster_size)): … … 342 343 def usage(prname): 343 344 "Print usage syntax" 344 print prname + " <PATH> <IMAGE>"345 print(prname + " <EXTRA_BYTES> <PATH> <IMAGE>") 345 346 346 347 def main(): 347 if (len(sys.argv) < 3):348 if (len(sys.argv) < 4): 348 349 usage(sys.argv[0]) 349 350 return 350 351 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]) 352 359 if (not os.path.isdir(path)): 353 print "<PATH> must be a directory"360 print("<PATH> must be a directory") 354 361 return 355 362 … … 363 370 reserved_clusters = 2 364 371 365 # Make sure the filesystem is large enough tfor FAT16366 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): 368 375 if (cluster_size > sector_size): 369 cluster_size /=2370 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 371 378 else: 372 379 size = fat16_clusters * cluster_size + reserved_clusters * cluster_size … … 374 381 root_size = align_up(root_entries(path) * dirent_size, cluster_size) 375 382 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_size383 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 379 386 root_start = cluster_size + fat_count * fat_size 380 387 data_start = root_start + root_size 381 388 382 outf = file(sys.argv[2], "w")389 outf = open(sys.argv[3], "wb") 383 390 384 391 boot_sector = xstruct.create(BOOT_SECTOR) 385 392 boot_sector.jmp = [0xEB, 0x3C, 0x90] 386 boot_sector.oem = "MSDOS5.0"393 boot_sector.oem = b'MSDOS5.0' 387 394 boot_sector.sector = sector_size 388 boot_sector.cluster = cluster_size / sector_size389 boot_sector.reserved = cluster_size / sector_size395 boot_sector.cluster = cluster_size // sector_size 396 boot_sector.reserved = cluster_size // sector_size 390 397 boot_sector.fats = fat_count 391 boot_sector.rootdir = root_size / dirent_size398 boot_sector.rootdir = root_size // dirent_size 392 399 if (sectors <= 65535): 393 400 boot_sector.sectors = sectors … … 395 402 boot_sector.sectors = 0 396 403 boot_sector.descriptor = 0xF8 397 boot_sector.fat_sectors = fat_size / sector_size404 boot_sector.fat_sectors = fat_size // sector_size 398 405 boot_sector.track_sectors = 63 399 406 boot_sector.heads = 6 … … 407 414 boot_sector.extboot_signature = 0x29 408 415 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 ' 411 418 boot_sector.boot_signature = [0x55, 0xAA] 412 419 … … 416 423 417 424 # Reserved sectors 418 for i in range(1, cluster_size / sector_size):425 for i in range(1, cluster_size // sector_size): 419 426 outf.write(empty_sector.pack()) 420 427 421 428 # FAT tables 422 429 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): 424 431 outf.write(empty_sector.pack()) 425 432 426 433 # Root directory 427 for i in range(0, root_size / sector_size):434 for i in range(0, root_size // sector_size): 428 435 outf.write(empty_sector.pack()) 429 436 430 437 # Data 431 for i in range(0, size / sector_size):438 for i in range(0, size // sector_size): 432 439 outf.write(empty_sector.pack()) 433 440 434 fat = array.array('L', [0] * (fat_size / fatent_size))441 fat = array.array('L', [0] * (fat_size // fatent_size)) 435 442 fat[0] = 0xfff8 436 443 fat[1] = 0xffff … … 442 449 for i in range(0, fat_count): 443 450 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): 445 452 fat_entry.next = fat[j] 446 453 outf.write(fat_entry.pack())
Note:
See TracChangeset
for help on using the changeset viewer.