aboutsummaryrefslogtreecommitdiff
path: root/linux-user
diff options
context:
space:
mode:
authorbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2003-07-09 12:26:09 +0000
committerbellard <bellard@c046a42c-6fe2-441c-8c8c-71466251a162>2003-07-09 12:26:09 +0000
commitf2674e31e0b79a8e30335438f274b846d084a383 (patch)
tree9daeb06681d70422d32912029a4601072de4bb4d /linux-user
parent4690764bba3a489d5180106d08970ced59113e22 (diff)
old select support
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@313 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'linux-user')
-rw-r--r--linux-user/syscall.c12
-rw-r--r--linux-user/syscall_defs.h6
2 files changed, 17 insertions, 1 deletions
diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index b226429103..cd3fdf5535 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -1763,7 +1763,17 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3,
}
break;
case TARGET_NR_select:
- goto unimplemented;
+ {
+ struct target_sel_arg_struct *sel = (void *)arg1;
+ sel->n = tswapl(sel->n);
+ sel->inp = tswapl(sel->inp);
+ sel->outp = tswapl(sel->outp);
+ sel->exp = tswapl(sel->exp);
+ sel->tvp = tswapl(sel->tvp);
+ ret = do_select(sel->n, (void *)sel->inp, (void *)sel->outp,
+ (void *)sel->exp, (void *)sel->tvp);
+ }
+ break;
case TARGET_NR_symlink:
ret = get_errno(symlink((const char *)arg1, (const char *)arg2));
break;
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index 3826c12909..5caf2d855e 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -390,6 +390,12 @@ struct target_tms {
target_clock_t tms_cstime;
};
+struct target_sel_arg_struct {
+ target_long n;
+ target_long inp, outp, exp;
+ target_long tvp;
+};
+
struct target_iovec {
target_long iov_base; /* Starting address */
target_long iov_len; /* Number of bytes */