diff options
author | peter <peter@FreeBSD.org> | 2007-11-30 21:29:08 +0000 |
---|---|---|
committer | peter <peter@FreeBSD.org> | 2007-11-30 21:29:08 +0000 |
commit | 8959a77f75e14ee526cde23b54520d20e8cb1a78 (patch) | |
tree | fa5a1febb46ea7a786316238e6e1cd3b887169d7 /sys/kern/kern_sysctl.c | |
parent | f1ac56b04d023087e7771958a39880cb905293e9 (diff) | |
download | FreeBSD-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.c | 19 |
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 |