svn commit: r263487 - user/marcel/mkimg
Marcel Moolenaar
marcel at FreeBSD.org
Fri Mar 21 16:11:51 UTC 2014
Author: marcel
Date: Fri Mar 21 16:11:49 2014
New Revision: 263487
URL: http://svnweb.freebsd.org/changeset/base/263487
Log:
Add more partition types (mostly just the FreeBSD ones) to GPT.
Avoid having schemes use literal strings by introducing an enum
as the intermediate representation (see geom_part).
Modified:
user/marcel/mkimg/apm.c
user/marcel/mkimg/bsd.c
user/marcel/mkimg/ebr.c
user/marcel/mkimg/gpt.c
user/marcel/mkimg/mbr.c
user/marcel/mkimg/pc98.c
user/marcel/mkimg/scheme.c
user/marcel/mkimg/scheme.h
user/marcel/mkimg/vtoc8.c
Modified: user/marcel/mkimg/apm.c
==============================================================================
--- user/marcel/mkimg/apm.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/apm.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static struct mkimg_alias apm_aliases[] = {
- { NULL, 0 }
+ { ALIAS_NONE, 0 }
};
static u_int
Modified: user/marcel/mkimg/bsd.c
==============================================================================
--- user/marcel/mkimg/bsd.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/bsd.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static struct mkimg_alias bsd_aliases[] = {
- { NULL, 0 }
+ { ALIAS_NONE, 0 }
};
static u_int
Modified: user/marcel/mkimg/ebr.c
==============================================================================
--- user/marcel/mkimg/ebr.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/ebr.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static struct mkimg_alias ebr_aliases[] = {
- { NULL, 0 }
+ { ALIAS_NONE, 0 }
};
static u_int
Modified: user/marcel/mkimg/gpt.c
==============================================================================
--- user/marcel/mkimg/gpt.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/gpt.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -43,10 +43,26 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static uuid_t gpt_uuid_efi = GPT_ENT_TYPE_EFI;
+static uuid_t gpt_uuid_freebsd = GPT_ENT_TYPE_FREEBSD;
+static uuid_t gpt_uuid_freebsd_boot = GPT_ENT_TYPE_FREEBSD_BOOT;
+static uuid_t gpt_uuid_freebsd_nandfs = GPT_ENT_TYPE_FREEBSD_NANDFS;
+static uuid_t gpt_uuid_freebsd_swap = GPT_ENT_TYPE_FREEBSD_SWAP;
+static uuid_t gpt_uuid_freebsd_ufs = GPT_ENT_TYPE_FREEBSD_UFS;
+static uuid_t gpt_uuid_freebsd_vinum = GPT_ENT_TYPE_FREEBSD_VINUM;
+static uuid_t gpt_uuid_freebsd_zfs = GPT_ENT_TYPE_FREEBSD_ZFS;
+static uuid_t gpt_uuid_mbr = GPT_ENT_TYPE_MBR;
static struct mkimg_alias gpt_aliases[] = {
- { "efi", ALIAS_PTR2TYPE(&gpt_uuid_efi) },
- { NULL, 0 }
+ { ALIAS_EFI, ALIAS_PTR2TYPE(&gpt_uuid_efi) },
+ { ALIAS_FREEBSD, ALIAS_PTR2TYPE(&gpt_uuid_freebsd) },
+ { ALIAS_FREEBSD_BOOT, ALIAS_PTR2TYPE(&gpt_uuid_freebsd_boot) },
+ { ALIAS_FREEBSD_NANDFS, ALIAS_PTR2TYPE(&gpt_uuid_freebsd_nandfs) },
+ { ALIAS_FREEBSD_SWAP, ALIAS_PTR2TYPE(&gpt_uuid_freebsd_swap) },
+ { ALIAS_FREEBSD_UFS, ALIAS_PTR2TYPE(&gpt_uuid_freebsd_ufs) },
+ { ALIAS_FREEBSD_VINUM, ALIAS_PTR2TYPE(&gpt_uuid_freebsd_vinum) },
+ { ALIAS_FREEBSD_ZFS, ALIAS_PTR2TYPE(&gpt_uuid_freebsd_zfs) },
+ { ALIAS_MBR, ALIAS_PTR2TYPE(&gpt_uuid_mbr) },
+ { ALIAS_NONE, 0 } /* Keep last! */
};
/* CRC32 code derived from work by Gary S. Brown. */
Modified: user/marcel/mkimg/mbr.c
==============================================================================
--- user/marcel/mkimg/mbr.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/mbr.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static struct mkimg_alias mbr_aliases[] = {
- { NULL, 0 }
+ { ALIAS_NONE, 0 }
};
static u_int
Modified: user/marcel/mkimg/pc98.c
==============================================================================
--- user/marcel/mkimg/pc98.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/pc98.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static struct mkimg_alias pc98_aliases[] = {
- { NULL, 0 }
+ { ALIAS_NONE, 0 }
};
static u_int
Modified: user/marcel/mkimg/scheme.c
==============================================================================
--- user/marcel/mkimg/scheme.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/scheme.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -39,9 +39,39 @@ __FBSDID("$FreeBSD$");
#include "mkimg.h"
#include "scheme.h"
+static struct {
+ const char *name;
+ enum alias alias;
+} scheme_alias[] = {
+ { "efi", ALIAS_EFI },
+ { "freebsd", ALIAS_FREEBSD },
+ { "freebsd-boot", ALIAS_FREEBSD_BOOT },
+ { "freebsd-nandfs", ALIAS_FREEBSD_NANDFS },
+ { "freebsd-swap", ALIAS_FREEBSD_SWAP },
+ { "freebsd-ufs", ALIAS_FREEBSD_UFS },
+ { "freebsd-vinum", ALIAS_FREEBSD_VINUM },
+ { "freebsd-zfs", ALIAS_FREEBSD_ZFS },
+ { "mbr", ALIAS_MBR },
+ { NULL, ALIAS_NONE } /* Keep last! */
+};
+
static struct mkimg_scheme *scheme;
static u_int secsz = 512;
+static enum alias
+scheme_parse_alias(const char *name)
+{
+ u_int idx;
+
+ idx = 0;
+ while (scheme_alias[idx].name != NULL) {
+ if (strcasecmp(scheme_alias[idx].name, name) == 0)
+ return (scheme_alias[idx].alias);
+ idx++;
+ }
+ return (ALIAS_NONE);
+}
+
int
scheme_select(const char *spec)
{
@@ -67,30 +97,32 @@ scheme_selected(void)
int
scheme_check_part(struct part *p)
{
- struct mkimg_alias *alias, *iter;
+ struct mkimg_alias *iter;
+ enum alias alias;
warnx("part(%s): index=%u, type=`%s', offset=%ju, size=%ju",
scheme->name, p->index, p->alias, (uintmax_t)p->offset,
(uintmax_t)p->size);
/* Check the partition type alias */
- alias = NULL;
+ alias = scheme_parse_alias(p->alias);
+ if (alias == ALIAS_NONE)
+ return (EINVAL);
+
iter = scheme->aliases;
- while (iter->name != NULL) {
- if (strcasecmp(p->alias, iter->name) == 0) {
- alias = iter;
+ while (iter->alias != ALIAS_NONE) {
+ if (alias == iter->alias)
break;
- }
iter++;
}
- if (alias == NULL)
+ if (iter->alias == ALIAS_NONE)
return (EINVAL);
p->type = iter->type;
/* Validate the optional label. */
if (p->label != NULL) {
if (strlen(p->label) > scheme->labellen)
- return (EOPNOTSUPP);
+ return (EINVAL);
}
return (0);
Modified: user/marcel/mkimg/scheme.h
==============================================================================
--- user/marcel/mkimg/scheme.h Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/scheme.h Fri Mar 21 16:11:49 2014 (r263487)
@@ -31,8 +31,24 @@
#include <sys/linker_set.h>
+enum alias {
+ ALIAS_NONE, /* Keep first! */
+ /* start */
+ ALIAS_EFI,
+ ALIAS_FREEBSD,
+ ALIAS_FREEBSD_BOOT,
+ ALIAS_FREEBSD_NANDFS,
+ ALIAS_FREEBSD_SWAP,
+ ALIAS_FREEBSD_UFS,
+ ALIAS_FREEBSD_VINUM,
+ ALIAS_FREEBSD_ZFS,
+ ALIAS_MBR,
+ /* end */
+ ALIAS_COUNT /* Keep last! */
+};
+
struct mkimg_alias {
- const char *name;
+ u_int alias;
uintptr_t type;
#define ALIAS_PTR2TYPE(p) (uintptr_t)(p)
#define ALIAS_INT2TYPE(i) (i)
Modified: user/marcel/mkimg/vtoc8.c
==============================================================================
--- user/marcel/mkimg/vtoc8.c Fri Mar 21 15:46:47 2014 (r263486)
+++ user/marcel/mkimg/vtoc8.c Fri Mar 21 16:11:49 2014 (r263487)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include "scheme.h"
static struct mkimg_alias vtoc8_aliases[] = {
- { NULL, 0 }
+ { ALIAS_NONE, 0 }
};
static u_int
More information about the svn-src-user
mailing list