Changeset c00e729 in mainline
- Timestamp:
- 2011-02-13T23:19:12Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f6fa2c2
- Parents:
- 8bd5dad
- Location:
- uspace
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/ext2info/ext2info.c
r8bd5dad rc00e729 53 53 54 54 static void syntax_print(void); 55 static void print_superblock(ext2_superblock_t *sb); 55 56 56 57 int main(int argc, char **argv) … … 61 62 devmap_handle_t handle; 62 63 ext2_filesystem_t filesystem; 63 64 uint16_t magic;65 64 66 65 if (argc < 2) { … … 92 91 } 93 92 94 printf("Superblock:\n"); 95 magic = ext2_superblock_get_magic(filesystem.superblock); 96 if (magic == EXT2_SUPERBLOCK_MAGIC) { 97 printf(" Magic value: %X (correct)\n", magic); 98 } 99 else { 100 printf(" Magic value: %X (incorrect)\n", magic); 101 } 93 print_superblock(filesystem.superblock); 102 94 103 95 ext2_filesystem_fini(&filesystem); … … 109 101 static void syntax_print(void) 110 102 { 111 printf("syntax: blkdump [--offset <num_blocks>] [--count <num_blocks>] <device_name>\n"); 103 printf("syntax: ext2info <device_name>\n"); 104 } 105 106 static void print_superblock(ext2_superblock_t *superblock) 107 { 108 uint16_t magic; 109 uint32_t first_block; 110 uint32_t block_size; 111 uint32_t fragment_size; 112 uint32_t blocks_per_group; 113 uint32_t fragments_per_group; 114 uint32_t rev_major; 115 uint16_t rev_minor; 116 uint16_t state; 117 uint32_t first_inode; 118 uint16_t inode_size; 119 120 int pos; 121 unsigned char c; 122 123 magic = ext2_superblock_get_magic(superblock); 124 first_block = ext2_superblock_get_first_block(superblock); 125 block_size = ext2_superblock_get_block_size(superblock); 126 fragment_size = ext2_superblock_get_fragment_size(superblock); 127 blocks_per_group = ext2_superblock_get_blocks_per_group(superblock); 128 fragments_per_group = ext2_superblock_get_fragments_per_group(superblock); 129 rev_major = ext2_superblock_get_rev_major(superblock); 130 rev_minor = ext2_superblock_get_rev_minor(superblock); 131 state = ext2_superblock_get_state(superblock); 132 first_inode = ext2_superblock_get_first_inode(superblock); 133 inode_size = ext2_superblock_get_inode_size(superblock); 134 135 printf("Superblock:\n"); 136 137 if (magic == EXT2_SUPERBLOCK_MAGIC) { 138 printf(" Magic value: %X (correct)\n", magic); 139 } 140 else { 141 printf(" Magic value: %X (incorrect)\n", magic); 142 } 143 144 printf(" Revision: %u.%hu\n", rev_major, rev_minor); 145 printf(" State: %hu\n", state); 146 printf(" First block: %u\n", first_block); 147 printf(" Block size: %u bytes (%u KiB)\n", block_size, block_size/1024); 148 printf(" Blocks per group: %u\n", blocks_per_group); 149 printf(" Fragment size: %u bytes (%u KiB)\n", fragment_size, 150 fragment_size/1024); 151 printf(" Fragments per group: %u\n", fragments_per_group); 152 printf(" First inode: %u\n", first_inode); 153 printf(" Inode size: %hu bytes\n", inode_size); 154 155 printf(" UUID: "); 156 for (pos = 0; pos < 16; pos++) { 157 printf("%02x", superblock->uuid[pos]); 158 } 159 printf("\n"); 160 161 printf(" Volume label: "); 162 for (pos = 0; pos < 16; pos++) { 163 c = superblock->volume_name[pos]; 164 if (c >= 32 && c < 128) { 165 putchar(c); 166 } 167 else { 168 putchar(' '); 169 } 170 } 171 printf("\n"); 172 112 173 } 113 174 -
uspace/lib/ext2/libext2.h
r8bd5dad rc00e729 50 50 uint8_t unused2[12]; 51 51 uint16_t magic; // Magic value 52 uint16_t state; // State (mounted/unmounted) 53 uint16_t rev_minor; // Minor revision level 54 uint8_t unused3[12]; 55 uint32_t creator_os; 56 uint32_t rev_major; // Major revision level 57 uint8_t unused4[8]; 58 59 // Following is for ext2 revision 1 only 60 uint32_t first_inode; 61 uint16_t inode_size; 62 uint8_t unused5[14]; 63 uint8_t uuid[16]; // UUID TODO: Create a library for UUIDs 64 uint8_t volume_name[16]; 52 65 53 66 // TODO: add __attribute__((aligned(...)) for better performance? … … 69 82 // allow maximum this block size 70 83 #define EXT2_MAX_BLOCK_SIZE 8096 84 #define EXT2_REV0_FIRST_INODE 11 85 #define EXT2_REV0_INODE_SIZE 128 71 86 72 87 inline uint16_t ext2_superblock_get_magic(ext2_superblock_t *); … … 78 93 inline uint32_t ext2_superblock_get_blocks_per_group(ext2_superblock_t *); 79 94 inline uint32_t ext2_superblock_get_fragments_per_group(ext2_superblock_t *); 95 inline uint16_t ext2_superblock_get_state(ext2_superblock_t *); 96 inline uint16_t ext2_superblock_get_rev_minor(ext2_superblock_t *); 97 inline uint32_t ext2_superblock_get_rev_major(ext2_superblock_t *); 98 inline uint32_t ext2_superblock_get_creator_os(ext2_superblock_t *); 99 inline uint32_t ext2_superblock_get_first_inode(ext2_superblock_t *); 100 inline uint16_t ext2_superblock_get_inode_size(ext2_superblock_t *); 80 101 81 102 extern int ext2_superblock_read_direct(devmap_handle_t, ext2_superblock_t **); -
uspace/lib/ext2/libext2_superblock.c
r8bd5dad rc00e729 130 130 } 131 131 132 /** 133 * Get filesystem state 134 * 135 * @param sb pointer to superblock 136 */ 137 inline uint16_t ext2_superblock_get_state(ext2_superblock_t *sb) 138 { 139 return uint16_t_le2host(sb->state); 140 } 141 142 /** 143 * Get minor revision number 144 * 145 * @param sb pointer to superblock 146 */ 147 inline uint16_t ext2_superblock_get_rev_minor(ext2_superblock_t *sb) 148 { 149 return uint16_t_le2host(sb->rev_minor); 150 } 151 152 /** 153 * Get major revision number 154 * 155 * @param sb pointer to superblock 156 */ 157 inline uint32_t ext2_superblock_get_rev_major(ext2_superblock_t *sb) 158 { 159 return uint32_t_le2host(sb->rev_major); 160 } 161 162 /** 163 * Get index of first regular inode 164 * 165 * @param sb pointer to superblock 166 */ 167 inline uint32_t ext2_superblock_get_first_inode(ext2_superblock_t *sb) 168 { 169 if (ext2_superblock_get_rev_major(sb) == 0) { 170 return EXT2_REV0_FIRST_INODE; 171 } 172 return uint32_t_le2host(sb->first_inode); 173 } 174 175 /** 176 * Get size of inode 177 * 178 * @param sb pointer to superblock 179 */ 180 inline uint16_t ext2_superblock_get_inode_size(ext2_superblock_t *sb) 181 { 182 if (ext2_superblock_get_rev_major(sb) == 0) { 183 return EXT2_REV0_INODE_SIZE; 184 } 185 return uint32_t_le2host(sb->inode_size); 186 } 187 132 188 133 189 /** Read a superblock directly from device (i.e. no libblock cache)
Note:
See TracChangeset
for help on using the changeset viewer.