diff options
| author | Denys Vlasenko <vda.linux@googlemail.com> | 2012-06-12 15:00:35 +0200 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2012-06-12 15:00:35 +0200 |
| commit | ac164dd2a7b7eefdc146ec2b0d448d029bc07ec0 (patch) | |
| tree | 00a0a6999c2c8d8c9141c335382e086b92b0a5f3 | |
| parent | 70fc8c17e2d032f34162f7abc3e65a67c0ff272a (diff) | |
| download | busybox-w32-ac164dd2a7b7eefdc146ec2b0d448d029bc07ec0.tar.gz busybox-w32-ac164dd2a7b7eefdc146ec2b0d448d029bc07ec0.tar.bz2 busybox-w32-ac164dd2a7b7eefdc146ec2b0d448d029bc07ec0.zip | |
volume_id/ext: use common bb_e2fs_defs.h for ext2/3/4 constants and structs
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
| -rw-r--r-- | include/bb_e2fs_defs.h | 33 | ||||
| -rw-r--r-- | util-linux/volume_id/ext.c | 74 |
2 files changed, 35 insertions, 72 deletions
diff --git a/include/bb_e2fs_defs.h b/include/bb_e2fs_defs.h index 7974497ca..071c660c5 100644 --- a/include/bb_e2fs_defs.h +++ b/include/bb_e2fs_defs.h | |||
| @@ -463,6 +463,7 @@ struct ext2_super_block { | |||
| 463 | #define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \ | 463 | #define EXT2_HAS_INCOMPAT_FEATURE(sb,mask) \ |
| 464 | ( EXT2_SB(sb)->s_feature_incompat & (mask) ) | 464 | ( EXT2_SB(sb)->s_feature_incompat & (mask) ) |
| 465 | 465 | ||
| 466 | /* for s_feature_compat */ | ||
| 466 | #define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 | 467 | #define EXT2_FEATURE_COMPAT_DIR_PREALLOC 0x0001 |
| 467 | #define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 | 468 | #define EXT2_FEATURE_COMPAT_IMAGIC_INODES 0x0002 |
| 468 | #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 | 469 | #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 |
| @@ -470,23 +471,45 @@ struct ext2_super_block { | |||
| 470 | #define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010 | 471 | #define EXT2_FEATURE_COMPAT_RESIZE_INO 0x0010 |
| 471 | #define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 | 472 | #define EXT2_FEATURE_COMPAT_DIR_INDEX 0x0020 |
| 472 | 473 | ||
| 474 | /* for s_feature_ro_compat */ | ||
| 473 | #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 | 475 | #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 |
| 474 | #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 | 476 | #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 |
| 475 | /* #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 not used */ | 477 | #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 /* not used */ |
| 478 | #define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008 | ||
| 479 | #define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 | ||
| 480 | #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 | ||
| 481 | #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 | ||
| 476 | 482 | ||
| 483 | /* for s_feature_incompat */ | ||
| 477 | #define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 | 484 | #define EXT2_FEATURE_INCOMPAT_COMPRESSION 0x0001 |
| 478 | #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 | 485 | #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 |
| 479 | #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 /* Needs recovery */ | 486 | #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 |
| 480 | #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 /* Journal device */ | 487 | #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 |
| 481 | #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 | 488 | #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 |
| 482 | #define EXT3_FEATURE_INCOMPAT_EXTENTS 0x0040 | 489 | #define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 |
| 490 | #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 | ||
| 491 | #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 | ||
| 492 | #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 | ||
| 483 | 493 | ||
| 484 | 494 | ||
| 485 | #define EXT2_FEATURE_COMPAT_SUPP 0 | 495 | #define EXT2_FEATURE_COMPAT_SUPP 0 |
| 486 | #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE) | ||
| 487 | #define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | 496 | #define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ |
| 488 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | 497 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ |
| 489 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | 498 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) |
| 499 | #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
| 500 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
| 501 | #define EXT2_FEATURE_INCOMPAT_UNSUPPORTED (~EXT2_FEATURE_INCOMPAT_SUPP) | ||
| 502 | #define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED (~EXT2_FEATURE_RO_COMPAT_SUPP) | ||
| 503 | |||
| 504 | #define EXT3_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
| 505 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
| 506 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | ||
| 507 | #define EXT3_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
| 508 | EXT3_FEATURE_INCOMPAT_RECOVER| \ | ||
| 509 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
| 510 | #define EXT3_FEATURE_INCOMPAT_UNSUPPORTED (~EXT3_FEATURE_INCOMPAT_SUPP) | ||
| 511 | #define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED (~EXT3_FEATURE_RO_COMPAT_SUPP) | ||
| 512 | |||
| 490 | 513 | ||
| 491 | /* | 514 | /* |
| 492 | * Default values for user and/or group using reserved blocks | 515 | * Default values for user and/or group using reserved blocks |
diff --git a/util-linux/volume_id/ext.c b/util-linux/volume_id/ext.c index aa23d1ebf..97451067f 100644 --- a/util-linux/volume_id/ext.c +++ b/util-linux/volume_id/ext.c | |||
| @@ -19,70 +19,10 @@ | |||
| 19 | */ | 19 | */ |
| 20 | 20 | ||
| 21 | #include "volume_id_internal.h" | 21 | #include "volume_id_internal.h" |
| 22 | 22 | #include "bb_e2fs_defs.h" | |
| 23 | struct ext2_super_block { | ||
| 24 | uint32_t inodes_count; | ||
| 25 | uint32_t blocks_count; | ||
| 26 | uint32_t r_blocks_count; | ||
| 27 | uint32_t free_blocks_count; | ||
| 28 | uint32_t free_inodes_count; | ||
| 29 | uint32_t first_data_block; | ||
| 30 | uint32_t log_block_size; | ||
| 31 | uint32_t dummy3[7]; | ||
| 32 | uint8_t magic[2]; | ||
| 33 | uint16_t state; | ||
| 34 | uint32_t dummy5[8]; | ||
| 35 | uint32_t feature_compat; | ||
| 36 | uint32_t feature_incompat; | ||
| 37 | uint32_t feature_ro_compat; | ||
| 38 | uint8_t uuid[16]; | ||
| 39 | uint8_t volume_name[16]; | ||
| 40 | } PACKED; | ||
| 41 | 23 | ||
| 42 | #define EXT_SUPERBLOCK_OFFSET 0x400 | 24 | #define EXT_SUPERBLOCK_OFFSET 0x400 |
| 43 | 25 | ||
| 44 | /* for s_flags */ | ||
| 45 | #define EXT2_FLAGS_TEST_FILESYS 0x0004 | ||
| 46 | |||
| 47 | /* for s_feature_compat */ | ||
| 48 | #define EXT3_FEATURE_COMPAT_HAS_JOURNAL 0x0004 | ||
| 49 | |||
| 50 | /* for s_feature_ro_compat */ | ||
| 51 | #define EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER 0x0001 | ||
| 52 | #define EXT2_FEATURE_RO_COMPAT_LARGE_FILE 0x0002 | ||
| 53 | #define EXT2_FEATURE_RO_COMPAT_BTREE_DIR 0x0004 | ||
| 54 | #define EXT4_FEATURE_RO_COMPAT_HUGE_FILE 0x0008 | ||
| 55 | #define EXT4_FEATURE_RO_COMPAT_GDT_CSUM 0x0010 | ||
| 56 | #define EXT4_FEATURE_RO_COMPAT_DIR_NLINK 0x0020 | ||
| 57 | #define EXT4_FEATURE_RO_COMPAT_EXTRA_ISIZE 0x0040 | ||
| 58 | |||
| 59 | /* for s_feature_incompat */ | ||
| 60 | #define EXT2_FEATURE_INCOMPAT_FILETYPE 0x0002 | ||
| 61 | #define EXT3_FEATURE_INCOMPAT_RECOVER 0x0004 | ||
| 62 | #define EXT3_FEATURE_INCOMPAT_JOURNAL_DEV 0x0008 | ||
| 63 | #define EXT2_FEATURE_INCOMPAT_META_BG 0x0010 | ||
| 64 | #define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ | ||
| 65 | #define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 | ||
| 66 | #define EXT4_FEATURE_INCOMPAT_MMP 0x0100 | ||
| 67 | #define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 | ||
| 68 | |||
| 69 | #define EXT2_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
| 70 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
| 71 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | ||
| 72 | #define EXT2_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
| 73 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
| 74 | #define EXT2_FEATURE_INCOMPAT_UNSUPPORTED ~EXT2_FEATURE_INCOMPAT_SUPP | ||
| 75 | #define EXT2_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT2_FEATURE_RO_COMPAT_SUPP | ||
| 76 | |||
| 77 | #define EXT3_FEATURE_RO_COMPAT_SUPP (EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER| \ | ||
| 78 | EXT2_FEATURE_RO_COMPAT_LARGE_FILE| \ | ||
| 79 | EXT2_FEATURE_RO_COMPAT_BTREE_DIR) | ||
| 80 | #define EXT3_FEATURE_INCOMPAT_SUPP (EXT2_FEATURE_INCOMPAT_FILETYPE| \ | ||
| 81 | EXT3_FEATURE_INCOMPAT_RECOVER| \ | ||
| 82 | EXT2_FEATURE_INCOMPAT_META_BG) | ||
| 83 | #define EXT3_FEATURE_INCOMPAT_UNSUPPORTED ~EXT3_FEATURE_INCOMPAT_SUPP | ||
| 84 | #define EXT3_FEATURE_RO_COMPAT_UNSUPPORTED ~EXT3_FEATURE_RO_COMPAT_SUPP | ||
| 85 | |||
| 86 | int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) | 26 | int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) |
| 87 | { | 27 | { |
| 88 | #define off ((uint64_t)0) | 28 | #define off ((uint64_t)0) |
| @@ -94,24 +34,24 @@ int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) | |||
| 94 | if (es == NULL) | 34 | if (es == NULL) |
| 95 | return -1; | 35 | return -1; |
| 96 | 36 | ||
| 97 | if (es->magic[0] != 0123 || es->magic[1] != 0357) { | 37 | if (es->s_magic != cpu_to_le16(EXT2_SUPER_MAGIC)) { |
| 98 | dbg("ext: no magic found"); | 38 | dbg("ext: no magic found"); |
| 99 | return -1; | 39 | return -1; |
| 100 | } | 40 | } |
| 101 | 41 | ||
| 102 | // volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); | 42 | // volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); |
| 103 | // volume_id_set_label_raw(id, es->volume_name, 16); | 43 | // volume_id_set_label_raw(id, es->volume_name, 16); |
| 104 | volume_id_set_label_string(id, es->volume_name, 16); | 44 | volume_id_set_label_string(id, (void*)es->s_volume_name, 16); |
| 105 | volume_id_set_uuid(id, es->uuid, UUID_DCE); | 45 | volume_id_set_uuid(id, es->s_uuid, UUID_DCE); |
| 106 | dbg("ext: label '%s' uuid '%s'", id->label, id->uuid); | 46 | dbg("ext: label '%s' uuid '%s'", id->label, id->uuid); |
| 107 | 47 | ||
| 108 | #if ENABLE_FEATURE_BLKID_TYPE | 48 | #if ENABLE_FEATURE_BLKID_TYPE |
| 109 | if ((es->feature_ro_compat & cpu_to_le32(EXT4_FEATURE_RO_COMPAT_HUGE_FILE | EXT4_FEATURE_RO_COMPAT_DIR_NLINK)) | 49 | if ((es->s_feature_ro_compat & cpu_to_le32(EXT4_FEATURE_RO_COMPAT_HUGE_FILE | EXT4_FEATURE_RO_COMPAT_DIR_NLINK)) |
| 110 | || (es->feature_incompat & cpu_to_le32(EXT4_FEATURE_INCOMPAT_EXTENTS | EXT4_FEATURE_INCOMPAT_64BIT)) | 50 | || (es->s_feature_incompat & cpu_to_le32(EXT4_FEATURE_INCOMPAT_EXTENTS | EXT4_FEATURE_INCOMPAT_64BIT)) |
| 111 | ) { | 51 | ) { |
| 112 | id->type = "ext4"; | 52 | id->type = "ext4"; |
| 113 | } | 53 | } |
| 114 | else if (es->feature_compat & cpu_to_le32(EXT3_FEATURE_COMPAT_HAS_JOURNAL)) | 54 | else if (es->s_feature_compat & cpu_to_le32(EXT3_FEATURE_COMPAT_HAS_JOURNAL)) |
| 115 | id->type = "ext3"; | 55 | id->type = "ext3"; |
| 116 | else | 56 | else |
| 117 | id->type = "ext2"; | 57 | id->type = "ext2"; |
