Module Name:    src
Committed By:   christos
Date:           Tue Sep 30 18:00:00 UTC 2014

Modified Files:
        src/sbin/gpt: Makefile add.c backup.c biosboot.c create.c gpt.c gpt.h
            label.c migrate.c remove.c resize.c resizedisk.c restore.c set.c
            show.c type.c unset.c
Added Files:
        src/sbin/gpt: gpt_uuid.c gpt_uuid.h

Log Message:
Add internal uuid support, since the linux+macos versions of the library
are different than than *bsd ones, and others might not have it at all.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sbin/gpt/Makefile src/sbin/gpt/biosboot.c
cvs rdiff -u -r1.26 -r1.27 src/sbin/gpt/add.c
cvs rdiff -u -r1.7 -r1.8 src/sbin/gpt/backup.c
cvs rdiff -u -r1.9 -r1.10 src/sbin/gpt/create.c
cvs rdiff -u -r1.33 -r1.34 src/sbin/gpt/gpt.c
cvs rdiff -u -r1.15 -r1.16 src/sbin/gpt/gpt.h src/sbin/gpt/remove.c
cvs rdiff -u -r0 -r1.1 src/sbin/gpt/gpt_uuid.c src/sbin/gpt/gpt_uuid.h
cvs rdiff -u -r1.17 -r1.18 src/sbin/gpt/label.c
cvs rdiff -u -r1.18 -r1.19 src/sbin/gpt/migrate.c src/sbin/gpt/show.c
cvs rdiff -u -r1.10 -r1.11 src/sbin/gpt/resize.c
cvs rdiff -u -r1.4 -r1.5 src/sbin/gpt/resizedisk.c src/sbin/gpt/set.c \
    src/sbin/gpt/type.c src/sbin/gpt/unset.c
cvs rdiff -u -r1.5 -r1.6 src/sbin/gpt/restore.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sbin/gpt/Makefile
diff -u src/sbin/gpt/Makefile:1.11 src/sbin/gpt/Makefile:1.12
--- src/sbin/gpt/Makefile:1.11	Mon Sep 29 17:04:34 2014
+++ src/sbin/gpt/Makefile	Tue Sep 30 13:59:59 2014
@@ -1,10 +1,10 @@
-# $NetBSD: Makefile,v 1.11 2014/09/29 21:04:34 christos Exp $
+# $NetBSD: Makefile,v 1.12 2014/09/30 17:59:59 christos Exp $
 # $FreeBSD: src/sbin/gpt/Makefile,v 1.7 2005/09/01 02:49:20 marcel Exp $
 
 PROG=	gpt
 SRCS=	add.c biosboot.c create.c destroy.c gpt.c label.c map.c \
 	migrate.c recover.c remove.c resize.c resizedisk.c \
-	set.c show.c type.c unset.c
+	set.c show.c type.c unset.c gpt_uuid.c
 MAN=	gpt.8
 
 .if (${HOSTPROG:U} == "")
Index: src/sbin/gpt/biosboot.c
diff -u src/sbin/gpt/biosboot.c:1.11 src/sbin/gpt/biosboot.c:1.12
--- src/sbin/gpt/biosboot.c:1.11	Mon Sep 29 17:04:34 2014
+++ src/sbin/gpt/biosboot.c	Tue Sep 30 13:59:59 2014
@@ -1,4 +1,4 @@
-/*	$NetBSD: biosboot.c,v 1.11 2014/09/29 21:04:34 christos Exp $ */
+/*	$NetBSD: biosboot.c,v 1.12 2014/09/30 17:59:59 christos Exp $ */
 
 /*
  * Copyright (c) 2009 The NetBSD Foundation, Inc.
@@ -37,7 +37,7 @@
 
 #include <sys/cdefs.h>
 #ifdef __RCSID
-__RCSID("$NetBSD: biosboot.c,v 1.11 2014/09/29 21:04:34 christos Exp $");
+__RCSID("$NetBSD: biosboot.c,v 1.12 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/stat.h>
@@ -49,18 +49,12 @@ __RCSID("$NetBSD: biosboot.c,v 1.11 2014
 
 #include <err.h>
 #include <fcntl.h>
-#include <inttypes.h>
 #include <paths.h>
 #include <stddef.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#ifndef NBTOOL_CONFIG_H
-#include <util.h>
-#else
-#include "opendisk.h"
-#endif
 
 #include "map.h"
 #include "gpt.h"
@@ -274,7 +268,9 @@ biosboot(int fd)
 int
 cmd_biosboot(int argc, char *argv[])
 {
+#ifdef DIOCGWEDGEINFO
 	struct dkwedge_info dkw;
+#endif
 	struct stat sb;
 	char devpath[MAXPATHLEN];
 	char *dev, *p;

Index: src/sbin/gpt/add.c
diff -u src/sbin/gpt/add.c:1.26 src/sbin/gpt/add.c:1.27
--- src/sbin/gpt/add.c:1.26	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/add.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: add.c,v 1.26 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: add.c,v 1.27 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -44,12 +44,11 @@ __RCSID("$NetBSD: add.c,v 1.26 2014/09/3
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <inttypes.h>
 
 #include "map.h"
 #include "gpt.h"
 
-static uuid_t type;
+static gpt_uuid_t type;
 static off_t alignment, block, sectors, size;
 static unsigned int entry;
 static uint8_t *name;
@@ -71,7 +70,6 @@ usage_add(void)
 static void
 add(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	map_t *map;
@@ -114,8 +112,7 @@ add(int fd)
 		i = entry - 1;
 		ent = (void*)((char*)tbl->map_data + i *
 		    le32toh(hdr->hdr_entsz));
-		uuid_dec_le(ent->ent_type, &uuid);
-		if (!uuid_is_nil(&uuid, NULL)) {
+		if (!gpt_uuid_is_nil(ent->ent_type)) {
 			warnx("%s: error: entry at index %u is not free",
 			    device_name, entry);
 			return;
@@ -125,8 +122,7 @@ add(int fd)
 		for (i = 0; i < le32toh(hdr->hdr_entries); i++) {
 			ent = (void*)((char*)tbl->map_data + i *
 			    le32toh(hdr->hdr_entsz));
-			uuid_dec_le(ent->ent_type, &uuid);
-			if (uuid_is_nil(&uuid, NULL))
+			if (gpt_uuid_is_nil(ent->ent_type))
 				break;
 		}
 		if (i == le32toh(hdr->hdr_entries)) {
@@ -153,7 +149,7 @@ add(int fd)
 		}
 	}
 
-	uuid_enc_le(ent->ent_type, &type);
+	gpt_uuid_copy(ent->ent_type, type);
 	ent->ent_lba_start = htole64(map->map_start);
 	ent->ent_lba_end = htole64(map->map_start + map->map_size - 1LL);
 	if (name != NULL)
@@ -170,7 +166,7 @@ add(int fd)
 	hdr = tpg->map_data;
 	ent = (void*)((char*)lbt->map_data + i * le32toh(hdr->hdr_entsz));
 
-	uuid_enc_le(ent->ent_type, &type);
+	gpt_uuid_copy(ent->ent_type, type);
 	ent->ent_lba_start = htole64(map->map_start);
 	ent->ent_lba_end = htole64(map->map_start + map->map_size - 1LL);
 	if (name != NULL)
@@ -257,9 +253,9 @@ cmd_add(int argc, char *argv[])
 			sectors = 0;
 			break;
 		case 't':
-			if (!uuid_is_nil(&type, NULL))
+			if (!gpt_uuid_is_nil(type))
 				usage_add();
-			if (parse_uuid(optarg, &type) != 0)
+			if (gpt_uuid_parse(optarg, type) != 0)
 				usage_add();
 			break;
 		default:
@@ -271,9 +267,8 @@ cmd_add(int argc, char *argv[])
 		usage_add();
 
 	/* Create NetBSD FFS partitions by default. */
