From: Karel Zak Date: Thu, 13 Jun 2013 13:11:04 +0000 (+0200) Subject: libblkid: support pseudo PARTUUID= for MBR X-Git-Tag: v2.24-rc1~494 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d67cc2889a0527b26d7bb8c76f2acac46751d673;p=thirdparty%2Futil-linux.git libblkid: support pseudo PARTUUID= for MBR # blkid /dev/sdb1 dev/sdb1: TYPE="ext2" PARTUUID="54e743a7-01" the PARTUUID is generated from MBR Id and partition number. The same method uses Linux kernel for root=PARTUUID= on systems with MBR. Note that the patch also removes 0x prefix from PTUUID. Signed-off-by: Karel Zak --- diff --git a/libblkid/src/partitions/dos.c b/libblkid/src/partitions/dos.c index a9c79c34ad..a8c6276a7f 100644 --- a/libblkid/src/partitions/dos.c +++ b/libblkid/src/partitions/dos.c @@ -103,6 +103,7 @@ static int parse_dos_extended(blkid_probe pr, blkid_parttable tab, blkid_partition_set_type(par, p->sys_type); blkid_partition_set_flags(par, p->boot_ind); + blkid_partition_gen_uuid(par); ct_nodata = 0; } /* The first nested ext.partition should be a link to the next @@ -185,7 +186,7 @@ static int probe_dos_pt(blkid_probe pr, id = dos_parttable_id(data); if (id) - snprintf(idstr, sizeof(idstr), "0x%08x", id); + snprintf(idstr, sizeof(idstr), "%08x", id); /* * Well, all checks pass, it's MS-DOS partiton table @@ -232,6 +233,7 @@ static int probe_dos_pt(blkid_probe pr, blkid_partition_set_type(par, p->sys_type); blkid_partition_set_flags(par, p->boot_ind); + blkid_partition_gen_uuid(par); } /* Linux uses partition numbers greater than 4 diff --git a/libblkid/src/partitions/partitions.c b/libblkid/src/partitions/partitions.c index 46631032af..22373f8a91 100644 --- a/libblkid/src/partitions/partitions.c +++ b/libblkid/src/partitions/partitions.c @@ -1281,6 +1281,16 @@ int blkid_partition_set_uuid(blkid_partition par, const unsigned char *uuid) return 0; } +int blkid_partition_gen_uuid(blkid_partition par) +{ + if (!par || !par->tab || !*par->tab->id) + return -1; + + snprintf(par->uuid, sizeof(par->uuid), "%s-%02x", + par->tab->id, par->partno); + return 0; +} + /** * blkid_partition_get_name: * @par: partition diff --git a/libblkid/src/partitions/partitions.h b/libblkid/src/partitions/partitions.h index 44423d9ccf..f7d1ba3d14 100644 --- a/libblkid/src/partitions/partitions.h +++ b/libblkid/src/partitions/partitions.h @@ -40,6 +40,7 @@ extern int blkid_partition_set_utf8name(blkid_partition par, extern int blkid_partition_set_uuid(blkid_partition par, const unsigned char *uuid); +extern int blkid_partition_gen_uuid(blkid_partition par); extern int blkid_partition_set_type(blkid_partition par, int type);