+/*
+ * Validate parameters and get old / set new parameters
+ * for a structure oriented sysctl function.
+ */
+sysctl_struct(oldp, oldlenp, newp, newlen, sp, len)
+ void *oldp;
+ size_t *oldlenp;
+ void *newp;
+ size_t newlen;
+ void *sp;
+ int len;
+{
+ int error = 0;
+
+ if (oldp && *oldlenp < len)
+ return (ENOMEM);
+ if (newp && newlen > len)
+ return (EINVAL);
+ if (oldp) {
+ *oldlenp = len;
+ error = copyout(sp, oldp, len);
+ }
+ if (error == 0 && newp)
+ error = copyin(newp, sp, len);
+ return (error);
+}
+