-	if (uuid_is_nil(&type, NULL)) {
-		static const uuid_t nb_ffs = GPT_ENT_TYPE_NETBSD_FFS;
-		type = nb_ffs;
+	if (gpt_uuid_is_nil(type)) {
+		gpt_uuid_create(GPT_TYPE_NETBSD_FFS, type, NULL, 0);
 	}
 
 	while (optind < argc) {

Index: src/sbin/gpt/backup.c
diff -u src/sbin/gpt/backup.c:1.7 src/sbin/gpt/backup.c:1.8
--- src/sbin/gpt/backup.c:1.7	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/backup.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/show.c,v 1.14 2006/06/22 22:22:32 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: backup.c,v 1.7 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: backup.c,v 1.8 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/bootblock.h>
@@ -70,7 +70,6 @@ usage_backup(void)
 static void
 backup(void)
 {
-	uuid_t u;
 	map_t *m;
 	struct mbr *mbr;
 	struct gpt_ent *ent;
@@ -81,7 +80,7 @@ backup(void)
 	prop_data_t propdata;
 	prop_number_t propnum;
 	prop_string_t propstr;
-	char *propext, *s;
+	char *propext, *s, buf[128];
 	bool rc;
 
 	props = prop_dictionary_create();
@@ -201,10 +200,9 @@ backup(void)
 			rc = prop_dictionary_set(type_dict, "revision",
 			    propnum);
 			PROP_ERR(rc);
-			uuid_dec_le(hdr->hdr_guid, &u);
-			uuid_to_string(&u, &s, NULL);
-			propstr = prop_string_create_cstring(s);
-			free(s);
+			gpt_uuid_snprintf(buf, sizeof(buf), "%d",
+			    hdr->hdr_guid);
+			propstr = prop_string_create_cstring(buf);
 			PROP_ERR(propstr);
 			rc = prop_dictionary_set(type_dict, "guid", propstr);
 			PROP_ERR(rc);
@@ -232,17 +230,15 @@ backup(void)
 				rc = prop_dictionary_set(gpt_dict, "index",
 				    propnum);
 				PROP_ERR(propnum);
-				uuid_dec_le(ent->ent_type, &u);
-				uuid_to_string(&u, &s, NULL);
-				propstr = prop_string_create_cstring(s);
-				free(s);
+				gpt_uuid_snprintf(buf, sizeof(buf), "%d",
+				    ent->ent_type);
+				propstr = prop_string_create_cstring(buf);
 				PROP_ERR(propstr);
 				rc = prop_dictionary_set(gpt_dict, "type",
 				    propstr);
-				uuid_dec_le(ent->ent_guid, &u);
-				uuid_to_string(&u, &s, NULL);
-				propstr = prop_string_create_cstring(s);
-				free(s);
+				gpt_uuid_snprintf(buf, sizeof(buf), "%d",
+				    ent->ent_guid);
+				propstr = prop_string_create_cstring(buf);
 				PROP_ERR(propstr);
 				rc = prop_dictionary_set(gpt_dict, "guid",
 				    propstr);

Index: src/sbin/gpt/create.c
diff -u src/sbin/gpt/create.c:1.9 src/sbin/gpt/create.c:1.10
--- src/sbin/gpt/create.c:1.9	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/create.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/create.c,v 1.11 2005/08/31 01:47:19 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: create.c,v 1.9 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: create.c,v 1.10 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -66,7 +66,6 @@ usage_create(void)
 static void
 create(int fd)
 {
-	uuid_t uuid;
 	off_t blocks, last;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
@@ -175,8 +174,7 @@ create(int fd)
 	hdr->hdr_lba_alt = htole64(last);
 	hdr->hdr_lba_start = htole64(tbl->map_start + blocks);
 	hdr->hdr_lba_end = htole64(last - blocks - 1LL);
-	uuid_create(&uuid, NULL);
-	uuid_enc_le(hdr->hdr_guid, &uuid);
+	gpt_uuid_copy(hdr->hdr_guid, gpt_uuid_nil);
 	hdr->hdr_lba_table = htole64(tbl->map_start);
 	hdr->hdr_entries = htole32((blocks * secsz) / sizeof(struct gpt_ent));
 	if (le32toh(hdr->hdr_entries) > parts)
@@ -185,8 +183,7 @@ create(int fd)
 
 	ent = tbl->map_data;
 	for (i = 0; i < le32toh(hdr->hdr_entries); i++) {
-		uuid_create(&uuid, NULL);
-		uuid_enc_le(ent[i].ent_guid, &uuid);
+		gpt_uuid_copy(ent[i].ent_guid, gpt_uuid_nil);
 	}
 
 	hdr->hdr_crc_table = htole32(crc32(ent, le32toh(hdr->hdr_entries) *

Index: src/sbin/gpt/gpt.c
diff -u src/sbin/gpt/gpt.c:1.33 src/sbin/gpt/gpt.c:1.34
--- src/sbin/gpt/gpt.c:1.33	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/gpt.c	Tue Sep 30 13:59:59 2014
@@ -35,7 +35,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/gpt.c,v 1.16 2006/07/07 02:44:23 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: gpt.c,v 1.33 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: gpt.c,v 1.34 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/param.h>
@@ -56,11 +56,8 @@ __RCSID("$NetBSD: gpt.c,v 1.33 2014/09/3
 #include <unistd.h>
 #include <ctype.h>
 #ifndef HAVE_NBTOOL_CONFIG_H
-#include <util.h>
 #include <prop/proplib.h>
 #include <sys/drvctlio.h>
-#else
-#include "opendisk.h"
 #endif
 
 #include "map.h"
@@ -248,98 +245,6 @@ utf8_to_utf16(const uint8_t *s8, uint16_
 	} while (c != 0);
 }
 
-int
-parse_uuid(const char *s, uuid_t *uuid)
-{
-	uint32_t status;
-
-	uuid_from_string(s, uuid, &status);
-	if (status == uuid_s_ok)
-		return (0);
-
-	switch (*s) {
-	case 'b':
-		if (strcmp(s, "bios") == 0) {
-			static const uuid_t bios = GPT_ENT_TYPE_BIOS;
-			*uuid = bios;
-			return (0);
-		}
-		break;
-	case 'c':
-		if (strcmp(s, "ccd") == 0) {
-			static const uuid_t ccd = GPT_ENT_TYPE_NETBSD_CCD;
-			*uuid = ccd;
-			return (0);
-		} else if (strcmp(s, "cgd") == 0) {
-			static const uuid_t cgd = GPT_ENT_TYPE_NETBSD_CGD;
-			*uuid = cgd;
-			return (0);
-		}
-		break;
-	case 'e':
-		if (strcmp(s, "efi") == 0) {
-			static const uuid_t efi = GPT_ENT_TYPE_EFI;
-			*uuid = efi;
-			return (0);
-		}
-		break;
-	case 'f':
-		if (strcmp(s, "ffs") == 0) {
-			static const uuid_t nb_ffs = GPT_ENT_TYPE_NETBSD_FFS;
-			*uuid = nb_ffs;
-			return (0);
-		}
-		break;
-	case 'h':
-		if (strcmp(s, "hfs") == 0) {
-			static const uuid_t hfs = GPT_ENT_TYPE_APPLE_HFS;
-			*uuid = hfs;
-			return (0);
-		}
-		break;
-	case 'l':
-		if (strcmp(s, "lfs") == 0) {
-			static const uuid_t lfs = GPT_ENT_TYPE_NETBSD_LFS;
-			*uuid = lfs;
-			return (0);
-		} else if (strcmp(s, "linux") == 0) {
-			static const uuid_t lnx = GPT_ENT_TYPE_LINUX_DATA;
-			*uuid = lnx;
-			return (0);
-		}
-		break;
-	case 'r':
-		if (strcmp(s, "raid") == 0) {
-			static const uuid_t raid = GPT_ENT_TYPE_NETBSD_RAIDFRAME;
-			*uuid = raid;
-			return (0);
-		}
-		break;
-	case 's':
-		if (strcmp(s, "swap") == 0) {
-			static const uuid_t sw = GPT_ENT_TYPE_NETBSD_SWAP;
-			*uuid = sw;
-			return (0);
-		}
-		break;
-	case 'u':
-		if (strcmp(s, "ufs") == 0) {
-			static const uuid_t ufs = GPT_ENT_TYPE_NETBSD_FFS;
-			*uuid = ufs;
-			return (0);
-		}
-		break;
-	case 'w':
-		if (strcmp(s, "windows") == 0) {
-			static const uuid_t win = GPT_ENT_TYPE_MS_BASIC_DATA;
-			*uuid = win;
-			return (0);
-		}
-		break;
-	}
-	return (EINVAL);
-}
-
 void*
 gpt_read(int fd, off_t lba, size_t count)
 {
@@ -547,11 +452,10 @@ out:
 int
 gpt_gpt(int fd, off_t lba, int found)
 {
-	uuid_t type;
 	off_t size;
 	struct gpt_ent *ent;
 	struct gpt_hdr *hdr;
-	char *p, *s;
+	char *p;
 	map_t *m;
 	size_t blocks, tblsz;
 	unsigned int i;
@@ -616,19 +520,19 @@ gpt_gpt(int fd, off_t lba, int found)
 
 	for (i = 0; i < le32toh(hdr->hdr_entries); i++) {
 		ent = (void*)(p + i * le32toh(hdr->hdr_entsz));
-		if (uuid_is_nil((uuid_t *)&ent->ent_type, NULL))
+		if (gpt_uuid_is_nil(ent->ent_type))
 			continue;
 
 		size = le64toh(ent->ent_lba_end) - le64toh(ent->ent_lba_start) +
 		    1LL;
 		if (verbose > 2) {
-			uuid_dec_le(&ent->ent_type, &type);
-			uuid_to_string(&type, &s, NULL);
-			warnx(
-	"%s: GPT partition: type=%s, start=%llu, size=%llu", device_name, s,
+			char buf[128];
+			gpt_uuid_snprintf(buf, sizeof(buf), "%s", 
+			    ent->ent_type);
+			warnx("%s: GPT partition: type=%s, start=%llu, "
+			    "size=%llu", device_name, buf,
 			    (long long)le64toh(ent->ent_lba_start),
 			    (long long)size);
-			free(s);
 		}
 		m = map_add(le64toh(ent->ent_lba_start), size,
 		    MAP_TYPE_GPT_PART, ent);

Index: src/sbin/gpt/gpt.h
diff -u src/sbin/gpt/gpt.h:1.15 src/sbin/gpt/gpt.h:1.16
--- src/sbin/gpt/gpt.h:1.15	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/gpt.h	Tue Sep 30 13:59:59 2014
@@ -29,16 +29,14 @@
 #ifndef _GPT_H_
 #define	_GPT_H_
 
-#include <sys/endian.h>
 #ifndef HAVE_NBTOOL_CONFIG_H
-#include <sys/disklabel_gpt.h>
+#include <util.h>
 #else
-#include <nbinclude/sys/disklabel_gpt.h>
+#include "opendisk.h"
+#include "namespace.h"
 #endif
 
-#include <uuid.h>
-
-int	parse_uuid(const char *, uuid_t *);
+#include "gpt_uuid.h"
 
 struct mbr_part {
 	uint8_t		part_flag;		/* bootstrap flags */
Index: src/sbin/gpt/remove.c
diff -u src/sbin/gpt/remove.c:1.15 src/sbin/gpt/remove.c:1.16
--- src/sbin/gpt/remove.c:1.15	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/remove.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/remove.c,v 1.10 2006/10/04 18:20:25 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: remove.c,v 1.15 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: remove.c,v 1.16 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -49,7 +49,7 @@ __RCSID("$NetBSD: remove.c,v 1.15 2014/0
 #include "gpt.h"
 
 static int all;
-static uuid_t type;
+static gpt_uuid_t type;
 static off_t block, size;
 static unsigned int entry;
 static uint8_t *label;
@@ -72,7 +72,6 @@ usage_remove(void)
 static void
 rem(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	map_t *m;
@@ -123,14 +122,12 @@ rem(int fd)
 			    (char *)utf16_to_utf8(ent->ent_name)) != 0)
 				continue;
 
-		uuid_dec_le(ent->ent_type, &uuid);
-		if (!uuid_is_nil(&type, NULL) &&
-		    !uuid_equal(&type, &uuid, NULL))
+		if (!gpt_uuid_is_nil(type) &&
+		    !gpt_uuid_equal(type, ent->ent_type))
 			continue;
 
 		/* Remove the primary entry by clearing the partition type. */
-		uuid_create_nil(&uuid, NULL);
-		uuid_enc_le(ent->ent_type, &uuid);
+		gpt_uuid_copy(ent->ent_type, gpt_uuid_nil);
 
 		hdr->hdr_crc_table = htole32(crc32(tbl->map_data,
 		    le32toh(hdr->hdr_entries) * le32toh(hdr->hdr_entsz)));
@@ -145,7 +142,7 @@ rem(int fd)
 		    le32toh(hdr->hdr_entsz));
 
 		/* Remove the secondary entry. */
-		uuid_enc_le(ent->ent_type, &uuid);
+		gpt_uuid_copy(ent->ent_type, gpt_uuid_nil);
 
 		hdr->hdr_crc_table = htole32(crc32(lbt->map_data,
 		    le32toh(hdr->hdr_entries) * le32toh(hdr->hdr_entsz)));
@@ -203,9 +200,9 @@ cmd_remove(int argc, char *argv[])
 				usage_remove();
 			break;
 		case 't':
-			if (!uuid_is_nil(&type, NULL))
+			if (!gpt_uuid_is_nil(type))
 				usage_remove();
-			if (parse_uuid(optarg, &type) != 0)
+			if (gpt_uuid_parse(optarg, type) != 0)
 				usage_remove();
 			break;
 		default:
@@ -215,7 +212,7 @@ cmd_remove(int argc, char *argv[])
 
 	if (!all ^
 	    (block > 0 || entry > 0 || label != NULL || size > 0 ||
-	    !uuid_is_nil(&type, NULL)))
+	    !gpt_uuid_is_nil(type)))
 		usage_remove();
 
 	if (argc == optind)

Index: src/sbin/gpt/label.c
diff -u src/sbin/gpt/label.c:1.17 src/sbin/gpt/label.c:1.18
--- src/sbin/gpt/label.c:1.17	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/label.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/label.c,v 1.3 2006/10/04 18:20:25 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: label.c,v 1.17 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: label.c,v 1.18 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -47,9 +47,10 @@ __RCSID("$NetBSD: label.c,v 1.17 2014/09
 
 #include "map.h"
 #include "gpt.h"
+#include "gpt_uuid.h"
 
 static int all;
-static uuid_t type;
+static gpt_uuid_t type;
 static off_t block, size;
 static unsigned int entry;
 static uint8_t *name, *xlabel;
@@ -73,7 +74,6 @@ usage_label(void)
 static void
 label(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	map_t *m;
@@ -124,9 +124,8 @@ label(int fd)
 			    (char *)utf16_to_utf8(ent->ent_name)) != 0)
 				continue;
 
-		uuid_dec_le(ent->ent_type, &uuid);
-		if (!uuid_is_nil(&type, NULL) &&
-		    !uuid_equal(&type, &uuid, NULL))
+		if (!gpt_uuid_is_nil(type) &&
+		    !gpt_uuid_equal(type, ent->ent_type))
 			continue;
 
 		/* Label the primary entry. */
@@ -241,9 +240,9 @@ cmd_label(int argc, char *argv[])
 				usage_label();
 			break;
 		case 't':
-			if (!uuid_is_nil(&type, NULL))
+			if (!gpt_uuid_is_nil(type))
 				usage_label();
-			if (parse_uuid(optarg, &type) != 0)
+			if (gpt_uuid_parse(optarg, type) != 0)
 				usage_label();
 			break;
 		default:
@@ -253,7 +252,7 @@ cmd_label(int argc, char *argv[])
 
 	if (!all ^
 	    (block > 0 || entry > 0 || xlabel != NULL || size > 0 ||
-	    !uuid_is_nil(&type, NULL)))
+	    !gpt_uuid_is_nil(type)))
 		usage_label();
 
 	if (name == NULL || argc == optind)

Index: src/sbin/gpt/migrate.c
diff -u src/sbin/gpt/migrate.c:1.18 src/sbin/gpt/migrate.c:1.19
--- src/sbin/gpt/migrate.c:1.18	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/migrate.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/migrate.c,v 1.16 2005/09/01 02:42:52 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: migrate.c,v 1.18 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: migrate.c,v 1.19 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -125,31 +125,23 @@ migrate_disklabel(int fd, off_t start, s
 		case FS_UNUSED:
 			continue;
 		case FS_SWAP: {
-			static const uuid_t swap = GPT_ENT_TYPE_FREEBSD_SWAP;
-			uuid_enc_le(ent->ent_type, &swap);
-			utf8_to_utf16((const uint8_t *)"FreeBSD swap partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_FREEBSD_SWAP, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FS_BSDFFS: {
-			static const uuid_t ufs = GPT_ENT_TYPE_FREEBSD_UFS;
-			uuid_enc_le(ent->ent_type, &ufs);
-			utf8_to_utf16((const uint8_t *)"FreeBSD UFS partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_FREEBSD_UFS, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FREEBSD_FS_VINUM: {
-			static const uuid_t vinum = GPT_ENT_TYPE_FREEBSD_VINUM;
-			uuid_enc_le(ent->ent_type, &vinum);
-			utf8_to_utf16((const uint8_t *)"FreeBSD vinum partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_FREEBSD_VINUM, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FREEBSD_FS_ZFS: {
-			static const uuid_t zfs = GPT_ENT_TYPE_FREEBSD_ZFS;
-			uuid_enc_le(ent->ent_type, &zfs);
-			utf8_to_utf16((const uint8_t *)"FreeBSD ZFS partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_FREEBSD_ZFS, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		default:
@@ -207,45 +199,33 @@ migrate_netbsd_disklabel(int fd, off_t s
 		case FS_UNUSED:
 			continue;
 		case FS_SWAP: {
-			static const uuid_t swap = GPT_ENT_TYPE_NETBSD_SWAP;
-			uuid_enc_le(ent->ent_type, &swap);
-			utf8_to_utf16((const uint8_t *)"NetBSD swap partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_NETBSD_SWAP, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FS_BSDFFS: {
-			static const uuid_t ufs = GPT_ENT_TYPE_NETBSD_FFS;
-			uuid_enc_le(ent->ent_type, &ufs);
-			utf8_to_utf16((const uint8_t *)"NetBSD FFS partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_NETBSD_FFS, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FS_BSDLFS: {
-			static const uuid_t zfs = GPT_ENT_TYPE_NETBSD_LFS;
-			uuid_enc_le(ent->ent_type, &zfs);
-			utf8_to_utf16((const uint8_t *)"NetBSD LFS partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_NETBSD_LFS, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FS_RAID: {
-			static const uuid_t zfs = GPT_ENT_TYPE_NETBSD_RAIDFRAME;
-			uuid_enc_le(ent->ent_type, &zfs);
-			utf8_to_utf16((const uint8_t *)"NetBSD RAIDframe partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_NETBSD_RAIDFRAME, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FS_CCD: {
-			static const uuid_t zfs = GPT_ENT_TYPE_NETBSD_CCD;
-			uuid_enc_le(ent->ent_type, &zfs);
-			utf8_to_utf16((const uint8_t *)"NetBSD CCD partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_NETBSD_CCD, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		case FS_CGD: {
-			static const uuid_t zfs = GPT_ENT_TYPE_NETBSD_CGD;
-			uuid_enc_le(ent->ent_type, &zfs);
-			utf8_to_utf16((const uint8_t *)"NetBSD CGD partition",
-			    ent->ent_name, 36);
+			gpt_uuid_create(GPT_TYPE_NETBSD_CGD, ent->ent_type,
+			    ent->ent_name, sizeof(ent->ent_name));
 			break;
 		}
 		default:
@@ -270,7 +250,6 @@ migrate_netbsd_disklabel(int fd, off_t s
 static void
 migrate(int fd)
 {
-	uuid_t uuid;
 	off_t blocks, last;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
@@ -356,8 +335,7 @@ migrate(int fd)
 	hdr->hdr_lba_alt = htole64(tpg->map_start);
 	hdr->hdr_lba_start = htole64(tbl->map_start + blocks);
 	hdr->hdr_lba_end = htole64(lbt->map_start - 1LL);
-	uuid_create(&uuid, NULL);
-	uuid_enc_le(hdr->hdr_guid, &uuid);
+	gpt_uuid_copy(hdr->hdr_guid, gpt_uuid_nil);
 	hdr->hdr_lba_table = htole64(tbl->map_start);
 	hdr->hdr_entries = htole32((blocks * secsz) / sizeof(struct gpt_ent));
 	if (le32toh(hdr->hdr_entries) > parts)
@@ -366,8 +344,7 @@ migrate(int fd)
 
 	ent = tbl->map_data;
 	for (i = 0; i < le32toh(hdr->hdr_entries); i++) {
-		uuid_create(&uuid, NULL);
-		uuid_enc_le(ent[i].ent_guid, &uuid);
+		gpt_uuid_copy(ent[i].ent_guid, gpt_uuid_nil);
 	}
 
 	/* Mirror partitions. */
@@ -382,12 +359,11 @@ migrate(int fd)
 			continue;
 		case MBR_PTYPE_386BSD: {	/* FreeBSD */
 			if (slice) {
-				static const uuid_t freebsd = GPT_ENT_TYPE_FREEBSD;
-				uuid_enc_le(ent->ent_type, &freebsd);
+				gpt_uuid_create(GPT_TYPE_FREEBSD,
+				    ent->ent_type, ent->ent_name,
+				    sizeof(ent->ent_name));
 				ent->ent_lba_start = htole64((uint64_t)start);
 				ent->ent_lba_end = htole64(start + size - 1LL);
-				utf8_to_utf16((const uint8_t *)"FreeBSD disklabel partition",
-				    ent->ent_name, 36);
 				ent++;
 			} else
 				ent = migrate_disklabel(fd, start, ent);
@@ -397,12 +373,11 @@ migrate(int fd)
 			ent = migrate_netbsd_disklabel(fd, start, ent);
 			break;
 		case MBR_PTYPE_EFI: {
-			static const uuid_t efi_slice = GPT_ENT_TYPE_EFI;
-			uuid_enc_le(ent->ent_type, &efi_slice);
+			gpt_uuid_create(GPT_TYPE_EFI,
+			    ent->ent_type, ent->ent_name,
+			    sizeof(ent->ent_name));
 			ent->ent_lba_start = htole64((uint64_t)start);
 			ent->ent_lba_end = htole64(start + size - 1LL);
-			utf8_to_utf16((const uint8_t *)"EFI system partition",
-			    ent->ent_name, 36);
 			ent++;
 			break;
 		}
Index: src/sbin/gpt/show.c
diff -u src/sbin/gpt/show.c:1.18 src/sbin/gpt/show.c:1.19
--- src/sbin/gpt/show.c:1.18	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/show.c	Tue Sep 30 14:00:00 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/show.c,v 1.14 2006/06/22 22:22:32 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: show.c,v 1.18 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: show.c,v 1.19 2014/09/30 18:00:00 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -64,87 +64,14 @@ usage_show(void)
 	exit(1);
 }
 
-static const char *
-friendly(uuid_t *t)
-{
-	static const uuid_t efi_slice = GPT_ENT_TYPE_EFI;
-	static const uuid_t bios_boot = GPT_ENT_TYPE_BIOS;
-	static const uuid_t msdata = GPT_ENT_TYPE_MS_BASIC_DATA;
-	static const uuid_t freebsd = GPT_ENT_TYPE_FREEBSD;
-	static const uuid_t hfs = GPT_ENT_TYPE_APPLE_HFS;
-	static const uuid_t linuxdata = GPT_ENT_TYPE_LINUX_DATA;
-	static const uuid_t linuxswap = GPT_ENT_TYPE_LINUX_SWAP;
-	static const uuid_t msr = GPT_ENT_TYPE_MS_RESERVED;
-	static const uuid_t swap = GPT_ENT_TYPE_FREEBSD_SWAP;
-	static const uuid_t ufs = GPT_ENT_TYPE_FREEBSD_UFS;
-	static const uuid_t vinum = GPT_ENT_TYPE_FREEBSD_VINUM;
-	static const uuid_t zfs = GPT_ENT_TYPE_FREEBSD_ZFS;
-	static const uuid_t nb_swap = GPT_ENT_TYPE_NETBSD_SWAP;
-	static const uuid_t nb_ffs = GPT_ENT_TYPE_NETBSD_FFS;
-	static const uuid_t nb_lfs = GPT_ENT_TYPE_NETBSD_LFS;
-	static const uuid_t nb_raid = GPT_ENT_TYPE_NETBSD_RAIDFRAME;
-	static const uuid_t nb_ccd = GPT_ENT_TYPE_NETBSD_CCD;
-	static const uuid_t nb_cgd = GPT_ENT_TYPE_NETBSD_CGD;
-	static char buf[80];
-	char *s;
-
-	if (show_uuid)
-		goto unfriendly;
-
-	if (uuid_equal(t, &efi_slice, NULL))
-		return ("EFI System");
-	if (uuid_equal(t, &bios_boot, NULL))
-		return ("BIOS Boot");
-	if (uuid_equal(t, &nb_swap, NULL))
-		return ("NetBSD swap");
-	if (uuid_equal(t, &nb_ffs, NULL))
-		return ("NetBSD FFSv1/FFSv2");
-	if (uuid_equal(t, &nb_lfs, NULL))
-		return ("NetBSD LFS");
-	if (uuid_equal(t, &nb_raid, NULL))
-		return ("NetBSD RAIDFrame component");
-	if (uuid_equal(t, &nb_ccd, NULL))
-		return ("NetBSD ccd component");
-	if (uuid_equal(t, &nb_cgd, NULL))
-		return ("NetBSD Cryptographic Disk");
-	if (uuid_equal(t, &swap, NULL))
-		return ("FreeBSD swap");
-	if (uuid_equal(t, &ufs, NULL))
-		return ("FreeBSD UFS/UFS2");
-	if (uuid_equal(t, &vinum, NULL))
-		return ("FreeBSD vinum");
-	if (uuid_equal(t, &zfs, NULL))
-		return ("FreeBSD ZFS");
-	if (uuid_equal(t, &freebsd, NULL))
-		return ("FreeBSD legacy");
-	if (uuid_equal(t, &msdata, NULL))
-		return ("Windows basic data");
-	if (uuid_equal(t, &msr, NULL))
-		return ("Windows reserved");
-	if (uuid_equal(t, &linuxdata, NULL))
-		return ("Linux data");
-	if (uuid_equal(t, &linuxswap, NULL))
-		return ("Linux swap");
-	if (uuid_equal(t, &hfs, NULL))
-		return ("Apple HFS");
-
-unfriendly:
-	uuid_to_string(t, &s, NULL);
-	strlcpy(buf, s, sizeof buf);
-	free(s);
-	return (buf);
-}
-
 static void
 show(void)
 {
-	uuid_t guid, type;
 	off_t start;
 	map_t *m, *p;
 	struct mbr *mbr;
 	struct gpt_ent *ent;
 	unsigned int i;
-	char *s;
 
 	printf("  %*s", lbawidth, "start");
 	printf("  %*s", lbawidth, "size");
@@ -202,13 +129,15 @@ show(void)
 				printf("- \"%s\"",
 				    utf16_to_utf8(ent->ent_name));
 			} else if (show_guid) {
-				uuid_dec_le(ent->ent_guid, &guid);
-				uuid_to_string(&guid, &s, NULL);
-				printf("- %s", s);
-				free(s);
+				char buf[128];
+				gpt_uuid_snprintf(
+				    buf, sizeof(buf), "%d", ent->ent_guid);
+				printf("- %s", buf);
 			} else {
-				uuid_dec_le(ent->ent_type, &type);
-				printf("- %s", friendly(&type));
+				char buf[128];
+				gpt_uuid_snprintf(
+				    buf, sizeof(buf), "%s", ent->ent_type);
+				printf("- %s", buf);
 			}
 			break;
 		case MAP_TYPE_PMBR:
@@ -223,11 +152,9 @@ show(void)
 static void
 show_one(void)
 {
-	uuid_t guid, type;
 	map_t *m;
 	struct gpt_ent *ent;
-	const char *s1;
-	char *s2;
+	char s1[128], s2[128];
 #ifdef HN_AUTOSCALE
 	char human_num[5];
 #endif
@@ -263,18 +190,14 @@ show_one(void)
 #endif
 		printf("Size: %llu\n", (long long)m->map_size);
 
-	uuid_dec_le(ent->ent_type, &type);
-	s1 = friendly(&type);
-	uuid_to_string(&type, &s2, NULL);
+	gpt_uuid_snprintf(s1, sizeof(s1), "%s", ent->ent_type);
+	gpt_uuid_snprintf(s2, sizeof(s1), "%d", ent->ent_type);
 	if (strcmp(s1, s2) == 0)
-		s1 = "unknown";
+		strlcpy(s1, "unknown", sizeof(s1));
 	printf("Type: %s (%s)\n", s1, s2);
-	free(s2);
 
-	uuid_dec_le(ent->ent_guid, &guid);
-	uuid_to_string(&guid, &s2, NULL);
+	gpt_uuid_snprintf(s2, sizeof(s1), "%d", ent->ent_guid);
 	printf("GUID: %s\n", s2);
-	free(s2);
 
 	printf("Label: %s\n", utf16_to_utf8(ent->ent_name));
 

Index: src/sbin/gpt/resize.c
diff -u src/sbin/gpt/resize.c:1.10 src/sbin/gpt/resize.c:1.11
--- src/sbin/gpt/resize.c:1.10	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/resize.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: resize.c,v 1.10 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: resize.c,v 1.11 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -44,7 +44,6 @@ __RCSID("$NetBSD: resize.c,v 1.10 2014/0
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <inttypes.h>
 
 #include "map.h"
 #include "gpt.h"
@@ -66,7 +65,6 @@ usage_resize(void)
 static void
 resize(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	map_t *map;
@@ -108,8 +106,7 @@ resize(int fd)
 	i = entry - 1;
 	ent = (void*)((char*)tbl->map_data + i *
 	    le32toh(hdr->hdr_entsz));
-	uuid_dec_le(ent->ent_type, &uuid);
-	if (uuid_is_nil(&uuid, NULL)) {
+	if (gpt_uuid_is_nil(ent->ent_type)) {
 		warnx("%s: error: entry at index %u is unused",
 		    device_name, entry);
 		return;

Index: src/sbin/gpt/resizedisk.c
diff -u src/sbin/gpt/resizedisk.c:1.4 src/sbin/gpt/resizedisk.c:1.5
--- src/sbin/gpt/resizedisk.c:1.4	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/resizedisk.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: resizedisk.c,v 1.4 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: resizedisk.c,v 1.5 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/bootblock.h>
@@ -45,7 +45,6 @@ __RCSID("$NetBSD: resizedisk.c,v 1.4 201
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <inttypes.h>
 
 #include "map.h"
 #include "gpt.h"
@@ -77,7 +76,6 @@ usage_resizedisk(void)
 static void
 resizedisk(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	map_t *mbrmap;
@@ -139,8 +137,7 @@ resizedisk(int fd)
 	for (ent = tbl->map_data; ent <
 	    (struct gpt_ent *)((char *)tbl->map_data +
 	    le32toh(hdr->hdr_entries) * le32toh(hdr->hdr_entsz)); ent++) {
-		uuid_dec_le(ent->ent_type, &uuid);
-		if (!uuid_is_nil(&uuid, NULL) &&
+		if (!gpt_uuid_is_nil(ent->ent_type) &&
 		    (le64toh(ent->ent_lba_end) > lastdata)) {
 			lastdata = le64toh(ent->ent_lba_end);
 		}
Index: src/sbin/gpt/set.c
diff -u src/sbin/gpt/set.c:1.4 src/sbin/gpt/set.c:1.5
--- src/sbin/gpt/set.c:1.4	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/set.c	Tue Sep 30 14:00:00 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: set.c,v 1.4 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: set.c,v 1.5 2014/09/30 18:00:00 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -44,7 +44,6 @@ __RCSID("$NetBSD: set.c,v 1.4 2014/09/30
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <inttypes.h>
 
 #include "map.h"
 #include "gpt.h"
@@ -66,7 +65,6 @@ usage_set(void)
 static void
 set(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	struct gpt_hdr *hdr;
@@ -106,8 +104,7 @@ set(int fd)
 	i = entry - 1;
 	ent = (void*)((char*)tbl->map_data + i *
 	    le32toh(hdr->hdr_entsz));
-	uuid_dec_le(ent->ent_type, &uuid);
-	if (uuid_is_nil(&uuid, NULL)) {
+	if (gpt_uuid_is_nil(ent->ent_type)) {
 		warnx("%s: error: entry at index %u is unused",
 		    device_name, entry);
 		return;
Index: src/sbin/gpt/type.c
diff -u src/sbin/gpt/type.c:1.4 src/sbin/gpt/type.c:1.5
--- src/sbin/gpt/type.c:1.4	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/type.c	Tue Sep 30 14:00:00 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/remove.c,v 1.10 2006/10/04 18:20:25 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: type.c,v 1.4 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: type.c,v 1.5 2014/09/30 18:00:00 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -49,7 +49,7 @@ __RCSID("$NetBSD: type.c,v 1.4 2014/09/3
 #include "gpt.h"
 
 static int all;
-static uuid_t type, newtype;
+static gpt_uuid_t type, newtype;
 static off_t block, size;
 static unsigned int entry;
 static uint8_t *label;
@@ -74,7 +74,6 @@ usage_type(void)
 static void
 chtype(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	map_t *m;
@@ -125,13 +124,12 @@ chtype(int fd)
 			    (char *)utf16_to_utf8(ent->ent_name)) != 0)
 				continue;
 
-		uuid_dec_le(ent->ent_type, &uuid);
-		if (!uuid_is_nil(&type, NULL) &&
-		    !uuid_equal(&type, &uuid, NULL))
+		if (!gpt_uuid_is_nil(ent->ent_type) &&
+		    !gpt_uuid_equal(type, ent->ent_type))
 			continue;
 
 		/* Change the primary entry. */
-		uuid_enc_le(ent->ent_type, &newtype);
+		gpt_uuid_copy(ent->ent_type, newtype);
 
 		hdr->hdr_crc_table = htole32(crc32(tbl->map_data,
 		    le32toh(hdr->hdr_entries) * le32toh(hdr->hdr_entsz)));
@@ -146,7 +144,7 @@ chtype(int fd)
 		    le32toh(hdr->hdr_entsz));
 
 		/* Change the secondary entry. */
-		uuid_enc_le(ent->ent_type, &newtype);
+		gpt_uuid_copy(ent->ent_type, newtype);
 
 		hdr->hdr_crc_table = htole32(crc32(lbt->map_data,
 		    le32toh(hdr->hdr_entries) * le32toh(hdr->hdr_entsz)));
@@ -203,15 +201,15 @@ cmd_type(int argc, char *argv[])
 				usage_type();
 			break;
 		case 't':
-			if (!uuid_is_nil(&type, NULL))
+			if (!gpt_uuid_is_nil(type))
 				usage_type();
-			if (parse_uuid(optarg, &type) != 0)
+			if (gpt_uuid_parse(optarg, type) != 0)
 				usage_type();
 			break;
 		case 'T':
-			if (!uuid_is_nil(&newtype, NULL))
+			if (!gpt_uuid_is_nil(newtype))
 				usage_type();
-			if (parse_uuid(optarg, &newtype) != 0)
+			if (gpt_uuid_parse(optarg, newtype) != 0)
 				usage_type();
 			break;
 		default:
@@ -221,9 +219,9 @@ cmd_type(int argc, char *argv[])
 
 	if (!all ^
 	    (block > 0 || entry > 0 || label != NULL || size > 0 ||
-	    !uuid_is_nil(&type, NULL)))
+	    !gpt_uuid_is_nil(type)))
 		usage_type();
-	if (uuid_is_nil(&newtype, NULL))
+	if (gpt_uuid_is_nil(newtype))
 		usage_type();
 
 	if (argc == optind)
Index: src/sbin/gpt/unset.c
diff -u src/sbin/gpt/unset.c:1.4 src/sbin/gpt/unset.c:1.5
--- src/sbin/gpt/unset.c:1.4	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/unset.c	Tue Sep 30 14:00:00 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/add.c,v 1.14 2006/06/22 22:05:28 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: unset.c,v 1.4 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: unset.c,v 1.5 2014/09/30 18:00:00 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -44,7 +44,6 @@ __RCSID("$NetBSD: unset.c,v 1.4 2014/09/
 #include <stdlib.h>
 #include <string.h>
 #include <unistd.h>
-#include <inttypes.h>
 
 #include "map.h"
 #include "gpt.h"
@@ -66,7 +65,6 @@ usage_unset(void)
 static void
 unset(int fd)
 {
-	uuid_t uuid;
 	map_t *gpt, *tpg;
 	map_t *tbl, *lbt;
 	struct gpt_hdr *hdr;
@@ -106,8 +104,7 @@ unset(int fd)
 	i = entry - 1;
 	ent = (void*)((char*)tbl->map_data + i *
 	    le32toh(hdr->hdr_entsz));
-	uuid_dec_le(ent->ent_type, &uuid);
-	if (uuid_is_nil(&uuid, NULL)) {
+	if (gpt_uuid_is_nil(ent->ent_type)) {
 		warnx("%s: error: entry at index %u is unused",
 		    device_name, entry);
 		return;

Index: src/sbin/gpt/restore.c
diff -u src/sbin/gpt/restore.c:1.5 src/sbin/gpt/restore.c:1.6
--- src/sbin/gpt/restore.c:1.5	Mon Sep 29 22:12:55 2014
+++ src/sbin/gpt/restore.c	Tue Sep 30 13:59:59 2014
@@ -33,7 +33,7 @@
 __FBSDID("$FreeBSD: src/sbin/gpt/create.c,v 1.11 2005/08/31 01:47:19 marcel Exp $");
 #endif
 #ifdef __RCSID
-__RCSID("$NetBSD: restore.c,v 1.5 2014/09/30 02:12:55 christos Exp $");
+__RCSID("$NetBSD: restore.c,v 1.6 2014/09/30 17:59:59 christos Exp $");
 #endif
 
 #include <sys/types.h>
@@ -72,7 +72,7 @@ usage_restore(void)
 static void
 restore(int fd)
 {
-	uuid_t gpt_guid, uuid;
+	gpt_uuid_t uuid;
 	off_t firstdata, last, lastdata, gpe_start, gpe_end;
 	map_t *map;
 	struct mbr *mbr;
@@ -85,10 +85,9 @@ restore(int fd)
 	prop_array_t mbr_array, gpt_array;
 	prop_number_t propnum;
 	prop_string_t propstr;
-	int entries, gpt_size, rc;
+	int entries, gpt_size;
 	const char *s;
 	void *secbuf;
-	uint32_t status;
 
 	last = mediasz / secsz - 1LL;
 
@@ -146,13 +145,10 @@ restore(int fd)
 	propstr = prop_dictionary_get(gpt_dict, "guid");
 	PROP_ERR(propstr);
 	s = prop_string_cstring_nocopy(propstr);
-	uuid_from_string(s, &uuid, &status);
-	if (status != uuid_s_ok) {
+	if (gpt_uuid_parse(s, uuid) != 0) {
 		warnx("%s: not able to convert to an UUID\n", s);
 		return;
 	}
-	uuid_enc_le(&gpt_guid, &uuid);
-
 	firstdata = gpt_size + 2;		/* PMBR and GPT header */
 	lastdata = last - gpt_size - 1;		/* alt. GPT table and header */
 
@@ -166,17 +162,11 @@ restore(int fd)
 		propstr = prop_dictionary_get(gpt_dict, "type");
 		PROP_ERR(propstr);
 		s = prop_string_cstring_nocopy(propstr);
-		uuid_from_string(s, &uuid, &status);
-		if (status != uuid_s_ok) {
-			warnx("%s: not able to convert to an UUID\n", s);
-			return;
-		}
-		rc = uuid_is_nil(&uuid, &status);
-		if (status != uuid_s_ok) {
+		if (gpt_uuid_parse(s, uuid) != 0) {
 			warnx("%s: not able to convert to an UUID\n", s);
 			return;
 		}
-		if (rc == 1)
+		if (gpt_uuid_is_nil(uuid))
 			continue;
 		propnum = prop_dictionary_get(gpt_dict, "start");
 		PROP_ERR(propnum);
@@ -310,21 +300,17 @@ restore(int fd)
 		propstr = prop_dictionary_get(gpt_dict, "type");
 		PROP_ERR(propstr);
 		s = prop_string_cstring_nocopy(propstr);
-		uuid_from_string(s, &uuid, &status);
-		if (status != uuid_s_ok) {
+		if (gpt_uuid_parse(s, ent.ent_type) != 0) {
 			warnx("%s: not able to convert to an UUID\n", s);
 			return;
 		}
-		uuid_enc_le(&ent.ent_type, &uuid);
 		propstr = prop_dictionary_get(gpt_dict, "guid");
 		PROP_ERR(propstr);
 		s = prop_string_cstring_nocopy(propstr);
-		uuid_from_string(s, &uuid, &status);
-		if (status != uuid_s_ok) {
+		if (gpt_uuid_parse(s, ent.ent_guid) != 0) {
 			warnx("%s: not able to convert to an UUID\n", s);
 			return;
 		}
-		uuid_enc_le(&ent.ent_guid, &uuid);
 		propnum = prop_dictionary_get(gpt_dict, "start");
 		PROP_ERR(propnum);
 		ent.ent_lba_start =
@@ -369,7 +355,7 @@ restore(int fd)
 	hdr->hdr_lba_alt = htole64(last);
 	hdr->hdr_lba_start = htole64(firstdata);
 	hdr->hdr_lba_end = htole64(lastdata);
-	memcpy(hdr->hdr_guid, &gpt_guid, sizeof(hdr->hdr_guid));
+	gpt_uuid_copy(hdr->hdr_guid, uuid);
 	hdr->hdr_lba_table = htole64(2);
 	hdr->hdr_entries = htole32(entries);
 	hdr->hdr_entsz = htole32(sizeof(struct gpt_ent));

Added files:

Index: src/sbin/gpt/gpt_uuid.c
diff -u /dev/null src/sbin/gpt/gpt_uuid.c:1.1
--- /dev/null	Tue Sep 30 14:00:00 2014
+++ src/sbin/gpt/gpt_uuid.c	Tue Sep 30 13:59:59 2014
@@ -0,0 +1,214 @@
+/*	$NetBSD: gpt_uuid.c,v 1.1 2014/09/30 17:59:59 christos Exp $	*/
+
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#include <sys/cdefs.h>
+#ifdef __RCSID
+__RCSID("$NetBSD: gpt_uuid.c,v 1.1 2014/09/30 17:59:59 christos Exp $");
+#endif
+
+#include <stdio.h>
+
+#include "map.h"
+#include "gpt.h"
+
+#ifndef HAVE_NBTOOLS_CONFIG_H
+#include <sys/endian.h>
+#endif
+
+const gpt_uuid_t gpt_uuid_nil;
+
+struct dce_uuid {
+	uint32_t	time_low;
+	uint16_t	time_mid;
+	uint16_t	time_hi_and_version;
+	uint8_t		clock_seq_hi_and_reserved;
+	uint8_t		clock_seq_low;
+	uint8_t		node[6];
+};
+
+static const struct {
+	struct dce_uuid u;
+	const char *n;
+	const char *d;
+} gpt_nv[] = {
+	{ GPT_ENT_TYPE_APPLE_HFS, "apple", "Apple HFS" },
+	{ GPT_ENT_TYPE_BIOS, "bios", "BIOS Boot" },
+	{ GPT_ENT_TYPE_EFI, "efi", "EFI System" },
+	{ GPT_ENT_TYPE_FREEBSD, "fbsd-legacy", "FreeBSD legacy" },
+	{ GPT_ENT_TYPE_FREEBSD_SWAP, "fbsd-swap", "FreeBSD swap" },
+	{ GPT_ENT_TYPE_FREEBSD_UFS, "fbsd-ufs", "FreeBSD UFS/UFS2" },
+	{ GPT_ENT_TYPE_FREEBSD_VINUM, "fbsd-vinum", "FreeBSD vinum" },
+	{ GPT_ENT_TYPE_FREEBSD_ZFS, "fbsd-zfs", "FreeBSD ZFS" },
+	{ GPT_ENT_TYPE_LINUX_DATA, "linux-data", "Linux data" },
+	{ GPT_ENT_TYPE_LINUX_SWAP, "linux-swap", "Linux swap" },
+	{ GPT_ENT_TYPE_MS_BASIC_DATA, "windows", "Windows basic data" },
+	{ GPT_ENT_TYPE_MS_RESERVED, "windows-reserved", "Windows reserved" },
+	{ GPT_ENT_TYPE_NETBSD_CCD, "ccd", "NetBSD ccd component" },
+	{ GPT_ENT_TYPE_NETBSD_CGD, "cgd", "NetBSD Cryptographic Disk" },
+	{ GPT_ENT_TYPE_NETBSD_FFS, "ffs", "NetBSD FFSv1/FFSv2" },
+	{ GPT_ENT_TYPE_NETBSD_LFS, "lfs", "NetBSD LFS" },
+	{ GPT_ENT_TYPE_NETBSD_RAIDFRAME, "raid",
+	    "NetBSD RAIDFrame component" },
+	{ GPT_ENT_TYPE_NETBSD_SWAP, "swap", "NetBSD swap" },
+};
+
+static void
+gpt_uuid_to_dce(const gpt_uuid_t buf, struct dce_uuid *uuid)
+{
+	const uint8_t *p = buf;
+	size_t i;
+
+	uuid->time_low = le32dec(p);
+	uuid->time_mid = le16dec(p + 4);
+	uuid->time_hi_and_version = le16dec(p + 6);
+	uuid->clock_seq_hi_and_reserved = p[8];
+	uuid->clock_seq_low = p[9];
+	for (i = 0; i < sizeof(uuid->node); i++)
+		uuid->node[i] = p[10 + i];
+}
+
+static void
+gpt_dce_to_uuid(const struct dce_uuid *uuid, uint8_t *buf)
+{
+	uint8_t *p = buf;
+	size_t i;
+
+	le32enc(p, uuid->time_low);
+	le16enc(p + 4, uuid->time_mid);
+	le16enc(p + 6, uuid->time_hi_and_version);
+	p[8] = uuid->clock_seq_hi_and_reserved;
+	p[9] = uuid->clock_seq_low;
+	for (i = 0; i < sizeof(uuid->node); i++)
+		p[10 + i] = uuid->node[i];
+}
+
+static int
+gpt_uuid_numeric(char *buf, size_t bufsiz, const struct dce_uuid *u)
+{
+	return snprintf(buf, bufsiz,
+	    "%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+	    u->time_low, u->time_mid, u->time_hi_and_version,
+	    u->clock_seq_hi_and_reserved, u->clock_seq_low, u->node[0],
+	    u->node[1], u->node[2], u->node[3], u->node[4], u->node[5]);
+}
+
+
+static int
+gpt_uuid_symbolic(char *buf, size_t bufsiz, const struct dce_uuid *u)
+{
+	size_t i;
+
+	for (i = 0; i < __arraycount(gpt_nv); i++)
+		if (memcmp(&gpt_nv[i].u, u, sizeof(*u)) == 0)
+			return strlcpy(buf, gpt_nv[i].n, bufsiz);
+	return -1;
+}
+
+int
+gpt_uuid_snprintf(char *buf, size_t bufsiz, const char *fmt,
+    const gpt_uuid_t uu)
+{
+	struct dce_uuid u;
+	gpt_uuid_to_dce(uu, &u);
+
+	if (fmt[1] == 's') {
+		int r;
+		if ((r = gpt_uuid_symbolic(buf, bufsiz, &u)) != -1)
+			return r;
+	}
+	return gpt_uuid_numeric(buf, bufsiz, &u);
+}
+
+static int
+gpt_uuid_parse_numeric(const char *s, struct dce_uuid *u)
+{
+	int n;
+
+	if (s == NULL || *s == '\0') {
+		memset(u, 0, sizeof(*u));
+		return 0;
+	}
+
+	n = sscanf(s,
+	    "%8x-%4hx-%4hx-%2hhx%2hhx-%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",
+	    &u->time_low, &u->time_mid, &u->time_hi_and_version,
+	    &u->clock_seq_hi_and_reserved, &u->clock_seq_low, &u->node[0],
+	    &u->node[1], &u->node[2], &u->node[3], &u->node[4], &u->node[5]);
+
+	/* Make sure we have all conversions. */
+	if (n != 11)
+		return -1;
+
+	/* We have a successful scan. Check semantics... */
+	n = u->clock_seq_hi_and_reserved;
+	if ((n & 0x80) != 0x00 &&			/* variant 0? */
+	    (n & 0xc0) != 0x80 &&			/* variant 1? */
+	    (n & 0xe0) != 0xc0) 			/* variant 2? */
+		return -1;
+	return 0;
+}
+
+static int
+gpt_uuid_parse_symbolic(const char *s, struct dce_uuid *u)
+{
+	size_t i;
+
+	for (i = 0; i < __arraycount(gpt_nv); i++)
+		if (strcmp(gpt_nv[i].n, s) == 0) {
+			*u = gpt_nv[i].u;
+			return 0;
+		}
+	return -1;
+}
+
+int
+gpt_uuid_parse(const char *s, gpt_uuid_t uuid)
+{
+	struct dce_uuid u;
+
+	if (gpt_uuid_parse_numeric(s, &u) != -1)
+		return 0;
+
+	if (gpt_uuid_parse_symbolic(s, &u) == -1)
+		return -1;
+
+	gpt_dce_to_uuid(&u, uuid);
+	return 0;
+}
+
+void
+gpt_uuid_create(gpt_type_t t, gpt_uuid_t u, uint16_t *b, size_t s)
+{
+	gpt_dce_to_uuid(&gpt_nv[t].u, u);
+	if (b)
+		utf8_to_utf16((const uint8_t *)gpt_nv[t].d, b, s / sizeof(*b));
+}
Index: src/sbin/gpt/gpt_uuid.h
diff -u /dev/null src/sbin/gpt/gpt_uuid.h:1.1
--- /dev/null	Tue Sep 30 14:00:00 2014
+++ src/sbin/gpt/gpt_uuid.h	Tue Sep 30 13:59:59 2014
@@ -0,0 +1,96 @@
+/*-
+ * Copyright (c) 2014 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef _GPT_UUID_H
+#define _GPT_UUID_H
+
+#include <string.h>
+#include <inttypes.h>
+#ifndef HAVE_NBTOOL_CONFIG_H
+#include <sys/disklabel_gpt.h>
+#else
+#include <nbinclude/sys/disklabel_gpt.h>
+#endif
+
+/*
+ * We define our own uuid type so that we don't have to mess around
+ * with different uuid implementation (linux+macosx which use an
+ * array, and {Free,Net}BSD who use a struct. We just need minimal
+ * support anyway
+ */
+
+// Must match the array in gpt_uuid.c
+typedef enum {
+	GPT_TYPE_APPLE_HFS = 0,
+	GPT_TYPE_BIOS,
+	GPT_TYPE_EFI,
+	GPT_TYPE_FREEBSD,
+	GPT_TYPE_FREEBSD_SWAP,
+	GPT_TYPE_FREEBSD_UFS,
+	GPT_TYPE_FREEBSD_VINUM,
+	GPT_TYPE_FREEBSD_ZFS,
+	GPT_TYPE_LINUX_DATA,
+	GPT_TYPE_LINUX_SWAP,
+	GPT_TYPE_MS_BASIC_DATA,
+	GPT_TYPE_MS_RESERVED,
+	GPT_TYPE_NETBSD_CCD,
+	GPT_TYPE_NETBSD_CGD,
+	GPT_TYPE_NETBSD_FFS,
+	GPT_TYPE_NETBSD_LFS,
+	GPT_TYPE_NETBSD_RAIDFRAME,
+	GPT_TYPE_NETBSD_SWAP
+} gpt_type_t;
+
+typedef uint8_t gpt_uuid_t[16];
+extern const gpt_uuid_t gpt_uuid_nil;
+
+__BEGIN_DECLS
+static inline int
+gpt_uuid_is_nil(const gpt_uuid_t u) {
+	return memcmp(u, gpt_uuid_nil, sizeof(gpt_uuid_t)) == 0;
+}
+
+static inline int
+gpt_uuid_equal(const gpt_uuid_t u1, const gpt_uuid_t u2) {
+	return memcmp(u1, u2, sizeof(gpt_uuid_t)) == 0;
+}
+
+static inline void
+gpt_uuid_copy(gpt_uuid_t u1, const gpt_uuid_t u2) {
+	memcpy(u1, u2, sizeof(gpt_uuid_t));
+}
+
+int gpt_uuid_snprintf(char *, size_t, const char *, const gpt_uuid_t);
+
+void gpt_uuid_create(gpt_type_t, gpt_uuid_t, uint16_t *, size_t);
+
+int gpt_uuid_parse(const char *, gpt_uuid_t);
+
+__END_DECLS
+
+#endif /* _GPT_UUID_T */

Reply via email to