git-svn-id: https://svn.o-hand.com/repos/poky/trunk@4332 311d38ba-8fff-0310-9ca6-ca027cbcb966
56 lines
1.9 KiB
Diff
56 lines
1.9 KiB
Diff
#DPATCHLEVEL=0
|
|
---
|
|
# linux-user/syscall.c | 32 +++++++++++++++++++++++++++++---
|
|
# 1 file changed, 29 insertions(+), 3 deletions(-)
|
|
#
|
|
Index: linux-user/syscall.c
|
|
===================================================================
|
|
--- linux-user/syscall.c.orig 2008-04-24 20:15:59.000000000 +0100
|
|
+++ linux-user/syscall.c 2008-04-24 20:16:01.000000000 +0100
|
|
@@ -52,6 +52,7 @@
|
|
//#include <sys/user.h>
|
|
#include <netinet/ip.h>
|
|
#include <netinet/tcp.h>
|
|
+#include <sys/sysctl.h>
|
|
|
|
#define termios host_termios
|
|
#define winsize host_winsize
|
|
@@ -4758,9 +4759,34 @@
|
|
break;
|
|
#endif
|
|
case TARGET_NR__sysctl:
|
|
- /* We don't implement this, but ENOTDIR is always a safe
|
|
- return value. */
|
|
- ret = -TARGET_ENOTDIR;
|
|
+ {
|
|
+ struct __sysctl_args *args = (struct __sysctl_args *) arg1;
|
|
+ int *name_target, *name, nlen, *oldlenp, oldlen, newlen, i;
|
|
+ void *oldval, *newval;
|
|
+
|
|
+ name_target = (int *) tswapl((long) args->name);
|
|
+ nlen = tswapl(args->nlen);
|
|
+ oldval = (void *) tswapl((long) args->oldval);
|
|
+ oldlenp = (int *) tswapl((long) args->oldlenp);
|
|
+ oldlen = tswapl(*oldlenp);
|
|
+ newval = (void *) tswapl((long) args->newval);
|
|
+ newlen = tswapl(args->newlen);
|
|
+
|
|
+ name = alloca(nlen * sizeof (int));
|
|
+ for (i = 0; i < nlen; i++)
|
|
+ name[i] = tswapl(name_target[i]);
|
|
+
|
|
+ if (nlen == 2 && name[0] == CTL_KERN && name[1] == KERN_VERSION) {
|
|
+ ret = get_errno(
|
|
+ sysctl(name, nlen, oldval, &oldlen, newval, newlen));
|
|
+ if (!is_error(ret)) {
|
|
+ *oldlenp = tswapl(oldlen);
|
|
+ }
|
|
+ } else {
|
|
+ gemu_log("qemu: Unsupported sysctl name\n");
|
|
+ ret = -ENOSYS;
|
|
+ }
|
|
+ }
|
|
break;
|
|
case TARGET_NR_sched_setparam:
|
|
{
|