summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sbin/geom/misc/subr.c44
-rw-r--r--sbin/geom/misc/subr.h3
2 files changed, 47 insertions, 0 deletions
diff --git a/sbin/geom/misc/subr.c b/sbin/geom/misc/subr.c
index 745d919..64df7c6 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 4c54142..c3242a3 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_ */
OpenPOWER on IntegriCloud