summaryrefslogtreecommitdiff
path: root/libc/sysdeps/linux/common/sysctl.c
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2009-10-22 00:43:19 -0400
committerMike Frysinger <vapier@gentoo.org>2009-10-22 00:43:19 -0400
commit3b96fc2ea791adfaeef265854d3a58259a0d3f19 (patch)
treefe4112bdb12787f83352ccd3157b75c9b5986f83 /libc/sysdeps/linux/common/sysctl.c
parent829779686b0a263ad3582aecc1cc7a296c38a1c9 (diff)
sysctl: avoid inline initialization
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@gentoo.org>
Diffstat (limited to 'libc/sysdeps/linux/common/sysctl.c')
-rw-r--r--libc/sysdeps/linux/common/sysctl.c26
1 files changed, 9 insertions, 17 deletions
diff --git a/libc/sysdeps/linux/common/sysctl.c b/libc/sysdeps/linux/common/sysctl.c
index 11d53cd8e..f65a3eaa2 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