btrfs-progs: sb-mod: improve help

Print the list of supported members to change and explain what the tool
does.

Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2021-10-05 14:05:04 +02:00
parent f7e4860e9f
commit 91c91c1632
1 changed files with 30 additions and 4 deletions

View File

@ -215,6 +215,18 @@ static bool op_is_write(enum field_op op)
return op != OP_GET;
}
static const char * const type_to_string(enum field_type type)
{
switch (type) {
case TYPE_U8: return "u8";
case TYPE_U16: return "u16";
case TYPE_U32: return "u32";
case TYPE_U64: return "u64";
case TYPE_UNKNOWN:
}
return "UNKNOWN";
}
static void mod_field_by_name(struct btrfs_super_block *sb, int set, const char *name,
u64 *val)
{
@ -329,10 +341,15 @@ int main(int argc, char **argv)
memset(spec, 0, sizeof(spec));
if (argc <= 2) {
printf("Usage: %s image [fieldspec...]\n", argv[0]);
printf("Where fileldspec is: member op\n");
printf(" member: name of the superblock member\n");
printf(" op: single character optionally followed by a value\n");
printf("Usage: %s [options] image [fieldspec...]\n", argv[0]);
printf("\n");
printf("Modify or read a a member of the primary superblock on a given image (file or block device),\n");
printf("checksum is recalculated after any modification (ie. it is not when just reading the values).\n");
printf("Use 'btrfs inspect dump-super image' to read the whole superblock\n");
printf("\n");
printf("fileldspec is a sequence of pairs 'member op':\n");
printf(" member: name of the superblock member, listed below\n");
printf(" op: single character optionally followed by a value (eg. =0x42)\n");
printf(" . read the member value (no value)\n");
printf(" ? read the member value (no value)\n");
printf(" = set member to the exact value (value required)\n");
@ -340,6 +357,15 @@ int main(int argc, char **argv)
printf(" - subtract this value from member (value required)\n");
printf(" ^ xor member with this value (value required)\n");
printf(" @ byteswap of the member (no value)\n");
printf("\n");
printf(" member (type)\n");
for (i = 0; i < ARRAY_SIZE(known_fields); i++) {
const int width = 24;
printf(" %-*s %s\n", width, known_fields[i].name,
type_to_string(known_fields[i].type));
}
exit(1);
}
fd = open(argv[1], O_RDWR | O_EXCL);