another -90 bytes. That #define is **evil**

This commit is contained in:
Denis Vlasenko 2006-11-29 22:47:42 +00:00
parent 66b86c6902
commit 016a82e279

View File

@ -503,8 +503,10 @@ static void make_root_inode2(void)
static void setup_tables(void) static void setup_tables(void)
{ {
int i;
unsigned long inodes; unsigned long inodes;
unsigned norm_firstzone;
uint16_t sb_zmaps;
int i;
memset(super_block_buffer, 0, BLOCK_SIZE); memset(super_block_buffer, 0, BLOCK_SIZE);
memset(boot_block_buffer, 0, 512); memset(boot_block_buffer, 0, 512);
@ -539,19 +541,21 @@ static void setup_tables(void)
* dd if=/dev/zero of=test.fs count=10 bs=1024 * dd if=/dev/zero of=test.fs count=10 bs=1024
* mkfs.minix -i 200 test.fs * mkfs.minix -i 200 test.fs
*/ */
/* This code is not insane: NORM_FIRSTZONE is not a constant, */ /* This code is not insane: NORM_FIRSTZONE is not a constant,
/* it uses previous value of SB_ZMAPS inside */ * it is calculated from SB_INODES, SB_IMAPS and SB_ZMAPS */
i = 999; i = 999;
SB_ZMAPS = 0; SB_ZMAPS = 0;
do { do {
uint16_t t = div_roundup(total_blocks - NORM_FIRSTZONE + 1, BITS_PER_BLOCK); norm_firstzone = NORM_FIRSTZONE;
if (SB_ZMAPS == t) goto got_it; sb_zmaps = div_roundup(total_blocks - norm_firstzone + 1, BITS_PER_BLOCK);
SB_ZMAPS = t; if (SB_ZMAPS == sb_zmaps) goto got_it;
SB_ZMAPS = sb_zmaps;
/* new SB_ZMAPS, need to recalc NORM_FIRSTZONE */
} while (--i); } while (--i);
bb_error_msg_and_die("incompatible size/inode count, try different -i N"); bb_error_msg_and_die("incompatible size/inode count, try different -i N");
got_it: got_it:
SB_FIRSTZONE = NORM_FIRSTZONE; SB_FIRSTZONE = norm_firstzone;
inode_map = xmalloc(SB_IMAPS * BLOCK_SIZE); inode_map = xmalloc(SB_IMAPS * BLOCK_SIZE);
zone_map = xmalloc(SB_ZMAPS * BLOCK_SIZE); zone_map = xmalloc(SB_ZMAPS * BLOCK_SIZE);
memset(inode_map, 0xff, SB_IMAPS * BLOCK_SIZE); memset(inode_map, 0xff, SB_IMAPS * BLOCK_SIZE);
@ -563,7 +567,7 @@ static void setup_tables(void)
inode_buffer = xzalloc(INODE_BUFFER_SIZE); inode_buffer = xzalloc(INODE_BUFFER_SIZE);
printf("%ld inodes\n", (long)SB_INODES); printf("%ld inodes\n", (long)SB_INODES);
printf("%ld blocks\n", (long)SB_ZONES); printf("%ld blocks\n", (long)SB_ZONES);
printf("Firstdatazone=%ld (%ld)\n", (long)SB_FIRSTZONE, (long)NORM_FIRSTZONE); printf("Firstdatazone=%ld (%ld)\n", (long)SB_FIRSTZONE, (long)norm_firstzone);
printf("Zonesize=%d\n", BLOCK_SIZE << SB_ZONE_SIZE); printf("Zonesize=%d\n", BLOCK_SIZE << SB_ZONE_SIZE);
printf("Maxsize=%ld\n", (long)SB_MAXSIZE); printf("Maxsize=%ld\n", (long)SB_MAXSIZE);
} }