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:
parent
4424dfd69b
commit
7c6f2d4207
@ -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, ".");
|
||||
|
Loading…
Reference in New Issue
Block a user