X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;ds=sidebyside;f=debugfs%2Fextent_inode.c;h=e4e815ef4a60303cc64bf6fb1ade88a55281f508;hb=29bd196ba9cefa538c8d7fbf8c7289091c75c903;hp=69628a9e268966a345149f37a3f049927a208bfc;hpb=bee7b67ce92bb912fccc0dcce3c71c186c2a988b;p=tools%2Fe2fsprogs.git diff --git a/debugfs/extent_inode.c b/debugfs/extent_inode.c index 69628a9..e4e815e 100644 --- a/debugfs/extent_inode.c +++ b/debugfs/extent_inode.c @@ -25,16 +25,17 @@ extern char *optarg; #include "debugfs.h" -ext2_ino_t current_ino; -ext2_extent_handle_t current_handle; +static ext2_ino_t current_ino; +static ext2_extent_handle_t current_handle; static void dbg_print_extent(char *desc, struct ext2fs_extent *extent) { if (desc) printf("%s: ", desc); printf("extent: lblk %llu--%llu, len %u, pblk %llu, flags: ", - extent->e_lblk, extent->e_lblk + extent->e_len - 1, - extent->e_len, extent->e_pblk); + (unsigned long long) extent->e_lblk, + (unsigned long long) extent->e_lblk + extent->e_len - 1, + extent->e_len, (unsigned long long) extent->e_pblk); if (extent->e_flags & EXT2_EXTENT_FLAGS_LEAF) fputs("LEAF ", stdout); if (extent->e_flags & EXT2_EXTENT_FLAGS_UNINIT) @@ -47,9 +48,9 @@ static void dbg_print_extent(char *desc, struct ext2fs_extent *extent) } -int common_extent_args_process(int argc, char *argv[], int min_argc, - int max_argc, const char *cmd, - const char *usage, int flags) +static int common_extent_args_process(int argc, char *argv[], int min_argc, + int max_argc, const char *cmd, + const char *usage, int flags) { if (common_args_process(argc, argv, min_argc, max_argc, cmd, usage, flags)) @@ -64,11 +65,11 @@ int common_extent_args_process(int argc, char *argv[], int min_argc, static char *orig_prompt, *extent_prompt; -void do_extent_open(int argc, char *argv[]) +void do_extent_open(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - struct ext3_extent_header *eh; ext2_ino_t inode; - int i, ret; + int ret; errcode_t retval; char *cp; @@ -77,7 +78,7 @@ void do_extent_open(int argc, char *argv[]) if (argc == 1) { if (current_ino) - printf("Current inode is %d\n", current_ino); + printf("Current inode is %u\n", current_ino); else printf("No current inode\n"); return; @@ -98,22 +99,29 @@ void do_extent_open(int argc, char *argv[]) orig_prompt = ss_get_prompt(sci_idx); extent_prompt = malloc(strlen(orig_prompt) + 32); + if (extent_prompt == NULL) { + com_err(argv[1], retval, "out of memory"); + return; + } + strcpy(extent_prompt, orig_prompt); cp = strchr(extent_prompt, ':'); if (cp) *cp = 0; - sprintf(extent_prompt + strlen(extent_prompt), " (extent ino %d): ", + sprintf(extent_prompt + strlen(extent_prompt), " (extent ino %u): ", current_ino); ss_add_request_table(sci_idx, &extent_cmds, 1, &ret); ss_set_prompt(sci_idx, extent_prompt); return; } -void do_extent_close(int argc, char *argv[]) +void do_extent_close(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { int ret; - if (check_fs_open(argv[0])) + if (common_args_process(argc, argv, 1, 1, + "extent_close", "", 0)) return; if (!current_handle) { @@ -130,97 +138,112 @@ void do_extent_close(int argc, char *argv[]) extent_prompt = NULL; } -void generic_goto_node(char *cmd_name, int op) +static void generic_goto_node(const char *my_name, int argc, + char **argv, int op) { struct ext2fs_extent extent; errcode_t retval; - if (check_fs_open(cmd_name)) + if (my_name && common_args_process(argc, argv, 1, 1, + my_name, "", 0)) return; if (!current_handle) { - com_err(cmd_name, 0, "Extent handle not open"); + com_err(argv[0], 0, "Extent handle not open"); return; } retval = ext2fs_extent_get(current_handle, op, &extent); if (retval) { - com_err(cmd_name, retval, 0); + com_err(argv[0], retval, 0); return; } dbg_print_extent(0, &extent); } -void do_current_node(int argc, char *argv[]) +void do_current_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_CURRENT); + generic_goto_node("current_node", argc, argv, EXT2_EXTENT_CURRENT); } -void do_root_node(int argc, char *argv[]) +void do_root_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_ROOT); + generic_goto_node("root_node", argc, argv, EXT2_EXTENT_ROOT); } -void do_last_leaf(int argc, char *argv[]) +void do_last_leaf(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_LAST_LEAF); + generic_goto_node("last_leaf", argc, argv, EXT2_EXTENT_LAST_LEAF); } -void do_first_sib(int argc, char *argv[]) +void do_first_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_FIRST_SIB); + generic_goto_node("first_sib", argc, argv, EXT2_EXTENT_FIRST_SIB); } -void do_last_sib(int argc, char *argv[]) +void do_last_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_LAST_SIB); + generic_goto_node("next_sib", argc, argv, EXT2_EXTENT_LAST_SIB); } -void do_next_sib(int argc, char *argv[]) +void do_next_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_NEXT_SIB); + generic_goto_node("next_sib", argc, argv, EXT2_EXTENT_NEXT_SIB); } -void do_prev_sib(int argc, char *argv[]) +void do_prev_sib(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_PREV_SIB); + generic_goto_node("prev_sib", argc, argv, EXT2_EXTENT_PREV_SIB); } -void do_next_leaf(int argc, char *argv[]) +void do_next_leaf(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_NEXT_LEAF); + generic_goto_node("next_leaf", argc, argv, EXT2_EXTENT_NEXT_LEAF); } -void do_prev_leaf(int argc, char *argv[]) +void do_prev_leaf(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_PREV_LEAF); + generic_goto_node("prev_leaf", argc, argv, EXT2_EXTENT_PREV_LEAF); } -void do_next(int argc, char *argv[]) +void do_next(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_NEXT); + generic_goto_node("next", argc, argv, EXT2_EXTENT_NEXT); } -void do_prev(int argc, char *argv[]) +void do_prev(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_PREV); + generic_goto_node("prev", argc, argv, EXT2_EXTENT_PREV); } -void do_up(int argc, char *argv[]) +void do_up(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_UP); + generic_goto_node("up", argc, argv, EXT2_EXTENT_UP); } -void do_down(int argc, char *argv[]) +void do_down(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - generic_goto_node(argv[0], EXT2_EXTENT_DOWN); + generic_goto_node("down", argc, argv, EXT2_EXTENT_DOWN); } -void do_delete_node(int argc, char *argv[]) +void do_delete_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { struct ext2fs_extent extent; errcode_t retval; - int err; if (common_extent_args_process(argc, argv, 1, 1, "delete_node", "", CHECK_FS_RW | CHECK_FS_BITMAPS)) @@ -239,7 +262,8 @@ void do_delete_node(int argc, char *argv[]) dbg_print_extent(0, &extent); } -void do_replace_node(int argc, char *argv[]) +void do_replace_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { const char *usage = "[--uninit] "; errcode_t retval; @@ -263,15 +287,15 @@ void do_replace_node(int argc, char *argv[]) return; } - extent.e_lblk = parse_ulong(argv[1], argv[0], "logical block", &err); + err = strtoblk(argv[0], argv[1], "logical block", &extent.e_lblk); if (err) return; - extent.e_len = parse_ulong(argv[2], argv[0], "logical block", &err); + extent.e_len = parse_ulong(argv[2], argv[0], "length", &err); if (err) return; - extent.e_pblk = parse_ulong(argv[3], argv[0], "logical block", &err); + err = strtoblk(argv[0], argv[3], "physical block", &extent.e_pblk); if (err) return; @@ -280,14 +304,13 @@ void do_replace_node(int argc, char *argv[]) com_err(argv[0], retval, 0); return; } - do_current_node(argc, argv); + generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT); } -void do_split_node(int argc, char *argv[]) +void do_split_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { errcode_t retval; - struct ext2fs_extent extent; - int err; if (common_extent_args_process(argc, argv, 1, 1, "split_node", "", CHECK_FS_RW | CHECK_FS_BITMAPS)) @@ -298,10 +321,11 @@ void do_split_node(int argc, char *argv[]) com_err(argv[0], retval, 0); return; } - do_current_node(argc, argv); + generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT); } -void do_insert_node(int argc, char *argv[]) +void do_insert_node(int argc, char *argv[], int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { const char *usage = "[--after] [--uninit] "; errcode_t retval; @@ -339,18 +363,15 @@ void do_insert_node(int argc, char *argv[]) return; } - extent.e_lblk = parse_ulong(argv[1], cmd, - "logical block", &err); + err = strtoblk(cmd, argv[1], "logical block", &extent.e_lblk); if (err) return; - extent.e_len = parse_ulong(argv[2], cmd, - "length", &err); + extent.e_len = parse_ulong(argv[2], cmd, "length", &err); if (err) return; - extent.e_pblk = parse_ulong(argv[3], cmd, - "pysical block", &err); + err = strtoblk(cmd, argv[3], "physical block", &extent.e_pblk); if (err) return; @@ -359,16 +380,17 @@ void do_insert_node(int argc, char *argv[]) com_err(cmd, retval, 0); return; } - do_current_node(argc, argv); + generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT); } -void do_set_bmap(int argc, char **argv) +void do_set_bmap(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { const char *usage = "[--uninit] "; struct ext2fs_extent extent; errcode_t retval; - blk_t logical; - blk_t physical; + blk64_t logical; + blk64_t physical; char *cmd = argv[0]; int flags = 0; int err; @@ -388,18 +410,16 @@ void do_set_bmap(int argc, char **argv) return; } - logical = parse_ulong(argv[1], cmd, - "logical block", &err); + err = strtoblk(cmd, argv[1], "logical block", &logical); if (err) return; - physical = parse_ulong(argv[2], cmd, - "physical block", &err); + err = strtoblk(cmd, argv[2], "physical block", &physical); if (err) return; retval = ext2fs_extent_set_bmap(current_handle, logical, - (blk64_t) physical, flags); + physical, flags); if (retval) { com_err(cmd, retval, 0); return; @@ -412,7 +432,8 @@ void do_set_bmap(int argc, char **argv) dbg_print_extent(0, &extent); } -void do_print_all(int argc, char **argv) +void do_print_all(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { const char *usage = "[--leaf-only|--reverse|--reverse-leaf]"; struct ext2fs_extent extent; @@ -463,10 +484,9 @@ void do_print_all(int argc, char **argv) } } -void do_fix_parents(int argc, char **argv) +void do_fix_parents(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - struct ext2fs_extent extent; - struct ext2_extent_info info; errcode_t retval; if (common_extent_args_process(argc, argv, 1, 1, "fix_parents", "", @@ -480,7 +500,8 @@ void do_fix_parents(int argc, char **argv) } } -void do_info(int argc, char **argv) +void do_info(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { struct ext2fs_extent extent; struct ext2_extent_info info; @@ -507,17 +528,17 @@ void do_info(int argc, char **argv) printf("Current handle location: %d/%d (max: %d, bytes %d), level %d/%d\n", info.curr_entry, info.num_entries, info.max_entries, info.bytes_avail, info.curr_level, info.max_depth); - printf("\tmax lblk: %llu, max pblk: %llu\n", info.max_lblk, - info.max_pblk); + printf("\tmax lblk: %llu, max pblk: %llu\n", + (unsigned long long) info.max_lblk, + (unsigned long long) info.max_pblk); printf("\tmax_len: %u, max_uninit_len: %u\n", info.max_len, info.max_uninit_len); } -void do_goto_block(int argc, char **argv) +void do_goto_block(int argc, char **argv, int sci_idx EXT2FS_ATTR((unused)), + void *infop EXT2FS_ATTR((unused))) { - struct ext2fs_extent extent; errcode_t retval; - int op = EXT2_EXTENT_NEXT_LEAF; blk64_t blk; int level = 0, err; @@ -525,7 +546,7 @@ void do_goto_block(int argc, char **argv) "block [level]", 0)) return; - if (strtoblk(argv[0], argv[1], &blk)) + if (strtoblk(argv[0], argv[1], NULL, &blk)) return; if (argc == 3) { @@ -543,5 +564,5 @@ void do_goto_block(int argc, char **argv) return; } - generic_goto_node(argv[0], EXT2_EXTENT_CURRENT); + generic_goto_node(NULL, argc, argv, EXT2_EXTENT_CURRENT); }