import most of e2fsprogs 1.38 updates

This commit is contained in:
Mike Frysinger 2006-03-08 07:03:27 +00:00
parent 0f2dd9f4eb
commit 874af85d5e
22 changed files with 435 additions and 199 deletions

View File

@ -55,6 +55,8 @@ extern int blkid_get_cache(blkid_cache *cache, const char *filename);
extern const char *blkid_dev_devname(blkid_dev dev);
extern blkid_dev_iterate blkid_dev_iterate_begin(blkid_cache cache);
extern int blkid_dev_set_search(blkid_dev_iterate iter,
char *search_type, char *search_value);
extern int blkid_dev_next(blkid_dev_iterate iterate, blkid_dev *dev);
extern void blkid_dev_iterate_end(blkid_dev_iterate iterate);
@ -63,6 +65,7 @@ extern char *blkid_devno_to_devname(dev_t devno);
/* devname.c */
extern int blkid_probe_all(blkid_cache cache);
extern int blkid_probe_all_new(blkid_cache cache);
extern blkid_dev blkid_get_dev(blkid_cache cache, const char *devname,
int flags);
@ -86,7 +89,8 @@ extern blkid_tag_iterate blkid_tag_iterate_begin(blkid_dev dev);
extern int blkid_tag_next(blkid_tag_iterate iterate,
const char **type, const char **value);
extern void blkid_tag_iterate_end(blkid_tag_iterate iterate);
extern int blkid_dev_has_tag(blkid_dev dev, const char *type,
const char *value);
extern blkid_dev blkid_find_dev_with_tag(blkid_cache cache,
const char *type,
const char *value);

View File

@ -147,65 +147,8 @@ extern int blkid_debug_mask;
#endif
#ifdef CONFIG_BLKID_DEBUG
static inline void DEB_DUMP_TAG(int mask, blkid_tag tag)
{
if (!(mask & blkid_debug_mask))
return;
if (!tag) {
printf(" tag: NULL\n");
return;
}
printf(" tag: %s=\"%s\"\n", tag->bit_name, tag->bit_val);
}
static inline void DEB_DUMP_DEV(int mask, blkid_dev dev)
{
struct list_head *p;
if (!(mask & blkid_debug_mask))
return;
if (!dev) {
printf(" dev: NULL\n");
return;
}
printf(" dev: name = %s\n", dev->bid_name);
printf(" dev: DEVNO=\"0x%0Lx\"\n", dev->bid_devno);
printf(" dev: TIME=\"%lu\"\n", dev->bid_time);
printf(" dev: PRI=\"%d\"\n", dev->bid_pri);
printf(" dev: flags = 0x%08X\n", dev->bid_flags);
list_for_each(p, &dev->bid_tags) {
blkid_tag tag = list_entry(p, struct blkid_struct_tag, bit_tags);
DEB_DUMP_TAG(mask, tag);
}
printf("\n");
}
static inline void DEB_DUMP_CACHE(int mask, blkid_cache cache)
{
struct list_head *p;
if (!cache || !(mask & blkid_debug_mask)) {
printf("cache: NULL\n");
return;
}
printf("cache: time = %lu\n", cache->bic_time);
printf("cache: flags = 0x%08X\n", cache->bic_flags);
list_for_each(p, &cache->bic_devs) {
blkid_dev dev = list_entry(p, struct blkid_struct_dev, bid_devs);
DEB_DUMP_DEV(mask, dev);
}
}
#else
#define DEB_DUMP_TAG(mask, tag) do {} while (0)
#define DEB_DUMP_DEV(mask, dev) do {} while (0)
#define DEB_DUMP_CACHE(mask, cache) do {} while (0)
extern void blkid_debug_dump_dev(blkid_dev dev);
extern void blkid_debug_dump_tag(blkid_tag tag);
#endif
/* lseek.c */

View File

