diff options
author | Theodore Ts'o <tytso@mit.edu> | 2023-03-16 23:17:24 -0400 |
---|---|---|
committer | Theodore Ts'o <tytso@mit.edu> | 2023-03-16 23:42:40 -0400 |
commit | 2c28057878adf90bb96c07c77e3df2725261b0b6 (patch) | |
tree | 4be67dd3bd9d641601df447200ca94c8b9969171 | |
parent | 79a7b5e1f387caf907ec88460cdb39b8364bfb0b (diff) | |
download | e2fsprogs-2c28057878adf90bb96c07c77e3df2725261b0b6.tar.gz |
e2fsck: restructure code to reduce indentation level in check_dir_block()
No functional changes; just move things around so we can avoid
indenting the code quite so much.
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
-rw-r--r-- | e2fsck/pass2.c | 92 |
1 files changed, 46 insertions, 46 deletions
diff --git a/e2fsck/pass2.c b/e2fsck/pass2.c index 2700e3409..47f9206fb 100644 --- a/e2fsck/pass2.c +++ b/e2fsck/pass2.c @@ -1353,56 +1353,56 @@ skip_checksum: } } if (problem) { - if (fix_problem(ctx, PR_2_DIR_CORRUPTED, - &cd->pctx)) { #ifdef WORDS_BIGENDIAN - /* - * On big-endian systems, if the dirent - * swap routine finds a rec_len that it - * doesn't like, it continues - * processing the block as if rec_len - * == EXT2_DIR_ENTRY_HEADER_LEN. This means that the name - * field gets byte swapped, which means - * that salvage will not detect the - * correct name length (unless the name - * has a length that's an exact - * multiple of four bytes), and it'll - * discard the entry (unnecessarily) - * and the rest of the dirent block. - * Therefore, swap the rest of the - * block back to disk order, run - * salvage, and re-swap anything after - * the salvaged dirent. - */ - int need_reswab = 0; - if (rec_len < EXT2_DIR_ENTRY_HEADER_LEN || rec_len % 4) { - need_reswab = 1; - ext2fs_dirent_swab_in2(fs, - ((char *)dirent) + EXT2_DIR_ENTRY_HEADER_LEN, - max_block_size - offset - EXT2_DIR_ENTRY_HEADER_LEN, - 0); - } + int need_reswab = 0; #endif - salvage_directory(fs, dirent, prev, - &offset, - max_block_size, - hash_in_dirent); + + if (!fix_problem(ctx, PR_2_DIR_CORRUPTED, + &cd->pctx)) + goto abort_free_dict; #ifdef WORDS_BIGENDIAN - if (need_reswab) { - unsigned int len; - - (void) ext2fs_get_rec_len(fs, - dirent, &len); - len += offset; - if (max_block_size > len) - ext2fs_dirent_swab_in2(fs, - ((char *)dirent) + len, max_block_size - len, 0); - } + /* + * On big-endian systems, if the dirent + * swap routine finds a rec_len that it + * doesn't like, it continues processing + * the block as if rec_len == + * EXT2_DIR_ENTRY_HEADER_LEN. This means + * that the name field gets byte swapped, + * which means that salvage will not detect + * the correct name length (unless the name + * has a length that's an exact multiple of + * four bytes), and it'll discard the entry + * (unnecessarily) and the rest of the + * dirent block. Therefore, swap the rest + * of the block back to disk order, run + * salvage, and re-swap anything after the + * salvaged dirent. + */ + if (rec_len < EXT2_DIR_ENTRY_HEADER_LEN || + rec_len % 4) { + need_reswab = 1; + ext2fs_dirent_swab_in2(fs, + ((char *)dirent) + EXT2_DIR_ENTRY_HEADER_LEN, + max_block_size - offset - EXT2_DIR_ENTRY_HEADER_LEN, 0); + } #endif - dir_modified++; - continue; - } else - goto abort_free_dict; + salvage_directory(fs, dirent, prev, &offset, + max_block_size, + hash_in_dirent); +#ifdef WORDS_BIGENDIAN + if (need_reswab) { + unsigned int len; + + (void) ext2fs_get_rec_len(fs, dirent, + &len); + len += offset; + if (max_block_size > len) + ext2fs_dirent_swab_in2(fs, + ((char *)dirent) + len, max_block_size - len, 0); + } +#endif + dir_modified++; + continue; } } else { if (dot_state == 0) { |