diff options
| author | Sven-Göran Bergh <sgb@systemasis.org> | 2013-01-14 00:37:00 +0100 |
|---|---|---|
| committer | Denys Vlasenko <vda.linux@googlemail.com> | 2013-01-14 00:37:00 +0100 |
| commit | 07b419dbcb34958d0f6050231783bd78f7d0344f (patch) | |
| tree | f3488ec84172a9e69b3ffb2e9e4cecf0b8854e6f /util-linux | |
| parent | a58f7b7d2f73b84638a8e8c14a142d4a03678eeb (diff) | |
| download | busybox-w32-07b419dbcb34958d0f6050231783bd78f7d0344f.tar.gz busybox-w32-07b419dbcb34958d0f6050231783bd78f7d0344f.tar.bz2 busybox-w32-07b419dbcb34958d0f6050231783bd78f7d0344f.zip | |
volume_id: display hfs[+] 128-bit UUID properly
Signed-off-by: Sven-Göran Bergh <sgb@systemasis.org>
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'util-linux')
| -rw-r--r-- | util-linux/volume_id/hfs.c | 25 | ||||
| -rw-r--r-- | util-linux/volume_id/util.c | 6 | ||||
| -rw-r--r-- | util-linux/volume_id/volume_id_internal.h | 1 |
3 files changed, 23 insertions, 9 deletions
diff --git a/util-linux/volume_id/hfs.c b/util-linux/volume_id/hfs.c index dd5ec2415..3d9704d12 100644 --- a/util-linux/volume_id/hfs.c +++ b/util-linux/volume_id/hfs.c | |||
| @@ -131,6 +131,27 @@ struct hfsplus_vol_header { | |||
| 131 | #define HFS_NODE_LEAF 0xff | 131 | #define HFS_NODE_LEAF 0xff |
| 132 | #define HFSPLUS_POR_CNID 1 | 132 | #define HFSPLUS_POR_CNID 1 |
| 133 | 133 | ||
| 134 | static void FAST_FUNC hfs_set_uuid(struct volume_id *id, const uint8_t *hfs_id) | ||
| 135 | { | ||
| 136 | #define hfs_id_len 8 | ||
| 137 | md5_ctx_t md5c; | ||
| 138 | uint8_t uuid[16]; | ||
| 139 | unsigned i; | ||
| 140 | |||
| 141 | for (i = 0; i < hfs_id_len; i++) | ||
| 142 | if (hfs_id[i] != 0) | ||
| 143 | goto do_md5; | ||
| 144 | return; | ||
| 145 | do_md5: | ||
| 146 | md5_begin(&md5c); | ||
| 147 | md5_hash(&md5c, "\263\342\17\71\362\222\21\326\227\244\0\60\145\103\354\254", 16); | ||
| 148 | md5_hash(&md5c, hfs_id, hfs_id_len); | ||
| 149 | md5_end(&md5c, uuid); | ||
| 150 | uuid[6] = 0x30 | (uuid[6] & 0x0f); | ||
| 151 | uuid[8] = 0x80 | (uuid[8] & 0x3f); | ||
| 152 | volume_id_set_uuid(id, uuid, UUID_DCE); | ||
| 153 | } | ||
| 154 | |||
| 134 | int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/) | 155 | int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/) |
| 135 | { | 156 | { |
| 136 | uint64_t off = 0; | 157 | uint64_t off = 0; |
| @@ -193,7 +214,7 @@ int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/ | |||
| 193 | volume_id_set_label_string(id, hfs->label, hfs->label_len) ; | 214 | volume_id_set_label_string(id, hfs->label, hfs->label_len) ; |
| 194 | } | 215 | } |
| 195 | 216 | ||
| 196 | volume_id_set_uuid(id, hfs->finder_info.id, UUID_HFS); | 217 | hfs_set_uuid(id, hfs->finder_info.id); |
| 197 | // volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); | 218 | // volume_id_set_usage(id, VOLUME_ID_FILESYSTEM); |
| 198 | IF_FEATURE_BLKID_TYPE(id->type = "hfs";) | 219 | IF_FEATURE_BLKID_TYPE(id->type = "hfs";) |
| 199 | 220 | ||
| @@ -207,7 +228,7 @@ int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/ | |||
| 207 | return -1; | 228 | return -1; |
| 208 | 229 | ||
| 209 | hfsplus: | 230 | hfsplus: |
| 210 | volume_id_set_uuid(id, hfsplus->finder_info.id, UUID_HFS); | 231 | hfs_set_uuid(id, hfsplus->finder_info.id); |
| 211 | 232 | ||
| 212 | blocksize = be32_to_cpu(hfsplus->blocksize); | 233 | blocksize = be32_to_cpu(hfsplus->blocksize); |
| 213 | dbg("blocksize %u", blocksize); | 234 | dbg("blocksize %u", blocksize); |
diff --git a/util-linux/volume_id/util.c b/util-linux/volume_id/util.c index 69e43dda8..11ee0d52e 100644 --- a/util-linux/volume_id/util.c +++ b/util-linux/volume_id/util.c | |||
| @@ -142,7 +142,6 @@ void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_form | |||
| 142 | count = 4; | 142 | count = 4; |
| 143 | break; | 143 | break; |
| 144 | case UUID_NTFS: | 144 | case UUID_NTFS: |
| 145 | case UUID_HFS: | ||
| 146 | count = 8; | 145 | count = 8; |
| 147 | break; | 146 | break; |
| 148 | case UUID_DCE: | 147 | case UUID_DCE: |
| @@ -173,11 +172,6 @@ set: | |||
| 173 | buf[7], buf[6], buf[5], buf[4], | 172 | buf[7], buf[6], buf[5], buf[4], |
| 174 | buf[3], buf[2], buf[1], buf[0]); | 173 | buf[3], buf[2], buf[1], buf[0]); |
| 175 | break; | 174 | break; |
| 176 | case UUID_HFS: | ||
| 177 | sprintf(id->uuid, "%02X%02X%02X%02X%02X%02X%02X%02X", | ||
| 178 | buf[0], buf[1], buf[2], buf[3], | ||
| 179 | buf[4], buf[5], buf[6], buf[7]); | ||
| 180 | break; | ||
| 181 | case UUID_DCE: | 175 | case UUID_DCE: |
| 182 | sprintf(id->uuid, | 176 | sprintf(id->uuid, |
| 183 | "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", | 177 | "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x", |
diff --git a/util-linux/volume_id/volume_id_internal.h b/util-linux/volume_id/volume_id_internal.h index 03dc46f27..dd62df399 100644 --- a/util-linux/volume_id/volume_id_internal.h +++ b/util-linux/volume_id/volume_id_internal.h | |||
| @@ -141,7 +141,6 @@ enum uuid_format { | |||
| 141 | UUID_DCE, | 141 | UUID_DCE, |
| 142 | UUID_DOS, | 142 | UUID_DOS, |
| 143 | UUID_NTFS, | 143 | UUID_NTFS, |
| 144 | UUID_HFS, | ||
| 145 | }; | 144 | }; |
| 146 | 145 | ||
| 147 | enum endian { | 146 | enum endian { |