@ -63,7 +63,7 @@ void blkid_put_cache(blkid_cache cache)
DBG(DEBUG_CACHE, printf("freeing cache struct\n"));
/* DEB_DUMP_CACHE(cache); */
/* DBG(DEBUG_CACHE, blkid_debug_dump_cache(cache)); */
while (!list_empty(&cache->bic_devs)) {
blkid_dev dev = list_entry(cache->bic_devs.next,

View File

@ -35,7 +35,7 @@ void blkid_free_dev(blkid_dev dev)
DBG(DEBUG_DEV,
printf(" freeing dev %s (%s)\n", dev->bid_name, dev->bid_type));
DEB_DUMP_DEV(DEBUG_DEV, dev);
DBG(DEBUG_DEV, blkid_debug_dump_dev(dev));
list_del(&dev->bid_devs);
while (!list_empty(&dev->bid_tags)) {
@ -57,6 +57,34 @@ const char *blkid_dev_devname(blkid_dev dev)
return dev->bid_name;
}
#ifdef CONFIG_BLKID_DEBUG
void blkid_debug_dump_dev(blkid_dev dev)
{
struct list_head *p;
if (!dev) {
printf(" dev: NULL\n");
return;
}
printf(" dev: name = %s\n", dev->bid_name);
printf(" dev: DEVNO=\"0x%0llx\"\n", dev->bid_devno);
printf(" dev: TIME=\"%lu\"\n", dev->bid_time);
printf(" dev: PRI=\"%d\"\n", dev->bid_pri);
printf(" dev: flags = 0x%08X\n", dev->bid_flags);
list_for_each(p, &dev->bid_tags) {
blkid_tag tag = list_entry(p, struct blkid_struct_tag, bit_tags);
if (tag)
printf(" tag: %s=\"%s\"\n", tag->bit_name,
tag->bit_val);
else
printf(" tag: NULL\n");
}
printf("\n");
}
#endif
/*
* dev iteration routines for the public libblkid interface.
*
@ -114,3 +142,72 @@ void blkid_dev_iterate_end(blkid_dev_iterate iter)
free(iter);
}
#ifdef TEST_PROGRAM
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#else
extern char *optarg;
extern int optind;
#endif
void usage(char *prog)
{
fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask]\n", prog);
fprintf(stderr, "\tList all devices and exit\n", prog);
exit(1);
}
int main(int argc, char **argv)
{
blkid_dev_iterate iter;
blkid_cache cache = NULL;
blkid_dev dev;
int c, ret;
char *tmp;
char *file = NULL;
char *search_type = NULL;
char *search_value = NULL;
while ((c = getopt (argc, argv, "m:f:")) != EOF)
switch (c) {
case 'f':
file = optarg;
break;
case 'm':
blkid_debug_mask = strtoul (optarg, &tmp, 0);
if (*tmp) {
fprintf(stderr, "Invalid debug mask: %d\n",
optarg);
exit(1);
}
break;
case '?':
usage(argv[0]);
}
if (argc >= optind+2) {
search_type = argv[optind];
search_value = argv[optind+1];
optind += 2;
}
if (argc != optind)
usage(argv[0]);
if ((ret = blkid_get_cache(&cache, file)) != 0) {
fprintf(stderr, "%s: error creating cache (%d)\n",
argv[0], ret);
exit(1);
}
iter = blkid_dev_iterate_begin(cache);
if (search_type)
blkid_dev_set_search(iter, search_type, search_value);
while (blkid_dev_next(iter, &dev) == 0) {
printf("Device: %s\n", blkid_dev_devname(dev));
}
blkid_dev_iterate_end(iter);
blkid_put_cache(cache);
return (0);
}
#endif

View File

@ -117,7 +117,7 @@ static void scan_dir(char *dir_name, dev_t devno, struct dir_list **list,
else if (S_ISBLK(st.st_mode) && st.st_rdev == devno) {
*devname = blkid_strdup(path);
DBG(DEBUG_DEVNO,
printf("found 0x%Lx at %s (%p)\n", devno,
printf("found 0x%llx at %s (%p)\n", devno,
path, *devname));
break;
}
@ -175,7 +175,7 @@ char *blkid_devno_to_devname(dev_t devno)
(unsigned long) devno));
} else {
DBG(DEBUG_DEVNO,
printf("found devno 0x%04Lx as %s\n", devno, devname));
printf("found devno 0x%04llx as %s\n", devno, devname));
}

View File

@ -98,7 +98,8 @@ static void get_ext2_info(blkid_dev dev, unsigned char *buf)
static int probe_ext3(int fd __BLKID_ATTR((unused)),
blkid_cache cache __BLKID_ATTR((unused)),
blkid_dev dev,
const struct blkid_magic *id, unsigned char *buf)
struct blkid_magic *id __BLKID_ATTR((unused)),
unsigned char *buf)
{
struct ext2_super_block *es;
@ -124,10 +125,10 @@ static int probe_ext3(int fd __BLKID_ATTR((unused)),
static int probe_ext2(int fd __BLKID_ATTR((unused)),
blkid_cache cache __BLKID_ATTR((unused)),
blkid_dev dev,
const struct blkid_magic *id, unsigned char *buf)
struct blkid_magic *id __BLKID_ATTR((unused)),
unsigned char *buf)
{
struct ext2_super_block *es;
// const char *sec_type = 0, *label = 0;
es = (struct ext2_super_block *)buf;
@ -303,6 +304,23 @@ static int probe_romfs(int fd __BLKID_ATTR((unused)),
return 0;
}
static int probe_cramfs(int fd __BLKID_ATTR((unused)),
blkid_cache cache __BLKID_ATTR((unused)),
blkid_dev dev,
struct blkid_magic *id __BLKID_ATTR((unused)),
unsigned char *buf)
{
struct cramfs_super_block *csb;
const char *label = 0;
csb = (struct cramfs_super_block *)buf;
if (strlen((char *) csb->name))
label = (char *) csb->name;
blkid_set_tag(dev, "LABEL", label, 0);
return 0;
}
static int probe_swap0(int fd __BLKID_ATTR((unused)),
blkid_cache cache __BLKID_ATTR((unused)),
blkid_dev dev,
@ -321,7 +339,6 @@ static int probe_swap1(int fd,
unsigned char *buf __BLKID_ATTR((unused)))
{
struct swap_id_block *sws;
// const char *label = 0;
probe_swap0(fd, cache, dev, id, buf);
/*
@ -489,7 +506,7 @@ static const struct blkid_magic type_array[] = {
{ "xfs", 0, 0, 4, "XFSB", probe_xfs },
{ "romfs", 0, 0, 8, "-rom1fs-", probe_romfs },
{ "bfs", 0, 0, 4, "\316\372\173\033", 0 },
{ "cramfs", 0, 0, 4, "E=\315\034", 0 },
{ "cramfs", 0, 0, 4, "E=\315\050", probe_cramfs },
{ "qnx4", 0, 4, 6, "QNX4FS", 0 },
{ "udf", 32, 1, 5, "BEA01", probe_udf },
{ "udf", 32, 1, 5, "BOOT2", probe_udf },
@ -647,7 +664,7 @@ found_type:
blkid_set_tag(dev, "TYPE", type, 0);
DBG(DEBUG_PROBE, printf("%s: devno 0x%04Lx, type %s\n",
DBG(DEBUG_PROBE, printf("%s: devno 0x%04llx, type %s\n",
dev->bid_name, st.st_rdev, type));
}

View File

@ -108,13 +108,28 @@ struct romfs_super_block {
unsigned char ros_volume[16];
};
struct cramfs_super_block {
__u8 magic[4];
__u32 size;
__u32 flags;
__u32 future;
__u8 signature[16];
struct cramfs_info {
__u32 crc;
__u32 edition;
__u32 blocks;
__u32 files;
} info;
__u8 name[16];
};
struct swap_id_block {
/* unsigned char sws_boot[1024]; */
__u32 sws_version;
__u32 sws_lastpage;
__u32 sws_nrbad;
unsigned char sws_uuid[16];
unsigned char sws_volume[16];
char sws_volume[16];
unsigned char sws_pad[117];
__u32 sws_badpg;
};
@ -216,22 +231,22 @@ struct ocfs_volume_header {
unsigned char minor_version[4];
unsigned char major_version[4];
unsigned char signature[128];
unsigned char mount[128];
unsigned char mount_len[2];
char mount[128];
unsigned char mount_len[2];
};
struct ocfs_volume_label {
unsigned char disk_lock[48];
unsigned char label[64];
char label[64];
unsigned char label_len[2];
unsigned char vol_id[16];
unsigned char vol_id_len[2];
};
#define ocfsmajor(o) ((__u32)o.major_version[0] \
+ (((__u32) o.major_version[1]) << 8) \
+ (((__u32) o.major_version[2]) << 16) \
+ (((__u32) o.major_version[3]) << 24))
+ (((__u32) o.major_version[1]) << 8) \
+ (((__u32) o.major_version[2]) << 16) \
+ (((__u32) o.major_version[3]) << 24))
#define ocfslabellen(o) ((__u32)o.label_len[0] + (((__u32) o.label_len[1]) << 8))
#define ocfsmountlen(o) ((__u32)o.mount_len[0] + (((__u32) o.mount_len[1])<<8))
@ -241,7 +256,7 @@ struct ocfs2_super_block {
unsigned char signature[8];
unsigned char s_dummy1[184];
unsigned char s_dummy2[80];
unsigned char s_label[64];
char s_label[64];
unsigned char s_uuid[16];
};

View File

