aboutsummaryrefslogtreecommitdiff
path: root/util-linux/volume_id/ext.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2012-06-12 15:00:35 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2012-06-12 15:00:35 +0200
commitac164dd2a7b7eefdc146ec2b0d448d029bc07ec0 (patch)
tree00a0a6999c2c8d8c9141c335382e086b92b0a5f3 /util-linux/volume_id/ext.c
parent70fc8c17e2d032f34162f7abc3e65a67c0ff272a (diff)
downloadbusybox-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>
Diffstat (limited to 'util-linux/volume_id/ext.c')
-rw-r--r--util-linux/volume_id/ext.c74
1 files changed, 7 insertions, 67 deletions
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"
23struct 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
86int FAST_FUNC volume_id_probe_ext(struct volume_id *id /*,uint64_t off*/) 26int 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";