diff options
author | Jonathan Lemon <jlemon@FreeBSD.org> | 2001-05-19 05:45:55 +0000 |
---|---|---|
committer | Jonathan Lemon <jlemon@FreeBSD.org> | 2001-05-19 05:45:55 +0000 |
commit | 1890520a771cd2a02d14d84e05301feafb6928ad (patch) | |
tree | 58f8a1adfa68ff3cd1f13864801a0742b2ed576b /sys/kern/kern_sysctl.c | |
parent | bc0f2245d1761f101fe7102be45cfd48c1c81d6f (diff) | |
download | src-1890520a771cd2a02d14d84e05301feafb6928ad.tar.gz src-1890520a771cd2a02d14d84e05301feafb6928ad.zip |
Add convenience function kernel_sysctlbyname() for kernel consumers,
so they don't have to roll their own sysctlbyname function.
Notes
Notes:
svn path=/head/; revision=76834
Diffstat (limited to 'sys/kern/kern_sysctl.c')
-rw-r--r-- | sys/kern/kern_sysctl.c | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c index 206322c14111..99f2d695c56f 100644 --- a/sys/kern/kern_sysctl.c +++ b/sys/kern/kern_sysctl.c @@ -844,7 +844,8 @@ sysctl_new_kernel(struct sysctl_req *req, void *p, size_t l) } int -kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *oldlenp, void *new, size_t newlen, size_t *retval) +kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old, + size_t *oldlenp, void *new, size_t newlen, size_t *retval) { int error = 0; struct sysctl_req req; @@ -902,6 +903,28 @@ kernel_sysctl(struct proc *p, int *name, u_int namelen, void *old, size_t *oldle return (error); } +int +kernel_sysctlbyname(struct proc *p, char *name, void *old, size_t *oldlenp, + void *new, size_t newlen, size_t *retval) +{ + int oid[CTL_MAXNAME]; + size_t oidlen; + int error, plen; + + oid[0] = 0; /* sysctl internal magic */ + oid[1] = 3; /* name2oid */ + oidlen = sizeof(oid); + + error = kernel_sysctl(p, oid, 2, oid, &oidlen, + (void *)name, strlen(name), &plen); + if (error) + return (error); + + error = kernel_sysctl(p, oid, plen / sizeof(int), old, oldlenp, + new, newlen, retval); + return (error); +} + /* * Transfer function to/from user space. */ |