@ -33,6 +33,11 @@
#include <stdlib.h>
#ifdef TEST_PROGRAM
#define blkid_debug_dump_dev(dev) (debug_dump_dev(dev))
static void debug_dump_dev(blkid_dev dev);
#endif
/*
* File format:
*
@ -355,7 +360,7 @@ static int blkid_parse_line(blkid_cache cache, blkid_dev *dev_p, char *cp)
blkid_free_dev(dev);
}
DEB_DUMP_DEV(DEBUG_READ, dev);
DBG(DEBUG_READ, blkid_debug_dump_dev(dev));
return ret;
}
@ -433,6 +438,32 @@ errout:
}
#ifdef TEST_PROGRAM
static void debug_dump_dev(blkid_dev dev)
{
struct list_head *p;
if (!dev) {
printf(" dev: NULL\n");
return;
}
printf(" dev: name = %s\n", dev->bid_name);
printf(" dev: DEVNO=\"0x%0llx\"\n", dev->bid_devno);
printf(" dev: TIME=\"%lu\"\n", dev->bid_time);
printf(" dev: PRI=\"%d\"\n", dev->bid_pri);
printf(" dev: flags = 0x%08X\n", dev->bid_flags);
list_for_each(p, &dev->bid_tags) {
blkid_tag tag = list_entry(p, struct blkid_struct_tag, bit_tags);
if (tag)
printf(" tag: %s=\"%s\"\n", tag->bit_name,
tag->bit_val);
else
printf(" tag: NULL\n");
}
printf("\n");
}
int main(int argc, char**argv)
{
blkid_cache cache = NULL;

View File

@ -29,6 +29,18 @@ static blkid_tag blkid_new_tag(void)
return tag;
}
#ifdef CONFIG_BLKID_DEBUG
void blkid_debug_dump_tag(blkid_tag tag)
{
if (!tag) {
printf(" tag: NULL\n");
return;
}
printf(" tag: %s=\"%s\"\n", tag->bit_name, tag->bit_val);
}
#endif
void blkid_free_tag(blkid_tag tag)
{
if (!tag)
@ -36,7 +48,7 @@ void blkid_free_tag(blkid_tag tag)
DBG(DEBUG_TAG, printf(" freeing tag %s=%s\n", tag->bit_name,
tag->bit_val ? tag->bit_val : "(NULL)"));
DEB_DUMP_TAG(DEBUG_TAG, tag);
DBG(DEBUG_TAG, blkid_debug_dump_tag(tag));
list_del(&tag->bit_tags); /* list of tags for this device */
list_del(&tag->bit_names); /* list of tags with this type */
@ -330,3 +342,90 @@ try_again:
}
return dev;
}
#ifdef TEST_PROGRAM
#ifdef HAVE_GETOPT_H
#include <getopt.h>
#else
extern char *optarg;
extern int optind;
#endif
void usage(char *prog)
{
fprintf(stderr, "Usage: %s [-f blkid_file] [-m debug_mask] device "
"[type value]\n",
prog);
fprintf(stderr, "\tList all tags for a device and exit\n", prog);
exit(1);
}
int main(int argc, char **argv)
{
blkid_tag_iterate iter;
blkid_cache cache = NULL;
blkid_dev dev;
int c, ret, found;
int flags = BLKID_DEV_FIND;
char *tmp;
char *file = NULL;
char *devname = NULL;
char *search_type = NULL;
char *search_value = NULL;
const char *type, *value;
while ((c = getopt (argc, argv, "m:f:")) != EOF)
switch (c) {
case 'f':
file = optarg;
break;
case 'm':
blkid_debug_mask = strtoul (optarg, &tmp, 0);
if (*tmp) {
fprintf(stderr, "Invalid debug mask: %d\n",
optarg);
exit(1);
}
break;
case '?':
usage(argv[0]);
}
if (argc > optind)
devname = argv[optind++];
if (argc > optind)
search_type = argv[optind++];
if (argc > optind)
search_value = argv[optind++];
if (!devname || (argc != optind))
usage(argv[0]);
if ((ret = blkid_get_cache(&cache, file)) != 0) {
fprintf(stderr, "%s: error creating cache (%d)\n",
argv[0], ret);
exit(1);
}
dev = blkid_get_dev(cache, devname, flags);
if (!dev) {
fprintf(stderr, "%s: Can not find device in blkid cache\n");
exit(1);
}
if (search_type) {
found = blkid_dev_has_tag(dev, search_type, search_value);
printf("Device %s: (%s, %s) %s\n", blkid_dev_devname(dev),
search_type, search_value ? search_value : "NULL",
found ? "FOUND" : "NOT FOUND");
return(!found);
}
printf("Device %s...\n", blkid_dev_devname(dev));
iter = blkid_tag_iterate_begin(dev);
while (blkid_tag_next(iter, &type, &value) == 0) {
printf("\tTag %s has value %s\n", type, value);
}
blkid_tag_iterate_end(iter);
blkid_put_cache(cache);
return (0);
}
#endif

View File

@ -11,8 +11,8 @@
#include "libbb.h"
/* version we've last synced against */
#define E2FSPROGS_VERSION "1.37"
#define E2FSPROGS_DATE "21-Mar-2005"
#define E2FSPROGS_VERSION "1.38"
#define E2FSPROGS_DATE "30-Jun-2005"
/* make sure com_err.h isnt included before us */
#ifdef __COM_ERR_H__
@ -51,7 +51,7 @@ typedef long errcode_t;
#define HAVE_UNISTD_H 1
/* Endianness */
#if __BYTE_ORDER== __BIG_ENDIAN
#if __BYTE_ORDER == __BIG_ENDIAN
#define ENABLE_SWAPFS 1
#define WORDS_BIGENDIAN 1
#endif

View File

