diff --git a/sbin/geom/misc/subr.c b/sbin/geom/misc/subr.c index 745d91955d3d..64df7c6845ed 100644 --- a/sbin/geom/misc/subr.c +++ b/sbin/geom/misc/subr.c @@ -414,3 +414,47 @@ gctl_change_param(struct gctl_req *req, const char *name, int len, } return (ENOENT); } + +int +gctl_delete_param(struct gctl_req *req, const char *name) +{ + struct gctl_req_arg *ap; + unsigned int i; + + if (req == NULL || req->error != NULL) + return (EDOOFUS); + + i = 0; + while (i < req->narg) { + ap = &req->arg[i]; + if (strcmp(ap->name, name) == 0) + break; + i++; + } + if (i == req->narg) + return (ENOENT); + + req->narg--; + while (i < req->narg) { + req->arg[i] = req->arg[i + 1]; + i++; + } + return (0); +} + +int +gctl_has_param(struct gctl_req *req, const char *name) +{ + struct gctl_req_arg *ap; + unsigned int i; + + if (req == NULL || req->error != NULL) + return (0); + + for (i = 0; i < req->narg; i++) { + ap = &req->arg[i]; + if (strcmp(ap->name, name) == 0) + return (1); + } + return (0); +} diff --git a/sbin/geom/misc/subr.h b/sbin/geom/misc/subr.h index 4c54142891bc..c3242a3bdc9b 100644 --- a/sbin/geom/misc/subr.h +++ b/sbin/geom/misc/subr.h @@ -47,4 +47,7 @@ intmax_t gctl_get_intmax(struct gctl_req *req, const char *pfmt, ...) __printfli const char *gctl_get_ascii(struct gctl_req *req, const char *pfmt, ...) __printflike(2, 3); int gctl_change_param(struct gctl_req *req, const char *name, int len, const void *value); +int gctl_delete_param(struct gctl_req *req, const char *name); +int gctl_has_param(struct gctl_req *req, const char *name); + #endif /* !_SUBR_H_ */