aboutsummaryrefslogtreecommitdiff
path: root/sys/geom/part/g_part.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/geom/part/g_part.c')
-rw-r--r--sys/geom/part/g_part.c95
1 files changed, 34 insertions, 61 deletions
diff --git a/sys/geom/part/g_part.c b/sys/geom/part/g_part.c
index 2ccfe91b8c46..3a12a314b844 100644
--- a/sys/geom/part/g_part.c
+++ b/sys/geom/part/g_part.c
@@ -64,12 +64,12 @@ struct g_part_alias_list {
const char *lexeme;
enum g_part_alias alias;
} g_part_alias_list[G_PART_ALIAS_COUNT] = {
- { "@efi", G_PART_ALIAS_EFI },
- { "@freebsd", G_PART_ALIAS_FREEBSD },
- { "@freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
- { "@freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
- { "@freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
- { "@mbr", G_PART_ALIAS_MBR }
+ { "efi", G_PART_ALIAS_EFI },
+ { "freebsd", G_PART_ALIAS_FREEBSD },
+ { "freebsd-swap", G_PART_ALIAS_FREEBSD_SWAP },
+ { "freebsd-ufs", G_PART_ALIAS_FREEBSD_UFS },
+ { "freebsd-vinum", G_PART_ALIAS_FREEBSD_VINUM },
+ { "mbr", G_PART_ALIAS_MBR }
};
/*
@@ -111,7 +111,6 @@ enum g_part_ctl {
G_PART_CTL_DESTROY,
G_PART_CTL_MODIFY,
G_PART_CTL_MOVE,
- G_PART_CTL_QUERY,
G_PART_CTL_RECOVER,
G_PART_CTL_RESIZE,
G_PART_CTL_UNDO
@@ -247,7 +246,7 @@ g_part_parm_scheme(const char *p, struct g_part_scheme **v)
SET_FOREACH(iter, g_part_scheme_set) {
if ((*iter)->name == NULL)
continue;
- if (!strcmp((*iter)->name, p)) {
+ if (!strcasecmp((*iter)->name, p)) {
s = *iter;
break;
}
@@ -732,13 +731,6 @@ g_part_ctl_move(struct gctl_req *req, struct g_part_parms *gpp)
}
static int
-g_part_ctl_query(struct gctl_req *req, struct g_part_parms *gpp)
-{
- gctl_error(req, "%d verb 'query'", ENOSYS);
- return (ENOSYS);
-}
-
-static int
g_part_ctl_recover(struct gctl_req *req, struct g_part_parms *gpp)
{
gctl_error(req, "%d verb 'recover'", ENOSYS);
@@ -863,83 +855,67 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
ctlreq = G_PART_CTL_NONE;
modifies = 0;
- mparms = oparms = 0;
+ mparms = 0;
+ oparms = G_PART_PARM_FLAGS | G_PART_PARM_OUTPUT | G_PART_PARM_VERSION;
switch (*verb) {
case 'a':
if (!strcmp(verb, "add")) {
ctlreq = G_PART_CTL_ADD;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_SIZE |
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_SIZE |
G_PART_PARM_START | G_PART_PARM_TYPE;
- oparms = G_PART_PARM_FLAGS | G_PART_PARM_INDEX |
- G_PART_PARM_LABEL;
+ oparms |= G_PART_PARM_INDEX | G_PART_PARM_LABEL;
}
break;
case 'c':
if (!strcmp(verb, "commit")) {
ctlreq = G_PART_CTL_COMMIT;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
} else if (!strcmp(verb, "create")) {
ctlreq = G_PART_CTL_CREATE;
modifies = 1;
- mparms = G_PART_PARM_PROVIDER |
- G_PART_PARM_SCHEME;
- oparms = G_PART_PARM_ENTRIES | G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_PROVIDER | G_PART_PARM_SCHEME;
+ oparms |= G_PART_PARM_ENTRIES;
}
break;
case 'd':
if (!strcmp(verb, "delete")) {
ctlreq = G_PART_CTL_DELETE;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
} else if (!strcmp(verb, "destroy")) {
ctlreq = G_PART_CTL_DESTROY;
modifies = 1;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
}
break;
case 'm':
if (!strcmp(verb, "modify")) {
ctlreq = G_PART_CTL_MODIFY;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS | G_PART_PARM_LABEL |
- G_PART_PARM_TYPE;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
+ oparms |= G_PART_PARM_LABEL | G_PART_PARM_TYPE;
} else if (!strcmp(verb, "move")) {
ctlreq = G_PART_CTL_MOVE;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS;
- }
- break;
- case 'q':
- if (!strcmp(verb, "query")) {
- ctlreq = G_PART_CTL_QUERY;
- mparms = G_PART_PARM_REQUEST | G_PART_PARM_RESPONSE;
- oparms = G_PART_PARM_FLAGS | G_PART_PARM_GEOM;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
}
break;
case 'r':
if (!strcmp(verb, "recover")) {
ctlreq = G_PART_CTL_RECOVER;
modifies = 1;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
} else if (!strcmp(verb, "resize")) {
ctlreq = G_PART_CTL_RESIZE;
modifies = 1;
- mparms = G_PART_PARM_GEOM | G_PART_PARM_INDEX;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM | G_PART_PARM_INDEX;
}
break;
case 'u':
if (!strcmp(verb, "undo")) {
ctlreq = G_PART_CTL_UNDO;
- mparms = G_PART_PARM_GEOM;
- oparms = G_PART_PARM_FLAGS;
+ mparms |= G_PART_PARM_GEOM;
}
break;
}
@@ -977,16 +953,14 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
if (!strcmp(ap->name, "label"))
parm = G_PART_PARM_LABEL;
break;
+ case 'o':
+ if (!strcmp(ap->name, "output"))
+ parm = G_PART_PARM_OUTPUT;
+ break;
case 'p':
if (!strcmp(ap->name, "provider"))
parm = G_PART_PARM_PROVIDER;
break;
- case 'r':
- if (!strcmp(ap->name, "request"))
- parm = G_PART_PARM_REQUEST;
- else if (!strcmp(ap->name, "response"))
- parm = G_PART_PARM_RESPONSE;
- break;
case 's':
if (!strcmp(ap->name, "scheme"))
parm = G_PART_PARM_SCHEME;
@@ -1002,6 +976,8 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
case 'v':
if (!strcmp(ap->name, "verb"))
continue;
+ else if (!strcmp(ap->name, "version"))
+ parm = G_PART_PARM_VERSION;
break;
}
if ((parm & (mparms | oparms)) == 0) {
@@ -1029,15 +1005,12 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
case G_PART_PARM_LABEL:
error = g_part_parm_str(p, &gpp.gpp_label);
break;
+ case G_PART_PARM_OUTPUT:
+ error = 0; /* Write-only parameter */
+ break;
case G_PART_PARM_PROVIDER:
error = g_part_parm_provider(p, &gpp.gpp_provider);
break;
- case G_PART_PARM_REQUEST:
- error = g_part_parm_str(p, &gpp.gpp_request);
- break;
- case G_PART_PARM_RESPONSE:
- error = 0; /* Write-only parameter. */
- break;
case G_PART_PARM_SCHEME:
error = g_part_parm_scheme(p, &gpp.gpp_scheme);
break;
@@ -1050,6 +1023,9 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
case G_PART_PARM_TYPE:
error = g_part_parm_str(p, &gpp.gpp_type);
break;
+ case G_PART_PARM_VERSION:
+ error = g_part_parm_uint(p, &gpp.gpp_version);
+ break;
default:
error = EDOOFUS;
break;
@@ -1106,9 +1082,6 @@ g_part_ctlreq(struct gctl_req *req, struct g_class *mp, const char *verb)
case G_PART_CTL_MOVE:
error = g_part_ctl_move(req, &gpp);
break;
- case G_PART_CTL_QUERY:
- error = g_part_ctl_query(req, &gpp);
- break;
case G_PART_CTL_RECOVER:
error = g_part_ctl_recover(req, &gpp);
break;