mirror of
https://github.com/freebsd/freebsd-src
synced 2024-09-06 17:18:32 +00:00
GEOM: Introduce gctl_add_param() API.
Make gctl_add_param() API public, allowing more precise control over parameter flags. Previously it was impossible to properly declare write-only ASCII parameters, used for result reporting, they were declared as read-write binary instead, that was not nice. MFC after: 1 month
This commit is contained in:
parent
01b9c48b5d
commit
2117cdd4b4
|
@ -1327,8 +1327,9 @@ gpart_issue(struct gctl_req *req, unsigned int fl __unused)
|
|||
goto done;
|
||||
}
|
||||
|
||||
bzero(buf, sizeof(buf));
|
||||
gctl_rw_param(req, "output", sizeof(buf), buf);
|
||||
buf[0] = '\0';
|
||||
gctl_add_param(req, "output", sizeof(buf), buf,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(req);
|
||||
if (errstr == NULL || errstr[0] == '\0') {
|
||||
if (buf[0] != '\0')
|
||||
|
|
|
@ -151,8 +151,8 @@ gctl_new_arg(struct gctl_req *req)
|
|||
return (ap);
|
||||
}
|
||||
|
||||
static void
|
||||
gctl_param_add(struct gctl_req *req, const char *name, int len, void *value,
|
||||
void
|
||||
gctl_add_param(struct gctl_req *req, const char *name, int len, void *value,
|
||||
int flag)
|
||||
{
|
||||
struct gctl_req_arg *ap;
|
||||
|
@ -181,14 +181,14 @@ void
|
|||
gctl_ro_param(struct gctl_req *req, const char *name, int len, const void* value)
|
||||
{
|
||||
|
||||
gctl_param_add(req, name, len, __DECONST(void *, value), GCTL_PARAM_RD);
|
||||
gctl_add_param(req, name, len, __DECONST(void *, value), GCTL_PARAM_RD);
|
||||
}
|
||||
|
||||
void
|
||||
gctl_rw_param(struct gctl_req *req, const char *name, int len, void *value)
|
||||
{
|
||||
|
||||
gctl_param_add(req, name, len, value, GCTL_PARAM_RW);
|
||||
gctl_add_param(req, name, len, value, GCTL_PARAM_RW);
|
||||
}
|
||||
|
||||
const char *
|
||||
|
|
|
@ -149,6 +149,8 @@ void gctl_dump(struct gctl_req *, FILE *);
|
|||
void gctl_free(struct gctl_req *);
|
||||
struct gctl_req *gctl_get_handle(void);
|
||||
const char *gctl_issue(struct gctl_req *);
|
||||
void gctl_add_param(struct gctl_req *req, const char *name, int len,
|
||||
void *value, int flag);
|
||||
void gctl_ro_param(struct gctl_req *, const char *, int, const void *);
|
||||
void gctl_rw_param(struct gctl_req *, const char *, int, void *);
|
||||
|
||||
|
|
|
@ -263,7 +263,9 @@ do_single(int argc, char **argv, int action)
|
|||
cp += strlen(_PATH_DEV);
|
||||
gctl_ro_param(grq, buf1, -1, cp);
|
||||
}
|
||||
gctl_rw_param(grq, "output", sizeof(buf1), buf1);
|
||||
buf1[0] = '\0';
|
||||
gctl_add_param(grq, "output", sizeof(buf1), buf1,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(grq);
|
||||
if (errstr == NULL) {
|
||||
if (verbose) {
|
||||
|
@ -371,10 +373,12 @@ dumpout(int unit)
|
|||
grq = gctl_get_handle();
|
||||
ncp = 65536;
|
||||
cp = malloc(ncp);
|
||||
cp[0] = '\0';
|
||||
gctl_ro_param(grq, "verb", -1, "list");
|
||||
gctl_ro_param(grq, "class", -1, "CCD");
|
||||
gctl_ro_param(grq, "unit", sizeof(unit), &unit);
|
||||
gctl_rw_param(grq, "output", ncp, cp);
|
||||
gctl_add_param(grq, "output", ncp, cp,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(grq);
|
||||
if (errstr != NULL)
|
||||
errx(1, "%s\nor possibly kernel and ccdconfig out of sync",
|
||||
|
|
|
@ -487,7 +487,7 @@ run_command(int argc, char *argv[])
|
|||
gctl_ro_param(req, "version", sizeof(*version), version);
|
||||
parse_arguments(cmd, req, &argc, &argv);
|
||||
|
||||
bzero(buf, sizeof(buf));
|
||||
buf[0] = '\0';
|
||||
if (cmd->gc_func != NULL) {
|
||||
unsigned flags;
|
||||
|
||||
|
@ -495,7 +495,8 @@ run_command(int argc, char *argv[])
|
|||
cmd->gc_func(req, flags);
|
||||
errstr = req->error;
|
||||
} else {
|
||||
gctl_rw_param(req, "output", sizeof(buf), buf);
|
||||
gctl_add_param(req, "output", sizeof(buf), buf,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(req);
|
||||
}
|
||||
if (errstr != NULL && errstr[0] != '\0') {
|
||||
|
|
|
@ -575,13 +575,15 @@ find_name(const char *prefix, int type, int namelen)
|
|||
char line[1024];
|
||||
|
||||
comment[0] = '\0';
|
||||
buf[0] = '\0';
|
||||
|
||||
/* Find a name. Fetch out configuration first. */
|
||||
req = gctl_get_handle();
|
||||
gctl_ro_param(req, "class", -1, "VINUM");
|
||||
gctl_ro_param(req, "verb", -1, "getconfig");
|
||||
gctl_ro_param(req, "comment", -1, comment);
|
||||
gctl_rw_param(req, "config", sizeof(buf), buf);
|
||||
gctl_add_param(req, "config", sizeof(buf), buf,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(req);
|
||||
if (errstr != NULL) {
|
||||
warnx("can't get configuration: %s", errstr);
|
||||
|
@ -841,13 +843,16 @@ gvinum_list(int argc, char * const *argv)
|
|||
|
||||
}
|
||||
|
||||
config[0] = '\0';
|
||||
|
||||
req = gctl_get_handle();
|
||||
gctl_ro_param(req, "class", -1, "VINUM");
|
||||
gctl_ro_param(req, "verb", -1, "list");
|
||||
gctl_ro_param(req, "cmd", -1, cmd);
|
||||
gctl_ro_param(req, "argc", sizeof(int), &argc);
|
||||
gctl_ro_param(req, "flags", sizeof(int), &flags);
|
||||
gctl_rw_param(req, "config", sizeof(config), config);
|
||||
gctl_add_param(req, "config", sizeof(config), config,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
if (argc) {
|
||||
for (i = 0; i < argc; i++) {
|
||||
snprintf(buf, sizeof(buf), "argv%d", i);
|
||||
|
@ -1421,12 +1426,14 @@ printconfig(FILE *of, const char *comment)
|
|||
|
||||
uname(&uname_s);
|
||||
time(&now);
|
||||
buf[0] = '\0';
|
||||
|
||||
req = gctl_get_handle();
|
||||
gctl_ro_param(req, "class", -1, "VINUM");
|
||||
gctl_ro_param(req, "verb", -1, "getconfig");
|
||||
gctl_ro_param(req, "comment", -1, comment);
|
||||
gctl_rw_param(req, "config", sizeof(buf), buf);
|
||||
gctl_add_param(req, "config", sizeof(buf), buf,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(req);
|
||||
if (errstr != NULL) {
|
||||
warnx("can't get configuration: %s", errstr);
|
||||
|
|
|
@ -1207,12 +1207,13 @@ gpart_create(struct gprovider *pp, const char *default_type,
|
|||
}
|
||||
}
|
||||
|
||||
output[0] = '\0';
|
||||
|
||||
r = gctl_get_handle();
|
||||
gctl_ro_param(r, "class", -1, "PART");
|
||||
gctl_ro_param(r, "arg0", -1, geom->lg_name);
|
||||
gctl_ro_param(r, "flags", -1, GPART_FLAGS);
|
||||
gctl_ro_param(r, "verb", -1, "add");
|
||||
|
||||
gctl_ro_param(r, "type", -1, items[0].text);
|
||||
snprintf(sizestr, sizeof(sizestr), "%jd", size);
|
||||
gctl_ro_param(r, "size", -1, sizestr);
|
||||
|
@ -1220,7 +1221,8 @@ gpart_create(struct gprovider *pp, const char *default_type,
|
|||
gctl_ro_param(r, "start", -1, startstr);
|
||||
if (items[3].text[0] != '\0')
|
||||
gctl_ro_param(r, "label", -1, items[3].text);
|
||||
gctl_rw_param(r, "output", sizeof(output), output);
|
||||
gctl_add_param(r, "output", sizeof(output), output,
|
||||
GCTL_PARAM_WR | GCTL_PARAM_ASCII);
|
||||
errstr = gctl_issue(r);
|
||||
if (errstr != NULL && errstr[0] != '\0') {
|
||||
gpart_show_error("Error", NULL, errstr);
|
||||
|
|
Loading…
Reference in a new issue