[git commit master] sysctl: avoid inline initialization

Mike Frysinger vapier at gentoo.org
Thu Oct 22 05:17:46 UTC 2009


commit: http://git.uclibc.org/uClibc/commit/?id=3b96fc2ea791adfaeef265854d3a58259a0d3f19
branch: http://git.uclibc.org/uClibc/commit/?id=refs/heads/master

Assign each field one by one rather than stack initialization as gcc will
call memset() to zero out the rest of the structure -- which we don't care
about as the field is unused and not seen outside of the libc.

Signed-off-by: Mike Frysinger <vapier at gentoo.org>
---
 libc/sysdeps/linux/common/sysctl.c |   26 +++++++++-----------------
 1 files changed, 9 insertions(+), 17 deletions(-)

diff --git a/libc/sysdeps/linux/common/sysctl.c b/libc/sysdeps/linux/common/sysctl.c
index 11d53cd..f65a3ea 100644
--- a/libc/sysdeps/linux/common/sysctl.c
+++ b/libc/sysdeps/linux/common/sysctl.c
@@ -10,10 +10,6 @@
 #include <sys/syscall.h>
 #if defined __NR__sysctl && (defined __USE_GNU || defined __USE_BSD)
 
-/* psm: including sys/sysctl.h would depend on kernel headers */
-extern int sysctl (int *__name, int __nlen, void *__oldval,
-		   size_t *__oldlenp, void *__newval, size_t __newlen) __THROW;
-
 struct __sysctl_args {
 	int *name;
 	int nlen;
@@ -24,21 +20,17 @@ struct __sysctl_args {
 	unsigned long __unused[4];
 };
 
-static __always_inline
-_syscall1(int, _sysctl, struct __sysctl_args *, args)
-
 int sysctl(int *name, int nlen, void *oldval, size_t * oldlenp,
 		   void *newval, size_t newlen)
 {
-	struct __sysctl_args args = {
-	  .name = name,
-	  .nlen = nlen,
-	  .oldval = oldval,
-	  .oldlenp = oldlenp,
-	  .newval = newval,
-	  .newlen = newlen
-	};
-
-	return _sysctl(&args);
+	/* avoid initializing on the stack as gcc will call memset() */
+	struct __sysctl_args args;
+	args.name = name;
+	args.nlen = nlen;
+	args.oldval = oldval;
+	args.oldlenp = oldlenp;
+	args.newval = newval;
+	args.newlen = newlen;
+	return INLINE_SYSCALL(_sysctl, 1, &args);
 }
 #endif
-- 
1.6.3.3



More information about the uClibc-cvs mailing list