mirror of
https://github.com/systemd/systemd-stable.git
synced 2024-12-23 17:34:00 +03:00
volume_id: add internal UUID_STRING
This commit is contained in:
parent
ee466b321e
commit
444f07fea4
@ -93,7 +93,7 @@ int volume_id_probe_ext(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
|
||||
volume_id_set_label_raw(id, es->s_volume_name, 16);
|
||||
volume_id_set_label_string(id, es->s_volume_name, 16);
|
||||
volume_id_set_uuid(id, es->s_uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, es->s_uuid, 0, UUID_DCE);
|
||||
snprintf(id->type_version, sizeof(id->type_version)-1, "%u.%u",
|
||||
le32_to_cpu(es->s_rev_level), le16_to_cpu(es->s_minor_rev_level));
|
||||
|
||||
|
@ -288,7 +288,7 @@ magic:
|
||||
volume_id_set_label_raw(id, vs->type.fat.label, 11);
|
||||
volume_id_set_label_string(id, vs->type.fat.label, 11);
|
||||
}
|
||||
volume_id_set_uuid(id, vs->type.fat.serno, UUID_DOS);
|
||||
volume_id_set_uuid(id, vs->type.fat.serno, 0, UUID_DOS);
|
||||
goto found;
|
||||
|
||||
fat32:
|
||||
@ -366,7 +366,7 @@ fat32:
|
||||
volume_id_set_label_raw(id, vs->type.fat32.label, 11);
|
||||
volume_id_set_label_string(id, vs->type.fat32.label, 11);
|
||||
}
|
||||
volume_id_set_uuid(id, vs->type.fat32.serno, UUID_DOS);
|
||||
volume_id_set_uuid(id, vs->type.fat32.serno, 0, UUID_DOS);
|
||||
|
||||
found:
|
||||
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
||||
|
@ -160,7 +160,7 @@ static void hfsid_set_uuid(struct volume_id *id, const uint8_t *hfs_id)
|
||||
volume_id_set_uuid(id, uuid, UUID_DCE);
|
||||
#endif
|
||||
|
||||
volume_id_set_uuid(id, hfs_id, UUID_HFS);
|
||||
volume_id_set_uuid(id, hfs_id, 0, UUID_HFS);
|
||||
}
|
||||
|
||||
int volume_id_probe_hfs_hfsplus(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
|
@ -56,7 +56,7 @@ int volume_id_probe_jfs(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
|
||||
volume_id_set_label_raw(id, js->label, 16);
|
||||
volume_id_set_label_string(id, js->label, 16);
|
||||
volume_id_set_uuid(id, js->uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, js->uuid, 0, UUID_DCE);
|
||||
|
||||
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
||||
id->type = "jfs";
|
||||
|
@ -87,7 +87,7 @@ static int volume_id_probe_linux_raid0(struct volume_id *id, uint64_t off, uint6
|
||||
uuid.ints[2] = 0;
|
||||
uuid.ints[3] = 0;
|
||||
}
|
||||
volume_id_set_uuid(id, uuid.bytes, UUID_FOURINT);
|
||||
volume_id_set_uuid(id, uuid.bytes, 0, UUID_FOURINT);
|
||||
snprintf(id->type_version, sizeof(id->type_version)-1, "%u.%u.%u",
|
||||
le32_to_cpu(mdp0->major_version),
|
||||
le32_to_cpu(mdp0->minor_version),
|
||||
@ -103,7 +103,7 @@ static int volume_id_probe_linux_raid0(struct volume_id *id, uint64_t off, uint6
|
||||
uuid.ints[2] = 0;
|
||||
uuid.ints[3] = 0;
|
||||
}
|
||||
volume_id_set_uuid(id, uuid.bytes, UUID_FOURINT);
|
||||
volume_id_set_uuid(id, uuid.bytes, 0, UUID_FOURINT);
|
||||
snprintf(id->type_version, sizeof(id->type_version)-1, "%u.%u.%u",
|
||||
be32_to_cpu(mdp0->major_version),
|
||||
be32_to_cpu(mdp0->minor_version),
|
||||
@ -131,7 +131,7 @@ static int volume_id_probe_linux_raid1(struct volume_id *id, uint64_t off, uint6
|
||||
if (le32_to_cpu(mdp1->magic) != MD_SB_MAGIC)
|
||||
return -1;
|
||||
|
||||
volume_id_set_uuid(id, mdp1->set_uuid, UUID_FOURINT);
|
||||
volume_id_set_uuid(id, mdp1->set_uuid, 0, UUID_FOURINT);
|
||||
volume_id_set_label_raw(id, mdp1->set_name, 32);
|
||||
volume_id_set_label_string(id, mdp1->set_name, 32);
|
||||
snprintf(id->type_version, sizeof(id->type_version)-1, "%u", le32_to_cpu(mdp1->major_version));
|
||||
|
@ -81,7 +81,7 @@ found_label:
|
||||
if (sw != NULL) {
|
||||
volume_id_set_label_raw(id, sw->volume_name, 16);
|
||||
volume_id_set_label_string(id, sw->volume_name, 16);
|
||||
volume_id_set_uuid(id, sw->uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, sw->uuid, 0, UUID_DCE);
|
||||
}
|
||||
|
||||
found:
|
||||
|
@ -36,10 +36,10 @@
|
||||
#define LUKS_SALTSIZE 32
|
||||
#define LUKS_NUMKEYS 8
|
||||
|
||||
#define LUKS_MAGIC_L 6
|
||||
#define LUKS_PHDR_SIZE (sizeof(struct luks_phdr)/SECTOR_SIZE+1)
|
||||
#define UUID_STRING_L 40
|
||||
static const uint8_t LUKS_MAGIC[] = {'L','U','K','S', 0xba, 0xbe};
|
||||
#define LUKS_MAGIC_L 6
|
||||
#define LUKS_PHDR_SIZE (sizeof(struct luks_phdr)/SECTOR_SIZE+1)
|
||||
#define UUID_STRING_L 40
|
||||
|
||||
struct luks_phdr {
|
||||
uint8_t magic[LUKS_MAGIC_L];
|
||||
@ -74,9 +74,7 @@ int volume_id_probe_luks(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
return -1;
|
||||
|
||||
volume_id_set_usage(id, VOLUME_ID_CRYPTO);
|
||||
volume_id_set_uuid(id, header->uuid, UUID_DCE_STRING);
|
||||
|
||||
volume_id_set_uuid(id, header->uuid, 36, UUID_HEX_STRING);
|
||||
id->type = "crypto_LUKS";
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ int volume_id_probe_netware(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
if (memcmp(nw->SBH_Signature, "SPB5", 4) != 0)
|
||||
return -1;
|
||||
|
||||
volume_id_set_uuid(id, nw->SBH_PoolID, UUID_DCE);
|
||||
volume_id_set_uuid(id, nw->SBH_PoolID, 0, UUID_DCE);
|
||||
|
||||
snprintf(id->type_version, sizeof(id->type_version)-1, "%u.%02u",
|
||||
le16_to_cpu(nw->SBH_VersionMediaMajor), le16_to_cpu(nw->SBH_VersionMediaMinor));
|
||||
|
@ -114,7 +114,7 @@ int volume_id_probe_ntfs(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
if (memcmp(ns->oem_id, "NTFS", 4) != 0)
|
||||
return -1;
|
||||
|
||||
volume_id_set_uuid(id, ns->volume_serial, UUID_NTFS);
|
||||
volume_id_set_uuid(id, ns->volume_serial, 0, UUID_NTFS);
|
||||
|
||||
sector_size = le16_to_cpu(ns->bytes_per_sector);
|
||||
cluster_size = ns->sectors_per_cluster * sector_size;
|
||||
|
@ -156,7 +156,7 @@ int volume_id_probe_ocfs1(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
volume_id_set_label_string(id, osl->label, 64);
|
||||
}
|
||||
if (osl->vol_id_len == 16)
|
||||
volume_id_set_uuid(id, osl->vol_id, UUID_DCE);
|
||||
volume_id_set_uuid(id, osl->vol_id, 0, UUID_DCE);
|
||||
id->type = "ocfs";
|
||||
return 0;
|
||||
}
|
||||
@ -184,7 +184,7 @@ int volume_id_probe_ocfs2(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
||||
volume_id_set_label_raw(id, os->s_label, 64);
|
||||
volume_id_set_label_string(id, os->s_label, 64);
|
||||
volume_id_set_uuid(id, os->s_uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, os->s_uuid, 0, UUID_DCE);
|
||||
snprintf(id->type_version, sizeof(id->type_version)-1,
|
||||
"%u.%u", os->s_major_rev_level, os->s_minor_rev_level);
|
||||
id->type = "ocfs2";
|
||||
|
@ -88,7 +88,7 @@ int volume_id_probe_reiserfs(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
strcpy(id->type_version, "4");
|
||||
volume_id_set_label_raw(id, rs4->label, 16);
|
||||
volume_id_set_label_string(id, rs4->label, 16);
|
||||
volume_id_set_uuid(id, rs4->uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, rs4->uuid, 0, UUID_DCE);
|
||||
id->type = "reiser4";
|
||||
goto found;
|
||||
}
|
||||
@ -109,7 +109,7 @@ int volume_id_probe_reiserfs(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
found_label:
|
||||
volume_id_set_label_raw(id, rs->label, 16);
|
||||
volume_id_set_label_string(id, rs->label, 16);
|
||||
volume_id_set_uuid(id, rs->uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, rs->uuid, 0, UUID_DCE);
|
||||
|
||||
found:
|
||||
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
||||
|
@ -115,11 +115,14 @@ void volume_id_set_label_unicode16(struct volume_id *id, const uint8_t *buf, enu
|
||||
volume_id_set_unicode16(id->label, sizeof(id->label), buf, endianess, count);
|
||||
}
|
||||
|
||||
void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_format format)
|
||||
void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, size_t len, enum uuid_format format)
|
||||
{
|
||||
unsigned int i;
|
||||
unsigned int count = 0;
|
||||
|
||||
if (len > sizeof(id->uuid_raw))
|
||||
len = sizeof(id->uuid_raw);
|
||||
|
||||
switch(format) {
|
||||
case UUID_DOS:
|
||||
count = 4;
|
||||
@ -131,8 +134,11 @@ void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_form
|
||||
case UUID_DCE:
|
||||
count = 16;
|
||||
break;
|
||||
case UUID_DCE_STRING:
|
||||
count = 36;
|
||||
case UUID_HEX_STRING:
|
||||
count = len;
|
||||
break;
|
||||
case UUID_STRING:
|
||||
count = len;
|
||||
break;
|
||||
case UUID_FOURINT:
|
||||
count = 35;
|
||||
@ -172,7 +178,12 @@ set:
|
||||
buf[8], buf[9],
|
||||
buf[10], buf[11], buf[12], buf[13], buf[14],buf[15]);
|
||||
break;
|
||||
case UUID_DCE_STRING:
|
||||
case UUID_HEX_STRING:
|
||||
for (i = 0; i < count; i++)
|
||||
id->uuid[i] = tolower(buf[i]);
|
||||
id->uuid[count] = '\0';
|
||||
break;
|
||||
case UUID_STRING:
|
||||
memcpy(id->uuid, buf, count);
|
||||
id->uuid[count] = '\0';
|
||||
break;
|
||||
|
@ -63,7 +63,8 @@
|
||||
#endif /* __BYTE_ORDER */
|
||||
|
||||
enum uuid_format {
|
||||
UUID_DCE_STRING,
|
||||
UUID_HEX_STRING,
|
||||
UUID_STRING,
|
||||
UUID_DCE,
|
||||
UUID_DOS,
|
||||
UUID_NTFS,
|
||||
@ -81,7 +82,7 @@ extern void volume_id_set_usage(struct volume_id *id, enum volume_id_usage usage
|
||||
extern void volume_id_set_label_raw(struct volume_id *id, const uint8_t *buf, size_t count);
|
||||
extern void volume_id_set_label_string(struct volume_id *id, const uint8_t *buf, size_t count);
|
||||
extern void volume_id_set_label_unicode16(struct volume_id *id, const uint8_t *buf, enum endian endianess, size_t count);
|
||||
extern void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, enum uuid_format format);
|
||||
extern void volume_id_set_uuid(struct volume_id *id, const uint8_t *buf, size_t len, enum uuid_format format);
|
||||
extern uint8_t *volume_id_get_buffer(struct volume_id *id, uint64_t off, size_t len);
|
||||
extern void volume_id_free_buffer(struct volume_id *id);
|
||||
|
||||
|
@ -146,6 +146,9 @@ int volume_id_probe_raid(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
if (volume_id_probe_linux_raid(id, off, size) == 0)
|
||||
goto found;
|
||||
|
||||
if (volume_id_probe_ddf_raid(id, off, size) == 0)
|
||||
goto found;
|
||||
|
||||
if (volume_id_probe_intel_software_raid(id, off, size) == 0)
|
||||
goto found;
|
||||
|
||||
|
@ -56,7 +56,7 @@ int volume_id_probe_xfs(struct volume_id *id, uint64_t off, uint64_t size)
|
||||
|
||||
volume_id_set_label_raw(id, xs->fname, 12);
|
||||
volume_id_set_label_string(id, xs->fname, 12);
|
||||
volume_id_set_uuid(id, xs->uuid, UUID_DCE);
|
||||
volume_id_set_uuid(id, xs->uuid, 0, UUID_DCE);
|
||||
|
||||
volume_id_set_usage(id, VOLUME_ID_FILESYSTEM);
|
||||
id->type = "xfs";
|
||||
|
Loading…
Reference in New Issue
Block a user