@ -3712,6 +3712,8 @@ err_out:
* @j journal
* @l lost+found
* @L is a link
* @m multiply-claimed
* @n invalid
* @o orphaned
* @p problem in
* @r root inode
@ -3749,6 +3751,8 @@ static const char * const abbrevs[] = {
N_("hHTREE @d @i"),
N_("llost+found"),
N_("Lis a link"),
N_("mmultiply-claimed"),
N_("ninvalid"),
N_("oorphaned"),
N_("pproblem in"),
N_("rroot @i"),
@ -4698,7 +4702,8 @@ static void e2fsck_pass1(e2fsck_t ctx)
if (ctx->progress)
if ((ctx->progress)(ctx, 1, 0, ctx->fs->group_desc_count))
return;
if (fs->super->s_wtime < fs->super->s_inodes_count)
if ((fs->super->s_wtime < fs->super->s_inodes_count) ||
(fs->super->s_mtime < fs->super->s_inodes_count))
busted_fs_time = 1;
while (1) {
@ -5052,6 +5057,11 @@ static void e2fsck_pass1(e2fsck_t ctx)
ctx->flags |= E2F_FLAG_ABORT;
return;
}
e2fsck_read_inode(ctx, EXT2_RESIZE_INO, inode,
"recreate inode");
inode->i_mtime = time(0);
e2fsck_write_inode(ctx, EXT2_RESIZE_INO, inode,
"recreate inode");
fs->block_map = save_bmap;
ctx->flags &= ~E2F_FLAG_RESIZE_INODE;
}
@ -6702,7 +6712,7 @@ static void pass1d(e2fsck_t ctx, char *block_buf)
shared_len = 0;
file_ok = 1;
ino = (ext2_ino_t)VOIDPTR_TO_INT(dnode_getkey(n));
if (ino == EXT2_BAD_INO)
if (ino == EXT2_BAD_INO || ino == EXT2_RESIZE_INO)
continue;
/*
@ -10052,7 +10062,7 @@ static const char * const prompt[] = {
N_("Abort"), /* 11 */
N_("Split"), /* 12 */
N_("Continue"), /* 13 */
N_("Clone duplicate/bad blocks"), /* 14 */
N_("Clone multiply-claimed blocks"), /* 14 */
N_("Delete file"), /* 15 */
N_("Suppress messages"),/* 16 */
N_("Unlink"), /* 17 */
@ -10080,7 +10090,7 @@ static const char * const preen_msg[] = {
N_("ABORTED"), /* 11 */
N_("SPLIT"), /* 12 */
N_("CONTINUING"), /* 13 */
N_("DUPLICATE/BAD BLOCKS CLONED"), /* 14 */
N_("MULTIPLY-CLAIMED BLOCKS CLONED"), /* 14 */
N_("FILE DELETED"), /* 15 */
N_("SUPPRESSED"), /* 16 */
N_("UNLINKED"), /* 17 */
@ -10147,12 +10157,11 @@ static const struct e2fsck_problem problem_table[] = {
/* Relocate hint */
{ PR_0_RELOCATE_HINT,
N_("Note: if there is several inode or block bitmap blocks\n"
"which require relocation, or one part of the inode table\n"
"which must be moved, you may wish to try running e2fsck\n"
"with the '-b %S' option first. The problem may lie only\n"
"with the primary block group descriptor, and the backup\n"
"block group descriptor may be OK.\n\n"),
N_("Note: if several inode or block bitmap blocks or part\n"
"of the inode table require relocation, you may wish to try\n"
"running e2fsck with the '-b %S' option first. The problem\n"
"may lie only with the primary block group descriptors, and\n"
"the backup block group descriptors may be OK.\n\n"),
PROMPT_NONE, PR_PREEN_OK | PR_NOCOLLATE },
/* Miscellaneous superblock corruption */
@ -10167,7 +10176,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Inode count in superblock is incorrect */
{ PR_0_INODE_COUNT_WRONG,
N_("@i count in @S is %i, should be %j.\n"),
N_("@i count in @S is %i, @s %j.\n"),
PROMPT_FIX, 0 },
{ PR_0_HURD_CLEAR_FILETYPE,
@ -10176,7 +10185,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Journal inode is invalid */
{ PR_0_JOURNAL_BAD_INODE,
N_("@S has a bad ext3 @j (@i %i).\n"),
N_("@S has an @n ext3 @j (@i %i).\n"),
PROMPT_CLEAR, PR_PREEN_OK },
/* The external journal has (unsupported) multiple filesystems */
@ -10224,7 +10233,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Journal has data, but recovery flag is clear */
{ PR_0_JOURNAL_RECOVERY_CLEAR,
N_("ext3 recovery flag clear, but @j has data.\n"),
N_("ext3 recovery flag is clear, but @j has data.\n"),
PROMPT_NONE, 0 },
/* Ask if we should clear the journal */
@ -10269,7 +10278,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Filesystem revision is 0, but feature flags are set */
{ PR_0_FS_REV_LEVEL,
"@f has feature flag(s) set, but is a revision 0 @f. ",
N_("@f has feature flag(s) set, but is a revision 0 @f. "),
PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
/* Journal superblock has an unknown read-only feature flag set */
@ -10289,7 +10298,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Moving journal to hidden file */
{ PR_0_MOVE_JOURNAL,
N_("Moving @j from /%s to hidden inode.\n\n"),
N_("Moving @j from /%s to hidden @i.\n\n"),
PROMPT_NONE, 0 },
/* Error moving journal to hidden file */
@ -10299,7 +10308,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Clearing V2 journal superblock */
{ PR_0_CLEAR_V2_JOURNAL,
N_("Found invalid V2 @j @S fields (from V1 journal).\n"
N_("Found @n V2 @j @S fields (from V1 @j).\n"
"Clearing fields beyond the V1 @j @S...\n\n"),
PROMPT_NONE, 0 },
@ -10316,7 +10325,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Resize_inode not enabled, but resize inode is non-zero */
{ PR_0_CLEAR_RESIZE_INODE,
N_("Resize_@i not enabled, but the resize inode is non-zero. "),
N_("Resize_@i not enabled, but the resize @i is non-zero. "),
PROMPT_CLEAR, 0 },
/* Resize inode invalid */
@ -10342,7 +10351,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Reserved inode has bad mode */
{ PR_1_RESERVED_BAD_MODE,
N_("Reserved @i %i %Q has bad mode. "),
N_("Reserved @i %i (%Q) has @n mode. "),
PROMPT_CLEAR, PR_PREEN_OK },
/* Deleted inode has zero dtime */
@ -10449,9 +10458,8 @@ static const struct e2fsck_problem problem_table[] = {
/* Bad primary block prompt */
{ PR_1_BAD_PRIMARY_BLOCK_PROMPT,
N_("You can clear the this @b (and hope for the best) from the\n"
"bad @b list and hope that @b is really OK, but there are no\n"
"guarantees.\n\n"),
N_("You can remove this @b from the bad @b list and hope\n"
"that the @b is really OK. But there are no guarantees.\n\n"),
PROMPT_CLEAR, PR_PREEN_NOMSG },
/* Bad primary superblock */
@ -10514,12 +10522,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Error allocating inode bitmap */
{ PR_1_ALLOCATE_IBITMAP_ERROR,
"@A @i @B (%N): %m\n",
N_("@A @i @B (%N): %m\n"),
PROMPT_NONE, PR_FATAL },
/* Error allocating block bitmap */
{ PR_1_ALLOCATE_BBITMAP_ERROR,
"@A @b @B (%N): %m\n",
N_("@A @b @B (%N): %m\n"),
PROMPT_NONE, PR_FATAL },
/* Error allocating icount structure */
@ -10579,17 +10587,17 @@ static const struct e2fsck_problem problem_table[] = {
/* Non-zero size for device, fifo or socket inode */
{ PR_1_SET_NONZSIZE,
"Special (@v/socket/fifo) @i %i has non-zero size. ",
N_("Special (@v/socket/fifo) @i %i has non-zero size. "),
PROMPT_FIX, PR_PREEN_OK },
/* Filesystem revision is 0, but feature flags are set */
{ PR_1_FS_REV_LEVEL,
"@f has feature flag(s) set, but is a revision 0 @f. ",
N_("@f has feature flag(s) set, but is a revision 0 @f. "),
PROMPT_FIX, PR_PREEN_OK | PR_NO_OK },
/* Journal inode is not in use, but contains data */
{ PR_1_JOURNAL_INODE_NOT_CLEAR,
"@j @i is not in use, but contains data. ",
N_("@j @i is not in use, but contains data. "),
PROMPT_CLEAR, PR_PREEN_OK },
/* Journal has bad mode */
@ -10599,7 +10607,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Deal with inodes that were part of orphan linked list */
{ PR_1_LOW_DTIME,
N_("@i %i was part of the orphaned @i list. "),
N_("@i %i was part of the @o @i list. "),
PROMPT_FIX, PR_LATCH_LOW_DTIME, 0 },
/* Deal with inodes that were part of corrupted orphan linked
@ -10610,7 +10618,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Error allocating refcount structure */
{ PR_1_ALLOCATE_REFCOUNT,
"@A refcount structure (%N): %m\n",
N_("@A refcount structure (%N): %m\n"),
PROMPT_NONE, PR_FATAL },
/* Error reading extended attribute block */
@ -10630,7 +10638,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Extended attribute reference count incorrect */
{ PR_1_EXTATTR_REFCOUNT,
N_("@a @b %b has reference count %B, should be %N. "),
N_("@a @b %b has reference count %B, @s %N. "),
PROMPT_FIX, 0 },
/* Error writing Extended Attribute block while fixing refcount */
@ -10640,12 +10648,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Multiple EA blocks not supported */
{ PR_1_EA_MULTI_BLOCK,
N_("@a @b %b has h_blocks > 1. "),
N_("@a @b %b has h_@bs > 1. "),
PROMPT_CLEAR, 0},
/* Error allocating EA region allocation structure */
{ PR_1_EA_ALLOC_REGION,
N_("Error allocating @a @b %b. "),
N_("@A @a @b %b. "),
PROMPT_ABORT, 0},
/* Error EA allocation collision */
@ -10655,12 +10663,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Bad extended attribute name */
{ PR_1_EA_BAD_NAME,
N_("@a @b %b is corrupt (invalid name). "),
N_("@a @b %b is corrupt (@n name). "),
PROMPT_CLEAR, 0},
/* Bad extended attribute value */
{ PR_1_EA_BAD_VALUE,
N_("@a @b %b is corrupt (invalid value). "),
N_("@a @b %b is corrupt (@n value). "),
PROMPT_CLEAR, 0},
/* Inode too big (latch question) */
@ -10694,7 +10702,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Invalid root node in HTREE directory */
{ PR_1_HTREE_BADROOT,
N_("@h %i has an invalid root node.\n"),
N_("@h %i has an @n root node.\n"),
PROMPT_CLEAR_HTREE, PR_PREEN_OK },
/* Unsupported hash version in HTREE directory */
@ -10725,45 +10733,45 @@ static const struct e2fsck_problem problem_table[] = {
/* invalid inode->i_extra_isize */
{ PR_1_EXTRA_ISIZE,
N_("@i %i has a extra size (%IS) which is invalid\n"),
N_("@i %i has a extra size (%IS) which is @n\n"),
PROMPT_FIX, PR_PREEN_OK },
/* invalid ea entry->e_name_len */
{ PR_1_ATTR_NAME_LEN,
N_("@a in @i %i has a namelen (%N) which is invalid\n"),
N_("@a in @i %i has a namelen (%N) which is @n\n"),
PROMPT_CLEAR, PR_PREEN_OK },
/* invalid ea entry->e_value_size */
{ PR_1_ATTR_VALUE_SIZE,
N_("@a in @i %i has a value size (%N) which is invalid\n"),
N_("@a in @i %i has a value size (%N) which is @n\n"),
PROMPT_CLEAR, PR_PREEN_OK },
/* invalid ea entry->e_value_offs */
{ PR_1_ATTR_VALUE_OFFSET,
N_("@a in @i %i has a value offset (%N) which is invalid\n"),
N_("@a in @i %i has a value offset (%N) which is @n\n"),
PROMPT_CLEAR, PR_PREEN_OK },
/* invalid ea entry->e_value_block */
{ PR_1_ATTR_VALUE_BLOCK,
N_("@a in @i %i has a value block (%N) which is invalid (must be 0)\n"),
N_("@a in @i %i has a value @b (%N) which is @n (must be 0)\n"),
PROMPT_CLEAR, PR_PREEN_OK },
/* invalid ea entry->e_hash */
{ PR_1_ATTR_HASH,
N_("@a in @i %i has a hash (%N) which is invalid (must be 0)\n"),
N_("@a in @i %i has a hash (%N) which is @n (must be 0)\n"),
PROMPT_CLEAR, PR_PREEN_OK },
/* Pass 1b errors */
/* Pass 1B: Rescan for duplicate/bad blocks */
{ PR_1B_PASS_HEADER,
N_("Duplicate @bs found... invoking duplicate @b passes.\n"
"Pass 1B: Rescan for duplicate/bad @bs\n"),
N_("\nRunning additional passes to resolve @bs claimed by more than one @i...\n"
"Pass 1B: Rescanning for @m @bs\n"),
PROMPT_NONE, 0 },
/* Duplicate/bad block(s) header */
{ PR_1B_DUP_BLOCK_HEADER,
N_("Duplicate/bad @b(s) in @i %i:"),
N_("@m @b(s) in @i %i:"),
PROMPT_NONE, 0 },
/* Duplicate/bad block(s) in inode */
@ -10783,7 +10791,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Error allocating inode bitmap */
{ PR_1B_ALLOCATE_IBITMAP_ERROR,
N_("@A @i @B (inode_dup_map): %m\n"),
N_("@A @i @B (@i_dup_map): %m\n"),
PROMPT_NONE, PR_FATAL },
/* Error while iterating over blocks */
@ -10793,25 +10801,25 @@ static const struct e2fsck_problem problem_table[] = {
/* Error adjusting EA refcount */
{ PR_1B_ADJ_EA_REFCOUNT,
N_("Error addjusting refcount for @a @b %b (@i %i): %m\n"),
N_("Error adjusting refcount for @a @b %b (@i %i): %m\n"),
PROMPT_NONE, 0 },
/* Pass 1C: Scan directories for inodes with dup blocks. */
/* Pass 1C: Scan directories for inodes with multiply-claimed blocks. */
{ PR_1C_PASS_HEADER,
N_("Pass 1C: Scan directories for @is with dup @bs.\n"),
N_("Pass 1C: Scanning directories for @is with @m @bs.\n"),
PROMPT_NONE, 0 },
/* Pass 1D: Reconciling duplicate blocks */
/* Pass 1D: Reconciling multiply-claimed blocks */
{ PR_1D_PASS_HEADER,
N_("Pass 1D: Reconciling duplicate @bs\n"),
N_("Pass 1D: Reconciling @m @bs\n"),
PROMPT_NONE, 0 },
/* File has duplicate blocks */
{ PR_1D_DUP_FILE,
N_("File %Q (@i #%i, mod time %IM) \n"
" has %B duplicate @b(s), shared with %N file(s):\n"),
" has %B @m @b(s), shared with %N file(s):\n"),
PROMPT_NONE, 0 },
/* List of files sharing duplicate blocks */
@ -10826,12 +10834,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Report of how many duplicate/bad inodes */
{ PR_1D_NUM_DUP_INODES,
N_("(There are %N @is containing duplicate/bad @bs.)\n\n"),
N_("(There are %N @is containing @m @bs.)\n\n"),
PROMPT_NONE, 0 },
/* Duplicated blocks already reassigned or cloned. */
{ PR_1D_DUP_BLOCKS_DEALT,
N_("Duplicated @bs already reassigned or cloned.\n\n"),
N_("@m @bs already reassigned or cloned.\n\n"),
PROMPT_NONE, 0 },
/* Clone duplicate/bad blocks? */
@ -10855,12 +10863,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Bad inode number for '.' */
{ PR_2_BAD_INODE_DOT,
N_("Bad @i number for '.' in @d @i %i.\n"),
N_("@n @i number for '.' in @d @i %i.\n"),
PROMPT_FIX, 0 },
/* Directory entry has bad inode number */
{ PR_2_BAD_INO,
N_("@E has bad @i #: %Di.\n"),
N_("@E has @n @i #: %Di.\n"),
PROMPT_CLEAR, 0 },
/* Directory entry has deleted or unused inode */
@ -10905,12 +10913,12 @@ static const struct e2fsck_problem problem_table[] = {
/* First entry in directory inode doesn't contain '.' */
{ PR_2_1ST_NOT_DOT,
N_("First @e '%Dn' (inode=%Di) in @d @i %i (%p) @s '.'\n"),
N_("First @e '%Dn' (@i=%Di) in @d @i %i (%p) @s '.'\n"),
PROMPT_FIX, 0 },
/* Second entry in directory inode doesn't contain '..' */
{ PR_2_2ND_NOT_DOT_DOT,
N_("Second @e '%Dn' (inode=%Di) in @d @i %i @s '..'\n"),
N_("Second @e '%Dn' (@i=%Di) in @d @i %i @s '..'\n"),
PROMPT_FIX, 0 },
/* i_faddr should be zero */
@ -10940,7 +10948,7 @@ static const struct e2fsck_problem problem_table[] = {
/* inode has bad mode */
{ PR_2_BAD_MODE,
N_("@i %i (%Q) has a bad mode (%Im).\n"),
N_("@i %i (%Q) has @n mode (%Im).\n"),
PROMPT_CLEAR, 0 },
/* directory corrupted */
@ -10995,7 +11003,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Final rec_len is wrong */
{ PR_2_FINAL_RECLEN,
N_("@E has rec_len of %Dr, should be %N.\n"),
N_("@E has rec_len of %Dr, @s %N.\n"),
PROMPT_FIX, 0 },
/* Error allocating icount structure */
@ -11050,7 +11058,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Directory filetype incorrect */
{ PR_2_BAD_FILETYPE,
N_("@E has an incorrect filetype (was %Dt, should be %N).\n"),
N_("@E has an incorrect filetype (was %Dt, @s %N).\n"),
PROMPT_FIX, 0 },
/* Directory filetype set on filesystem */
@ -11060,17 +11068,17 @@ static const struct e2fsck_problem problem_table[] = {
/* Directory filename is null */
{ PR_2_NULL_NAME,
N_("@E has a zero-length name.\n"),
N_("@E has a @z name.\n"),
PROMPT_CLEAR, 0 },
/* Invalid symlink */
{ PR_2_INVALID_SYMLINK,
N_("Symlink %Q (@i #%i) is invalid.\n"),
N_("Symlink %Q (@i #%i) is @n.\n"),
PROMPT_CLEAR, 0 },
/* i_file_acl (extended attribute block) is bad */
{ PR_2_FILE_ACL_BAD,
N_("@a @b @F invalid (%If).\n"),
N_("@a @b @F @n (%If).\n"),
PROMPT_CLEAR, 0 },
/* Filesystem contains large files, but has no such flag in sb */
@ -11100,7 +11108,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Clear invalid HTREE directory */
{ PR_2_HTREE_CLEAR,
N_("Invalid @h %d (%q). "), PROMPT_CLEAR, 0 },
N_("@n @h %d (%q). "), PROMPT_CLEAR, 0 },
/* Bad block in htree interior node */
{ PR_2_HTREE_BADBLK,
@ -11109,22 +11117,22 @@ static const struct e2fsck_problem problem_table[] = {
/* Error adjusting EA refcount */
{ PR_2_ADJ_EA_REFCOUNT,
N_("Error addjusting refcount for @a @b %b (@i %i): %m\n"),
N_("Error adjusting refcount for @a @b %b (@i %i): %m\n"),
PROMPT_NONE, PR_FATAL },
/* Invalid HTREE root node */
{ PR_2_HTREE_BAD_ROOT,
N_("@p @h %d: root node is invalid\n"),
N_("@p @h %d: root node is @n\n"),
PROMPT_CLEAR_HTREE, PR_PREEN_OK },
/* Invalid HTREE limit */
{ PR_2_HTREE_BAD_LIMIT,
N_("@p @h %d: node (%B) has bad limit (%N)\n"),
N_("@p @h %d: node (%B) has @n limit (%N)\n"),
PROMPT_CLEAR_HTREE, PR_PREEN_OK },
/* Invalid HTREE count */
{ PR_2_HTREE_BAD_COUNT,
N_("@p @h %d: node (%B) has bad count (%N)\n"),
N_("@p @h %d: node (%B) has @n count (%N)\n"),
PROMPT_CLEAR_HTREE, PR_PREEN_OK },
/* HTREE interior node has out-of-order hashes in table */
@ -11132,9 +11140,9 @@ static const struct e2fsck_problem problem_table[] = {
N_("@p @h %d: node (%B) has an unordered hash table\n"),
PROMPT_CLEAR_HTREE, PR_PREEN_OK },
/* Node in HTREE directory has bad depth */
/* Node in HTREE directory has invalid depth */
{ PR_2_HTREE_BAD_DEPTH,
N_("@p @h %d: node (%B) has bad depth\n"),
N_("@p @h %d: node (%B) has @n depth\n"),
PROMPT_NONE, 0 },
/* Duplicate directory entry found */
@ -11236,7 +11244,7 @@ static const struct e2fsck_problem problem_table[] = {
/* Couldn't fix parent directory -- couldn't find it */
{ PR_3_FIX_PARENT_NOFIND,
N_("Couldn't fix parent of @i %i: Couldn't find parent @d entry\n\n"),
N_("Couldn't fix parent of @i %i: Couldn't find parent @d @e\n\n"),
PROMPT_NONE, 0 },
/* Error allocating inode bitmap */
@ -11315,12 +11323,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Unattached zero-length inode */
{ PR_4_ZERO_LEN_INODE,
"@u @z @i %i. ",
N_("@u @z @i %i. "),
PROMPT_CLEAR, PR_PREEN_OK|PR_NO_OK },
/* Unattached inode */
{ PR_4_UNATTACHED_INODE,
"@u @i %i\n",
N_("@u @i %i\n"),
PROMPT_CONNECT, 0 },
/* Inode ref count wrong */
@ -11332,7 +11340,7 @@ static const struct e2fsck_problem problem_table[] = {
N_("WARNING: PROGRAMMING BUG IN E2FSCK!\n"
"\tOR SOME BONEHEAD (YOU) IS CHECKING A MOUNTED (LIVE) FILESYSTEM.\n"
"@i_link_info[%i] is %N, @i.i_links_count is %Il. "
"They should be the same!\n"),
"They @s the same!\n"),
PROMPT_NONE, 0 },
/* Pass 5 errors */
@ -11430,12 +11438,12 @@ static const struct e2fsck_problem problem_table[] = {
/* Error copying in replacement inode bitmap */
{ PR_5_COPY_IBITMAP_ERROR,
"Error copying in replacement @i @B: %m\n",
N_("Error copying in replacement @i @B: %m\n"),
PROMPT_NONE, PR_FATAL },
/* Error copying in replacement block bitmap */
{ PR_5_COPY_BBITMAP_ERROR,
"Error copying in replacement @b @B: %m\n",
N_("Error copying in replacement @b @B: %m\n"),
PROMPT_NONE, PR_FATAL },
/* Block range not used, but marked in bitmap */
@ -13523,7 +13531,7 @@ static void check_resize_inode(e2fsck_t ctx)
}
}
/* Read the resizde inode */
/* Read the resize inode */
pctx.ino = EXT2_RESIZE_INO;
retval = ext2fs_read_inode(fs, EXT2_RESIZE_INO, &inode);
if (retval) {
@ -14641,7 +14649,7 @@ static void usage(e2fsck_t ctx)
fprintf(stderr,
_("Usage: %s [-panyrcdfvstDFSV] [-b superblock] [-B blocksize]\n"
"\t\t[-I inode_buffer_blocks] [-P process_inode_size]\n"
"\t\t[-l|-L bad_blocks_file] [-C fd] [-j ext-journal]\n"
"\t\t[-l|-L bad_blocks_file] [-C fd] [-j external_journal]\n"
"\t\t[-E extended-options] device\n"),
ctx->program_name);
@ -14655,7 +14663,7 @@ static void usage(e2fsck_t ctx)
" -v Be verbose\n"
" -b superblock Use alternative superblock\n"
" -B blocksize Force blocksize when looking for superblock\n"
" -j external-journal Set location of the external journal\n"
" -j external_journal Set location of the external journal\n"
" -l bad_blocks_file Add to badblocks list\n"
" -L bad_blocks_file Set badblocks list\n"
));
@ -15080,16 +15088,19 @@ static void parse_extended_opts(e2fsck_t ctx, const char *opts)
continue;
}
ctx->ext_attr_ver = ea_ver;
} else
} else {
fprintf(stderr, _("Unknown extended option: %s\n"),
token);
extended_usage++;
}
}
if (extended_usage) {
bb_error_msg_and_die(
"Extended options are separated by commas, "
"and may take an argument which\n"
"is set off by an equals ('=') sign. "
"Valid raid options are:\n"
"\tea_ver=<ea_version (1 or 2)\n\n");
"Valid extended options are:\n"
"\tea_ver=<ea_version (1 or 2)>\n\n");
}
}

View File

@ -12,6 +12,7 @@
*/
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <string.h>
#include <grp.h>

View File

@ -9,6 +9,7 @@
#include "e2p.h"
#include <string.h>
#include <stdlib.h>
static const char * const os_tab[] =
{ "Linux",

View File

@ -30,7 +30,7 @@
* systems, as well as non-32 bit systems.
*/
int ext2fs_set_bit(int nr,void * addr)
int ext2fs_set_bit(unsigned int nr,void * addr)
{
int mask, retval;
unsigned char *ADDR = (unsigned char *) addr;
@ -42,7 +42,7 @@ int ext2fs_set_bit(int nr,void * addr)
return retval;
}
int ext2fs_clear_bit(int nr, void * addr)
int ext2fs_clear_bit(unsigned int nr, void * addr)
{
int mask, retval;
unsigned char *ADDR = (unsigned char *) addr;
@ -54,7 +54,7 @@ int ext2fs_clear_bit(int nr, void * addr)
return retval;
}
int ext2fs_test_bit(int nr, const void * addr)
int ext2fs_test_bit(unsigned int nr, const void * addr)
{
int mask;
const unsigned char *ADDR = (const unsigned char *) addr;

View File

@ -15,9 +15,9 @@
#include <strings.h>
extern int ext2fs_set_bit(int nr,void * addr);
extern int ext2fs_clear_bit(int nr, void * addr);
extern int ext2fs_test_bit(int nr, const void * addr);
extern int ext2fs_set_bit(unsigned int nr,void * addr);
extern int ext2fs_clear_bit(unsigned int nr, void * addr);
extern int ext2fs_test_bit(unsigned int nr, const void * addr);
extern __u16 ext2fs_swab16(__u16 val);
extern __u32 ext2fs_swab32(__u32 val);

View File

@ -330,6 +330,7 @@ typedef struct ext2_struct_inode_scan *ext2_inode_scan;
#define EXT2_MF_ISROOT 2
#define EXT2_MF_READONLY 4
#define EXT2_MF_SWAP 8
#define EXT2_MF_BUSY 16
/*
* Ext2/linux mode flags. We define them here so that we don't need

View File

@ -44,12 +44,14 @@ errcode_t ext2fs_resize_mem(unsigned long EXT2FS_ATTR((unused)) old_size,
unsigned long size, void *ptr)
{
void *p;
void **pp = (void **)ptr;
p = realloc(*pp, size);
/* Use "memcpy" for pointer assignments here to avoid problems
* with C99 strict type aliasing rules. */
memcpy(&p, ptr, sizeof (p));
p = realloc(p, size);
if (!p)
return EXT2_ET_NO_MEMORY;
*pp = p;
memcpy(ptr, &p, sizeof (p));
return 0;
}

View File

@ -23,7 +23,7 @@
#include <linux/fd.h>
#endif
#if defined(__linux__) && defined(_IO) && !defined(BLKGETSIZE)
#if defined(__linux__) && defined(_IO) && !defined(BLKSSZGET)
#define BLKSSZGET _IO(0x12,104)/* get block device sector size */
#endif

View File

@ -339,20 +339,18 @@ int main(int argc, char **argv)
exit(1);
}
printf("Device %s reports flags %02x\n", argv[1], mount_flags);
if (mount_flags & EXT2_MF_BUSY)
printf("\t%s is apparently in use.\n", argv[1]);
if (mount_flags & EXT2_MF_MOUNTED)
printf("\t%s is mounted.\n", argv[1]);
if (mount_flags & EXT2_MF_SWAP)
printf("\t%s is a swap device.\n", argv[1]);
if (mount_flags & EXT2_MF_READONLY)
printf("\t%s is read-only.\n", argv[1]);
if (mount_flags & EXT2_MF_ISROOT)
printf("\t%s is the root filesystem.\n", argv[1]);
if (mntpt[0])
printf("\t%s is mounted on %s.\n", argv[1], mntpt);
exit(0);
}
#endif /* DEBUG */

View File

@ -711,7 +711,7 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
}
fs_stride = strtoul(arg, &p, 0);
if (*p || (fs_stride == 0)) {
bb_error_msg("Invalid stride parameter");
bb_error_msg("Invalid stride parameter: %s", arg);
r_usage++;
continue;
}
@ -735,7 +735,8 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
continue;
}
if (resize <= sb_param->s_blocks_count) {
bb_error_msg("The resize maximum must be greater than the filesystem size");
bb_error_msg("The resize maximum must be greater "
"than the filesystem size");
r_usage++;
continue;
}
@ -767,10 +768,10 @@ static void parse_extended_opts(struct ext2_super_block *sb_param,
if (r_usage) {
bb_error_msg_and_die(
"\nBad options specified.\n\n"
"Options are separated by commas, "
"Extended options are separated by commas, "
"and may take an argument which\n"
"\tis set off by an equals ('=') sign.\n\n"
"Valid raid options are:\n"
"Valid extended options are:\n"
"\tstride=<stride length in blocks>\n"
"\tresize=<resize maximum size in blocks>\n");
}
@ -855,7 +856,7 @@ static int PRS(int argc, char *argv[])
if (b < EXT2_MIN_BLOCK_SIZE ||
b > EXT2_MAX_BLOCK_SIZE) {
BLOCKSIZE_ERROR:
bb_error_msg_and_die("bad block size - %s", optarg);
bb_error_msg_and_die("invalid block size - %s", optarg);
}
mke2fs_warning_msg((blocksize > 4096),
"blocksize %d not usable on most systems",
@ -871,7 +872,7 @@ BLOCKSIZE_ERROR:
break;
case 'f':
if (safe_strtoi(optarg, &size) || size < EXT2_MIN_BLOCK_SIZE || size > EXT2_MAX_BLOCK_SIZE ){
bb_error_msg_and_die("bad fragment size - %s", optarg);
bb_error_msg_and_die("invalid fragment size - %s", optarg);
}
param.s_log_frag_size =
int_log2(size >> EXT2_MIN_BLOCK_LOG_SIZE);
@ -893,7 +894,7 @@ BLOCKSIZE_ERROR:
if (safe_strtoi(optarg, &inode_ratio)
|| inode_ratio < EXT2_MIN_BLOCK_SIZE
|| inode_ratio > EXT2_MAX_BLOCK_SIZE * 1024) {
bb_error_msg_and_die("bad inode ratio %s (min %d/max %d)",
bb_error_msg_and_die("invalid inode ratio %s (min %d/max %d)",
optarg, EXT2_MIN_BLOCK_SIZE,
EXT2_MAX_BLOCK_SIZE);
}
@ -912,7 +913,7 @@ BLOCKSIZE_ERROR:
break;
case 'm':
if (safe_strtoi(optarg, &reserved_ratio) || reserved_ratio > 50 ) {
bb_error_msg_and_die("bad reserved blocks percent - %s", optarg);
bb_error_msg_and_die("invalid reserved blocks percent - %s", optarg);
}
break;
case 'n':
@ -940,7 +941,7 @@ BLOCKSIZE_ERROR:
#ifdef EXT2_DYNAMIC_REV
case 'I':
if (safe_strtoi(optarg, &inode_size)) {
bb_error_msg_and_die("bad inode size - %s", optarg);
bb_error_msg_and_die("invalid inode size - %s", optarg);
}
break;
#endif
@ -1051,7 +1052,7 @@ BLOCKSIZE_ERROR:
if (optind < argc) {
param.s_blocks_count = parse_num_blocks(argv[optind++],
param.s_log_block_size);
mke2fs_error_msg_and_die(!param.s_blocks_count, "bad blocks count - %s", argv[optind - 1]);
mke2fs_error_msg_and_die(!param.s_blocks_count, "invalid blocks count - %s", argv[optind - 1]);
}
if (optind < argc)
bb_show_usage();
@ -1165,11 +1166,16 @@ BLOCKSIZE_ERROR:
}
}
if (!force && param.s_blocks_count >= (1 << 31)) {
bb_error_msg_and_die("Filesystem too large. No more than 2**31-1 blocks\n"
"\t (8TB using a blocksize of 4k) are currently supported.");
}
if (inode_size) {
if (inode_size < EXT2_GOOD_OLD_INODE_SIZE ||
inode_size > EXT2_BLOCK_SIZE(&param) ||
inode_size & (inode_size - 1)) {
bb_error_msg_and_die("bad inode size %d (min %d/max %d)",
bb_error_msg_and_die("invalid inode size %d (min %d/max %d)",
inode_size, EXT2_GOOD_OLD_INODE_SIZE,
blocksize);
}

View File

@ -89,14 +89,20 @@ void check_mount(const char *device, int force, const char *type)
bb_error_msg("Could not determine if %s is mounted", device);
return;
}
if (!(mount_flags & EXT2_MF_MOUNTED))
return;
if (mount_flags & EXT2_MF_MOUNTED) {
bb_error_msg("%s is mounted !", device);
force_check:
if (force)
bb_error_msg("badblocks forced anyways");
else
bb_error_msg_and_die("it's not safe to run badblocks!");
}
if (mount_flags & EXT2_MF_BUSY) {
bb_error_msg("%s is apparently in use by the system", device);
goto force_check;
}
bb_error_msg("%s is mounted !", device);
if (force)
bb_error_msg("forcing anyways and ignoring /etc/mtab status");
else
bb_error_msg_and_die("will not make a %s here!", type);
}
void parse_journal_opts(char **journal_device, int *journal_flags,
@ -189,10 +195,14 @@ int figure_journal_size(int size, ext2_filsys fs)
if (fs->super->s_blocks_count < 32768)
j_blocks = 1024;
else if (fs->super->s_blocks_count < 262144)
else if (fs->super->s_blocks_count < 256*1024)
j_blocks = 4096;
else
else if (fs->super->s_blocks_count < 512*1024)
j_blocks = 8192;
else if (fs->super->s_blocks_count < 1024*1024)
j_blocks = 16384;
else
j_blocks = 32768;
return j_blocks;
}

View File

@ -579,7 +579,7 @@
#define e2fsck_trivial_usage \
"[-panyrcdfvstDFSV] [-b superblock] [-B blocksize] " \
"[-I inode_buffer_blocks] [-P process_inode_size] " \
"[-l|-L bad_blocks_file] [-C fd] [-j ext-journal] " \
"[-l|-L bad_blocks_file] [-C fd] [-j external_journal] " \
"[-E extended-options] device"
#define e2fsck_full_usage \
"Check a Linux ext2/ext3 file system.\n\n" \