minix utils: make a message easier to understand; small tweaks

This commit is contained in:
Denis Vlasenko 2007-02-06 00:36:53 +00:00
parent f885c543da
commit dc485c9da6
2 changed files with 25 additions and 20 deletions

View File

@ -174,13 +174,16 @@ static char *zone_map;
static unsigned char *inode_count; static unsigned char *inode_count;
static unsigned char *zone_count; static unsigned char *zone_count;
static int bit(char *a, unsigned i) static int bit(const char *a, unsigned i)
{ {
return (a[i >> 3] & (1<<(i & 7))) != 0; return (a[i >> 3] & (1<<(i & 7)));
} }
#define inode_in_use(x) (bit(inode_map,(x))) /* setbit/clrbit are supplied by sys/param.h */
/* Note: do not assume 0/1, it is 0/nonzero */
#define zone_in_use(x) (bit(zone_map,(x)-FIRSTZONE+1)) #define zone_in_use(x) (bit(zone_map,(x)-FIRSTZONE+1))
#define inode_in_use(x) (bit(inode_map,(x)))
#define mark_inode(x) (setbit(inode_map,(x)),changed=1) #define mark_inode(x) (setbit(inode_map,(x)),changed=1)
#define unmark_inode(x) (clrbit(inode_map,(x)),changed=1) #define unmark_inode(x) (clrbit(inode_map,(x)),changed=1)
@ -1109,7 +1112,8 @@ static void check_counts(void)
} }
if (Inode1[i].i_nlinks != inode_count[i]) { if (Inode1[i].i_nlinks != inode_count[i]) {
printf("Inode %d (mode=%07o), i_nlinks=%d, counted=%d. ", printf("Inode %d (mode=%07o), i_nlinks=%d, counted=%d. ",
i, Inode1[i].i_mode, Inode1[i].i_nlinks, inode_count[i]); i, Inode1[i].i_mode, Inode1[i].i_nlinks,
inode_count[i]);
if (ask("Set i_nlinks to count", 1)) { if (ask("Set i_nlinks to count", 1)) {
Inode1[i].i_nlinks = inode_count[i]; Inode1[i].i_nlinks = inode_count[i];
changed = 1; changed = 1;
@ -1117,7 +1121,7 @@ static void check_counts(void)
} }
} }
for (i = FIRSTZONE; i < ZONES; i++) { for (i = FIRSTZONE; i < ZONES; i++) {
if (zone_in_use(i) == zone_count[i]) if ((zone_in_use(i) != 0) == zone_count[i])
continue; continue;
if (!zone_count[i]) { if (!zone_count[i]) {
if (bad_zone(i)) if (bad_zone(i))
@ -1160,8 +1164,8 @@ static void check_counts2(void)
} }
if (Inode2[i].i_nlinks != inode_count[i]) { if (Inode2[i].i_nlinks != inode_count[i]) {
printf("Inode %d (mode=%07o), i_nlinks=%d, counted=%d. ", printf("Inode %d (mode=%07o), i_nlinks=%d, counted=%d. ",
i, Inode2[i].i_mode, Inode2[i].i_nlinks, i, Inode2[i].i_mode, Inode2[i].i_nlinks,
inode_count[i]); inode_count[i]);
if (ask("Set i_nlinks to count", 1)) { if (ask("Set i_nlinks to count", 1)) {
Inode2[i].i_nlinks = inode_count[i]; Inode2[i].i_nlinks = inode_count[i];
changed = 1; changed = 1;
@ -1169,7 +1173,7 @@ static void check_counts2(void)
} }
} }
for (i = FIRSTZONE; i < ZONES; i++) { for (i = FIRSTZONE; i < ZONES; i++) {
if (zone_in_use(i) == zone_count[i]) if ((zone_in_use(i) != 0) == zone_count[i])
continue; continue;
if (!zone_count[i]) { if (!zone_count[i]) {
if (bad_zone(i)) if (bad_zone(i))

View File

@ -147,9 +147,11 @@ static int bit(const char* a, unsigned i)
return a[i >> 3] & (1<<(i & 7)); return a[i >> 3] & (1<<(i & 7));
} }
/* setbit/clrbit are supplied by sys/param.h */
/* Note: do not assume 0/1, it is 0/nonzero */ /* Note: do not assume 0/1, it is 0/nonzero */
#define inode_in_use(x) bit(inode_map,(x))
#define zone_in_use(x) bit(zone_map,(x)-SB_FIRSTZONE+1) #define zone_in_use(x) bit(zone_map,(x)-SB_FIRSTZONE+1)
/*#define inode_in_use(x) bit(inode_map,(x))*/
#define mark_inode(x) setbit(inode_map,(x)) #define mark_inode(x) setbit(inode_map,(x))
#define unmark_inode(x) clrbit(inode_map,(x)) #define unmark_inode(x) clrbit(inode_map,(x))
@ -507,11 +509,11 @@ static void setup_tables(void)
/* /*
* Perform a test of a block; return the number of * Perform a test of a block; return the number of
* blocks readable/writable. * blocks readable.
*/ */
static long do_check(char *buffer, int try, unsigned current_block) static size_t do_check(char *buffer, size_t try, unsigned current_block)
{ {
long got; ssize_t got;
/* Seek to the correct loc. */ /* Seek to the correct loc. */
msg_eol = "seek failed during testing of blocks"; msg_eol = "seek failed during testing of blocks";
@ -522,11 +524,11 @@ static long do_check(char *buffer, int try, unsigned current_block)
got = read(dev_fd, buffer, try * BLOCK_SIZE); got = read(dev_fd, buffer, try * BLOCK_SIZE);
if (got < 0) if (got < 0)
got = 0; got = 0;
if (got & (BLOCK_SIZE - 1)) { try = ((size_t)got) / BLOCK_SIZE;
printf("Weird values in do_check: probably bugs\n");
} if (got & (BLOCK_SIZE - 1))
got /= BLOCK_SIZE; fprintf(stderr, "Short read at block %u\n", current_block + try);
return got; return try;
} }
static unsigned currently_testing; static unsigned currently_testing;
@ -545,7 +547,7 @@ static void alarm_intr(int alnum)
static void check_blocks(void) static void check_blocks(void)
{ {
int try, got; size_t try, got;
/* buffer[] was the biggest static in entire bbox */ /* buffer[] was the biggest static in entire bbox */
char *buffer = xmalloc(BLOCK_SIZE * TEST_BUFFER_BLOCKS); char *buffer = xmalloc(BLOCK_SIZE * TEST_BUFFER_BLOCKS);
@ -620,8 +622,7 @@ int mkfs_minix_main(int argc, char **argv)
#if ENABLE_FEATURE_MINIX2 #if ENABLE_FEATURE_MINIX2
version2 = 1; version2 = 1;
#else #else
bb_error_msg_and_die("%s: not compiled with minix v2 support", bb_error_msg_and_die("not compiled with minix v2 support");
device_name);
#endif #endif
} }