summaryrefslogtreecommitdiffstats
path: root/sys/kern/kern_sysctl.c
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>2007-11-30 21:29:08 +0000
committerpeter <peter@FreeBSD.org>2007-11-30 21:29:08 +0000
commit8959a77f75e14ee526cde23b54520d20e8cb1a78 (patch)
treefa5a1febb46ea7a786316238e6e1cd3b887169d7 /sys/kern/kern_sysctl.c
parentf1ac56b04d023087e7771958a39880cb905293e9 (diff)
downloadFreeBSD-src-8959a77f75e14ee526cde23b54520d20e8cb1a78.zip
FreeBSD-src-8959a77f75e14ee526cde23b54520d20e8cb1a78.tar.gz
Add sysctl_rename_oid() to support device_set_unit() usage. Otherwise,
when unit numbers are changed, the sysctl devinfo tree gets out of sync and duplicate trees are attempted to be attached with the original name.
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r--sys/kern/kern_sysctl.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 2ce6f7e..d71c746 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -415,6 +415,25 @@ sysctl_add_oid(struct sysctl_ctx_list *clist, struct sysctl_oid_list *parent,
}
/*
+ * Rename an existing oid.
+ */
+void
+sysctl_rename_oid(struct sysctl_oid *oidp, const char *name)
+{
+ ssize_t len;
+ char *newname;
+ void *oldname;
+
+ oldname = (void *)(uintptr_t)(const void *)oidp->oid_name;
+ len = strlen(name);
+ newname = malloc(len + 1, M_SYSCTLOID, M_WAITOK);
+ bcopy(name, newname, len + 1);
+ newname[len] = '\0';
+ oidp->oid_name = newname;
+ free(oldname, M_SYSCTLOID);
+}
+
+/*
* Reparent an existing oid.
*/
int
OpenPOWER on IntegriCloud