mirror of
https://github.com/sheumann/hush.git
synced 2025-01-09 09:31:07 +00:00
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 */
|
# define BLKGETSIZE _IO(0x12,96) /* return device size */
|
||||||
#endif
|
#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)
|
static void write_tables(void)
|
||||||
{
|
{
|
||||||
/* Mark the superblock valid. */
|
/* Mark the superblock valid. */
|
||||||
@ -636,7 +588,6 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
{
|
{
|
||||||
unsigned opt;
|
unsigned opt;
|
||||||
char *tmp;
|
char *tmp;
|
||||||
struct stat statbuf;
|
|
||||||
char *str_i;
|
char *str_i;
|
||||||
char *listfile = NULL;
|
char *listfile = NULL;
|
||||||
|
|
||||||
@ -673,13 +624,17 @@ int mkfs_minix_main(int argc UNUSED_PARAM, char **argv)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
G.device_name = *argv++;
|
G.device_name = argv[0];
|
||||||
if (!G.device_name)
|
if (!G.device_name)
|
||||||
bb_show_usage();
|
bb_show_usage();
|
||||||
if (*argv)
|
|
||||||
G.total_blocks = xatou32(*argv);
|
/* Check if it is mounted */
|
||||||
else
|
if (find_mount_point(G.device_name, 0))
|
||||||
G.total_blocks = get_size(G.device_name) / 1024;
|
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)
|
if (G.total_blocks < 10)
|
||||||
bb_error_msg_and_die("must have at least 10 blocks");
|
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;
|
G.magic = MINIX2_SUPER_MAGIC;
|
||||||
} else if (G.total_blocks > 65535)
|
} else if (G.total_blocks > 65535)
|
||||||
G.total_blocks = 65535;
|
G.total_blocks = 65535;
|
||||||
|
#if 0
|
||||||
/* Check if it is mounted */
|
struct stat statbuf;
|
||||||
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);
|
|
||||||
xfstat(dev_fd, &statbuf, G.device_name);
|
xfstat(dev_fd, &statbuf, G.device_name);
|
||||||
|
/* why? */
|
||||||
if (!S_ISBLK(statbuf.st_mode))
|
if (!S_ISBLK(statbuf.st_mode))
|
||||||
opt &= ~1; // clear -c (check)
|
opt &= ~1; // clear -c (check)
|
||||||
|
#if 0
|
||||||
/* I don't know why someone has special code to prevent mkfs.minix
|
/* I don't know why someone has special code to prevent mkfs.minix
|
||||||
* on IDE devices. Why IDE but not SCSI, etc?... */
|
* on IDE devices. Why IDE but not SCSI, etc?... */
|
||||||
#if 0
|
|
||||||
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
|
else if (statbuf.st_rdev == 0x0300 || statbuf.st_rdev == 0x0340)
|
||||||
/* what is this? */
|
/* what is this? */
|
||||||
bb_error_msg_and_die("will not try "
|
bb_error_msg_and_die("will not try "
|
||||||
"to make filesystem on '%s'", G.device_name);
|
"to make filesystem on '%s'", G.device_name);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
tmp = G.root_block;
|
tmp = G.root_block;
|
||||||
*(short *) tmp = 1;
|
*(short *) tmp = 1;
|
||||||
strcpy(tmp + 2, ".");
|
strcpy(tmp + 2, ".");
|
||||||
|
Loading…
Reference in New Issue
Block a user