Signed-off-by: Gabriel de Perthuis <g2p.code@xxxxxxxxx> --- libblkid/src/partitions/dos.c | 14 +++++++------- libblkid/src/partitions/gpt.c | 8 ++++---- libblkid/src/partitions/partitions.c | 14 +++++++++++--- 3 files changed, 22 insertions(+), 14 deletions(-) diff --git a/libblkid/src/partitions/dos.c b/libblkid/src/partitions/dos.c index 3a0a6d7..88db895 100644 --- a/libblkid/src/partitions/dos.c +++ b/libblkid/src/partitions/dos.c @@ -179,17 +179,10 @@ static int probe_dos_pt(blkid_probe pr, } blkid_probe_use_wiper(pr, BLKID_MSDOS_PT_OFFSET, 512 - BLKID_MSDOS_PT_OFFSET); - /* - * Well, all checks pass, it's MS-DOS partiton table - */ - if (blkid_partitions_need_typeonly(pr)) - /* caller does not ask for details about partitions */ - return 0; - ls = blkid_probe_get_partlist(pr); /* sector size factor (the start and size are in the real sectors, but * we need to convert all sizes to 512 logical sectors */ @@ -206,10 +199,17 @@ static int probe_dos_pt(blkid_probe pr, snprintf(buf, sizeof(buf), "0x%08x", id); blkid_parttable_set_id(tab, (unsigned char *) buf); } + /* + * Well, all checks pass, it's MS-DOS partiton table + */ + if (blkid_partitions_need_typeonly(pr)) + /* caller does not ask for details about partitions */ + return 0; + /* Parse primary partitions */ for (p = p0, i = 0; i < 4; i++, p++) { blkid_partition par; diff --git a/libblkid/src/partitions/gpt.c b/libblkid/src/partitions/gpt.c index 4441939..87b5ff6 100644 --- a/libblkid/src/partitions/gpt.c +++ b/libblkid/src/partitions/gpt.c @@ -320,14 +320,10 @@ static int probe_gpt_pt(blkid_probe pr, if (blkid_probe_set_magic(pr, lba << 9, sizeof(GPT_HEADER_SIGNATURE_STR) - 1, (unsigned char *) GPT_HEADER_SIGNATURE_STR)) goto err; - if (blkid_partitions_need_typeonly(pr)) - /* caller does not ask for details about partitions */ - return 0; - ls = blkid_probe_get_partlist(pr); if (!ls) goto err; tab = blkid_partlist_new_parttable(ls, "gpt", lba << 9); @@ -336,10 +332,14 @@ static int probe_gpt_pt(blkid_probe pr, guid = h->disk_guid; swap_efi_guid(&guid); blkid_parttable_set_id(tab, (const unsigned char *) &guid); + if (blkid_partitions_need_typeonly(pr)) + /* caller does not ask for details about partitions */ + return 0; + ssf = blkid_probe_get_sectorsize(pr) / 512; fu = le64_to_cpu(h->first_usable_lba); lu = le64_to_cpu(h->last_usable_lba); diff --git a/libblkid/src/partitions/partitions.c b/libblkid/src/partitions/partitions.c index 87ca0c1..b3e97d9 100644 --- a/libblkid/src/partitions/partitions.c +++ b/libblkid/src/partitions/partitions.c @@ -35,10 +35,12 @@ * * NAME=value interface, supported tags: * * @PTTYPE: partition table type (dos, gpt, etc.). * + * @PTUUID: partition table uuid (gpt only) + * * @PART_ENTRY_SCHEME: partition table type * * @PART_ENTRY_NAME: partition name (gpt and mac only) * * @PART_ENTRY_UUID: partition UUID (gpt only) @@ -568,17 +570,18 @@ nothing: */ static int partitions_probe(blkid_probe pr, struct blkid_chain *chn) { int rc = 1; size_t i; + blkid_partlist ls; + blkid_parttable pt; if (!pr || chn->idx < -1) return -1; blkid_probe_chain_reset_vals(pr, chn); - if (chn->binary) - partitions_init_data(chn); + ls = partitions_init_data(chn); if (!pr->wipe_size && (pr->prob_flags & BLKID_PROBE_FL_IGNORE_PT)) goto details_only; DBG(LOWPROBE, blkid_debug("--> starting probing loop [PARTS idx=%d]", @@ -600,14 +603,19 @@ static int partitions_probe(blkid_probe pr, struct blkid_chain *chn) continue; name = idinfos[i]->name; /* all checks passed */ - if (!chn->binary) + if (!chn->binary) { blkid_probe_set_value(pr, "PTTYPE", (unsigned char *) name, strlen(name) + 1); + pt = blkid_partlist_get_table(ls); + if (pt && pt->id) + blkid_probe_set_value(pr, "PTUUID", + pt->id, 37); + } DBG(LOWPROBE, blkid_debug("<-- leaving probing loop (type=%s) [PARTS idx=%d]", name, chn->idx)); rc = 0; break; } -- 1.8.3.222.g430da9e -- To unsubscribe from this list: send the line "unsubscribe util-linux" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html