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>
This commit is contained in:
parent
a58f7b7d2f
commit
07b419dbcb
@ -131,6 +131,27 @@ struct hfsplus_vol_header {
|
|||||||
#define HFS_NODE_LEAF 0xff
|
#define HFS_NODE_LEAF 0xff
|
||||||
#define HFSPLUS_POR_CNID 1
|
#define HFSPLUS_POR_CNID 1
|
||||||
|
|
||||||
|
static void FAST_FUNC hfs_set_uuid(struct volume_id *id, const uint8_t *hfs_id)
|
||||||
|
{
|
||||||
|
#define hfs_id_len 8
|
||||||
|
md5_ctx_t md5c;
|
||||||
|
uint8_t uuid[16];
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for (i = 0; i < hfs_id_len; i++)
|
||||||
|
if (hfs_id[i] != 0)
|
||||||
|
goto do_md5;
|
||||||
|
return;
|
||||||
|
do_md5:
|
||||||
|
md5_begin(&md5c);
|
||||||
|
md5_hash(&md5c, "\263\342\17\71\362\222\21\326\227\244\0\60\145\103\354\254", 16);
|
||||||
|
md5_hash(&md5c, hfs_id, hfs_id_len);
|
||||||
|
md5_end(&md5c, uuid);
|
||||||
|
uuid[6] = 0x30 | (uuid[6] & 0x0f);
|
||||||
|
uuid[8] = 0x80 | (uuid[8] & 0x3f);
|
||||||
|
volume_id_set_uuid(id, uuid, UUID_DCE);
|
||||||
|
}
|
||||||
|
|
||||||
int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/)
|
int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/)
|
||||||
{
|
{
|
||||||
uint64_t off = 0;
|
uint64_t off = 0;
|
||||||
@ -193,7 +214,7 @@ int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/
|
|||||||
volume_id_set_label_string(id, hfs->label, hfs->label_len) ;
|
volume_id_set_label_string(id, hfs->label, hfs->label_len) ;
|
||||||
}
|
}
|
||||||
|
|
||||||
volume_id_set_uuid(id, hfs->finder_info.id, UUID_HFS);
|
hfs_set_uuid(id, hfs->finder_info.id);
|
||||||
// volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
// volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
||||||
IF_FEATURE_BLKID_TYPE(id->type = "hfs";)
|
IF_FEATURE_BLKID_TYPE(id->type = "hfs";)
|
||||||
|
|
||||||
@ -207,7 +228,7 @@ int FAST_FUNC volume_id_probe_hfs_hfsplus(struct volume_id *id /*,uint64_t off*/
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
hfsplus:
|
hfsplus:
|
||||||
volume_id_set_uuid(id, hfsplus->finder_info.id, UUID_HFS);
|
hfs_set_uuid(id, hfsplus->finder_info.id);
|
||||||
|
|
||||||
blocksize = be32_to_cpu(hfsplus->blocksize);
|
blocksize = be32_to_cpu(hfsplus->blocksize);
|
||||||
dbg("blocksize %u", blocksize);
|
dbg("blocksize %u", blocksize);
|
||||||
|
@ -142,7 +142,6 @@ void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_form
|
|||||||
count = 4;
|
count = 4;
|
||||||
break;
|
break;
|
||||||
case UUID_NTFS:
|
case UUID_NTFS:
|
||||||
case UUID_HFS:
|
|
||||||
count = 8;
|
count = 8;
|
||||||
break;
|
break;
|
||||||
case UUID_DCE:
|
case UUID_DCE:
|
||||||
@ -173,11 +172,6 @@ set:
|
|||||||
buf[7], buf[6], buf[5], buf[4],
|
buf[7], buf[6], buf[5], buf[4],
|
||||||
buf[3], buf[2], buf[1], buf[0]);
|
buf[3], buf[2], buf[1], buf[0]);
|
||||||
break;
|
break;
|
||||||
case UUID_HFS:
|
|
||||||
sprintf(id->uuid, "%02X%02X%02X%02X%02X%02X%02X%02X",
|
|
||||||
buf[0], buf[1], buf[2], buf[3],
|
|
||||||
buf[4], buf[5], buf[6], buf[7]);
|
|
||||||
break;
|
|
||||||
case UUID_DCE:
|
case UUID_DCE:
|
||||||
sprintf(id->uuid,
|
sprintf(id->uuid,
|
||||||
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
"%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
|
||||||
|
@ -141,7 +141,6 @@ enum uuid_format {
|
|||||||
UUID_DCE,
|
UUID_DCE,
|
||||||
UUID_DOS,
|
UUID_DOS,
|
||||||
UUID_NTFS,
|
UUID_NTFS,
|
||||||
UUID_HFS,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
enum endian {
|
enum endian {
|
||||||
|
Loading…
Reference in New Issue
Block a user