Changes in tools/mkfat.py [3c80f2b:432f68a] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
tools/mkfat.py
r3c80f2b r432f68a 46 46 return size 47 47 48 return (( (size / alignment) + 1) * alignment)48 return ((size // alignment) + 1) * alignment 49 49 50 50 def subtree_size(root, cluster_size, dirent_size): … … 79 79 first = 0 80 80 81 inf = file(path, "r")81 inf = open(path, "rb") 82 82 rd = 0; 83 83 while (rd < size): … … 92 92 prev = empty_cluster 93 93 94 data = inf.read(cluster_size);94 data = bytes(inf.read(cluster_size)); 95 95 outf.seek(data_start + (empty_cluster - reserved_clusters) * cluster_size) 96 96 outf.write(data) … … 120 120 prev = empty_cluster 121 121 122 data = ''122 data = bytes() 123 123 data_len = 0 124 124 while ((i < length) and (data_len < cluster_size)): … … 211 211 dir_entry = xstruct.create(DIR_ENTRY) 212 212 213 dir_entry.name = mangle_fname(name) 214 dir_entry.ext = mangle_ext(name) 213 dir_entry.name = mangle_fname(name).encode('ascii') 214 dir_entry.ext = mangle_ext(name).encode('ascii') 215 215 216 216 if (directory): … … 239 239 240 240 dir_entry.signature = 0x2e 241 dir_entry.name = ' '242 dir_entry.ext = ' '241 dir_entry.name = b' ' 242 dir_entry.ext = b' ' 243 243 dir_entry.attr = 0x10 244 244 … … 258 258 259 259 dir_entry.signature = [0x2e, 0x2e] 260 dir_entry.name = ' '261 dir_entry.ext = ' '260 dir_entry.name = b' ' 261 dir_entry.ext = b' ' 262 262 dir_entry.attr = 0x10 263 263 … … 343 343 def usage(prname): 344 344 "Print usage syntax" 345 print prname + " <PATH> <IMAGE>"345 print(prname + " <EXTRA_BYTES> <PATH> <IMAGE>") 346 346 347 347 def main(): 348 if (len(sys.argv) < 3):348 if (len(sys.argv) < 4): 349 349 usage(sys.argv[0]) 350 350 return 351 351 352 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]) 353 359 if (not os.path.isdir(path)): 354 print "<PATH> must be a directory"360 print("<PATH> must be a directory") 355 361 return 356 362 … … 364 370 reserved_clusters = 2 365 371 366 # Make sure the filesystem is large enough tfor FAT16367 size = subtree_size(path, cluster_size, dirent_size) + reserved_clusters * cluster_size 368 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): 369 375 if (cluster_size > sector_size): 370 cluster_size /=2371 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 372 378 else: 373 379 size = fat16_clusters * cluster_size + reserved_clusters * cluster_size … … 375 381 root_size = align_up(root_entries(path) * dirent_size, cluster_size) 376 382 377 fat_size = align_up(align_up(size, cluster_size) / cluster_size * fatent_size, sector_size)378 379 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 380 386 root_start = cluster_size + fat_count * fat_size 381 387 data_start = root_start + root_size 382 388 383 outf = file(sys.argv[2], "w")389 outf = open(sys.argv[3], "wb") 384 390 385 391 boot_sector = xstruct.create(BOOT_SECTOR) 386 392 boot_sector.jmp = [0xEB, 0x3C, 0x90] 387 boot_sector.oem = "MSDOS5.0"393 boot_sector.oem = b'MSDOS5.0' 388 394 boot_sector.sector = sector_size 389 boot_sector.cluster = cluster_size / sector_size390 boot_sector.reserved = cluster_size / sector_size395 boot_sector.cluster = cluster_size // sector_size 396 boot_sector.reserved = cluster_size // sector_size 391 397 boot_sector.fats = fat_count 392 boot_sector.rootdir = root_size / dirent_size398 boot_sector.rootdir = root_size // dirent_size 393 399 if (sectors <= 65535): 394 400 boot_sector.sectors = sectors … … 396 402 boot_sector.sectors = 0 397 403 boot_sector.descriptor = 0xF8 398 boot_sector.fat_sectors = fat_size / sector_size404 boot_sector.fat_sectors = fat_size // sector_size 399 405 boot_sector.track_sectors = 63 400 406 boot_sector.heads = 6 … … 408 414 boot_sector.extboot_signature = 0x29 409 415 boot_sector.serial = random.randint(0, 0x7fffffff) 410 boot_sector.label = "HELENOS"411 boot_sector.fstype = "FAT16 "416 boot_sector.label = b'HELENOS' 417 boot_sector.fstype = b'FAT16 ' 412 418 boot_sector.boot_signature = [0x55, 0xAA] 413 419 … … 417 423 418 424 # Reserved sectors 419 for i in range(1, cluster_size / sector_size):425 for i in range(1, cluster_size // sector_size): 420 426 outf.write(empty_sector.pack()) 421 427 422 428 # FAT tables 423 429 for i in range(0, fat_count): 424 for j in range(0, fat_size / sector_size):430 for j in range(0, fat_size // sector_size): 425 431 outf.write(empty_sector.pack()) 426 432 427 433 # Root directory 428 for i in range(0, root_size / sector_size):434 for i in range(0, root_size // sector_size): 429 435 outf.write(empty_sector.pack()) 430 436 431 437 # Data 432 for i in range(0, size / sector_size):438 for i in range(0, size // sector_size): 433 439 outf.write(empty_sector.pack()) 434 440 435 fat = array.array('L', [0] * (fat_size / fatent_size))441 fat = array.array('L', [0] * (fat_size // fatent_size)) 436 442 fat[0] = 0xfff8 437 443 fat[1] = 0xffff … … 443 449 for i in range(0, fat_count): 444 450 outf.seek(cluster_size + i * fat_size) 445 for j in range(0, fat_size / fatent_size):451 for j in range(0, fat_size // fatent_size): 446 452 fat_entry.next = fat[j] 447 453 outf.write(fat_entry.pack())
Note:
See TracChangeset
for help on using the changeset viewer.