mkfs_minix: use get_volume_size_in_bytes instead of local version

Hopefully this also closes 4730

function                                             old     new   delta
valid_offset                                          55       -     -55
mkfs_minix_main                                     2925    2674    -251
------------------------------------------------------------------------------
(add/remove: 0/1 grow/shrink: 0/1 up/down: 0/-306)           Total: -306 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko 2013-03-18 02:26:58 +01:00
parent 4424dfd69b
commit 7c6f2d4207

View File

@ -196,54 +196,6 @@ static void minix_clrbit(char *a, unsigned i)
# define BLKGETSIZE _IO(0x12,96) /* return device size */
#endif
static long valid_offset(int fd, int offset)
{
char ch;
if (lseek(fd, offset, SEEK_SET) < 0)
return 0;
if (read(fd, &ch, 1) < 1)
return 0;
return 1;
}
static int count_blocks(int fd)
{
int high, low;
low = 0;
for (high = 1; valid_offset(fd, high); high *= 2)
low = high;
while (low < high - 1) {
const int mid = (low + high) / 2;
if (valid_offset(fd, mid))
low = mid;
else
high = mid;
}
valid_offset(fd, 0);
return (low + 1);
}
static int get_size(const char *file)
{
int fd;
long size;
fd = xopen(file, O_RDWR);
if (ioctl(fd, BLKGETSIZE, &size) >= 0) {
close(fd);
return (size * 512);
}
size = count_blocks(fd);
close(fd);
return size;
}
static void write_tables(void)
{
/* Mark the superblock valid. */
@ -636,7 +588,6 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
{
unsigned opt;
char *tmp;
struct stat statbuf;
char *str_i;
char *listfile = NULL;
@ -673,13 +624,17 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
#endif
}
G.device_name = *argv++;
G.device_name = argv[0];
if (!G.device_name)
bb_show_usage();
if (*argv)
G.total_blocks = xatou32(*argv);
else
G.total_blocks = get_size(G.device_name) / 1024;
/* Check if it is mounted */
if (find_mount_point(G.device_name, 0))
bb_error_msg_and_die("can't format mounted filesystem");
xmove_fd(xopen(G.device_name, O_RDWR), dev_fd);
G.total_blocks = get_volume_size_in_bytes(dev_fd, argv[1], 1024, /*extend:*/ 1) / 1024;
if (G.total_blocks < 10)
bb_error_msg_and_die("must have at least 10 blocks");
@ -690,25 +645,21 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
G.magic = MINIX2_SUPER_MAGIC;
} else if (G.total_blocks > 65535)
G.total_blocks = 65535;
/* Check if it is mounted */
if (find_mount_point(G.device_name, 0))
bb_error_msg_and_die("can't format mounted filesystem");
xmove_fd(xopen(G.device_name, O_RDWR), dev_fd);
#if 0
struct stat statbuf;
xfstat(dev_fd, &statbuf, G.device_name);
/* why? */
if (!S_ISBLK(statbuf.st_mode))
opt &= ~1; // clear -c (check)
#if 0
/* I don't know why someone has special code to prevent mkfs.minix
* on IDE devices. Why IDE but not SCSI, etc?... */
#if 0
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
/* what is this? */
bb_error_msg_and_die("will not try "
"to make filesystem on '%s'", G.device_name);
#endif
#endif
tmp = G.root_block;
*(short *) tmp = 1;
strcpy(tmp + 2, ".");