[libbsd 05/22] Remove duplicate sysctl(), etc. definitions

Sebastian Huber sebastian.huber at embedded-brains.de
Fri Jun 24 06:33:33 UTC 2022


Collecting all system calls in a single translation unit is not good due to the
library initialization through linker sets.

Update #4475.
---
 freebsd/sys/kern/kern_sysctl.c         |  4 ++
 freebsd/sys/sys/sysctl.h               |  8 ++++
 rtemsbsd/rtems/rtems-bsd-syscall-api.c | 64 --------------------------
 3 files changed, 12 insertions(+), 64 deletions(-)

diff --git a/freebsd/sys/kern/kern_sysctl.c b/freebsd/sys/kern/kern_sysctl.c
index 71cbd2d8..f529704a 100644
--- a/freebsd/sys/kern/kern_sysctl.c
+++ b/freebsd/sys/kern/kern_sysctl.c
@@ -1773,7 +1773,11 @@ sysctl_new_kernel(struct sysctl_req *req, void *p, size_t l)
 
 int
 kernel_sysctl(struct thread *td, int *name, u_int namelen, void *old,
+#ifndef __rtems__
     size_t *oldlenp, void *new, size_t newlen, size_t *retval, int flags)
+#else /* __rtems__ */
+    size_t *oldlenp, const void *new, size_t newlen, size_t *retval, int flags)
+#endif /* __rtems__ */
 {
 	int error = 0;
 	struct sysctl_req req;
diff --git a/freebsd/sys/sys/sysctl.h b/freebsd/sys/sys/sysctl.h
index fa9779f3..c21f19d3 100644
--- a/freebsd/sys/sys/sysctl.h
+++ b/freebsd/sys/sys/sysctl.h
@@ -1129,10 +1129,18 @@ int	sysctl_ctx_entry_del(struct sysctl_ctx_list *clist,
 	    struct sysctl_oid *oidp);
 
 int	kernel_sysctl(struct thread *td, int *name, u_int namelen, void *old,
+#ifndef __rtems__
 	    size_t *oldlenp, void *new, size_t newlen, size_t *retval,
+#else /* __rtems__ */
+	    size_t *oldlenp, const void *newp, size_t newlen, size_t *retval,
+#endif /* __rtems__ */
 	    int flags);
 int	kernel_sysctlbyname(struct thread *td, char *name, void *old,
+#ifndef __rtems__
 	    size_t *oldlenp, void *new, size_t newlen, size_t *retval,
+#else /* __rtems__ */
+	    size_t *oldlenp, const void *newp, size_t newlen, size_t *retval,
+#endif /* __rtems__ */
 	    int flags);
 #ifndef __rtems__
 int	userland_sysctl(struct thread *td, int *name, u_int namelen, void *old,
diff --git a/rtemsbsd/rtems/rtems-bsd-syscall-api.c b/rtemsbsd/rtems/rtems-bsd-syscall-api.c
index 1f659112..5c45d88a 100644
--- a/rtemsbsd/rtems/rtems-bsd-syscall-api.c
+++ b/rtemsbsd/rtems/rtems-bsd-syscall-api.c
@@ -4,8 +4,6 @@
  * @ingroup rtems_bsd_rtems
  *
  * @brief TODO.
- *
- * File origin from FreeBSD 'lib/libc/gen/sysctlnametomib.c'.
  */
 
 /*
@@ -794,68 +792,6 @@ out:
 	return rtems_bsd_error_to_status_and_errno(error);
 }
 
-int
-sysctl(const int *name, u_int namelen, void *oldp, size_t *oldlenp,
-    const void *newp, size_t newlen)
-{
-	int error = EINVAL;
-	if (namelen <= CTL_MAXNAME) {
-		int namedup[CTL_MAXNAME];
-		memcpy(namedup, name, namelen * sizeof(*name));
-		error = kernel_sysctl(NULL, namedup, namelen, oldp, oldlenp,
-		    RTEMS_DECONST(void *, newp), newlen, oldlenp, 0);
-	}
-	return rtems_bsd_error_to_status_and_errno(error);
-}
-
-/*
- * File origin from FreeBSD 'lib/libc/gen/sysctlbyname.c'.
- *
- * ----------------------------------------------------------------------------
- * "THE BEER-WARE LICENSE" (Revision 42):
- * <phk at FreeBSD.org> wrote this file.  As long as you retain this notice you
- * can do whatever you want with this stuff. If we meet some day, and you think
- * this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
- * ----------------------------------------------------------------------------
- *
- */
-int
-sysctlbyname(const char *name, void *oldp, size_t *oldlenp, const void *newp,
-    size_t newlen)
-{
-	int real_oid[CTL_MAXNAME + 2];
-	int error;
-	size_t oidlen;
-	oidlen = sizeof(real_oid) / sizeof(int);
-	error = sysctlnametomib(name, real_oid, &oidlen);
-	if (error < 0)
-		return (error);
-	error = sysctl(real_oid, oidlen, oldp, oldlenp, newp, newlen);
-	return rtems_bsd_error_to_status_and_errno(error);
-}
-
-/*
- * File origin from FreeBSD 'lib/libc/gen/sysctlnametomib.c'.
- *
- * This function uses a presently undocumented interface to the kernel
- * to walk the tree and get the type so it can print the value.
- * This interface is under work and consideration, and should probably
- * be killed with a big axe by the first person who can find the time.
- * (be aware though, that the proper interface isn't as obvious as it
- * may seem, there are various conflicting requirements.
- */
-int
-sysctlnametomib(const char *name, int *mibp, size_t *sizep)
-{
-	int oid[2];
-	int error;
-	oid[0] = 0;
-	oid[1] = 3;
-	*sizep *= sizeof(int);
-	error = sysctl(oid, 2, mibp, sizep, name, strlen(name));
-	*sizep /= sizeof(int);
-	return (error);
-}
 
 static int
 rtems_bsd_sysgen_open_error(
-- 
2.35.3



More information about the devel mailing list