Revision 3ce34dfb linux-user/syscall.c
b/linux-user/syscall.c | ||
---|---|---|
6865 | 6865 |
break; |
6866 | 6866 |
#endif |
6867 | 6867 |
|
6868 |
#ifdef CONFIG_SPLICE |
|
6869 |
#ifdef TARGET_NR_tee |
|
6870 |
case TARGET_NR_tee: |
|
6871 |
{ |
|
6872 |
ret = get_errno(tee(arg1,arg2,arg3,arg4)); |
|
6873 |
} |
|
6874 |
break; |
|
6875 |
#endif |
|
6876 |
#ifdef TARGET_NR_splice |
|
6877 |
case TARGET_NR_splice: |
|
6878 |
{ |
|
6879 |
loff_t loff_in, loff_out; |
|
6880 |
loff_t *ploff_in = NULL, *ploff_out = NULL; |
|
6881 |
if(arg2) { |
|
6882 |
get_user_u64(loff_in, arg2); |
|
6883 |
ploff_in = &loff_in; |
|
6884 |
} |
|
6885 |
if(arg4) { |
|
6886 |
get_user_u64(loff_out, arg2); |
|
6887 |
ploff_out = &loff_out; |
|
6888 |
} |
|
6889 |
ret = get_errno(splice(arg1, ploff_in, arg3, ploff_out, arg5, arg6)); |
|
6890 |
} |
|
6891 |
break; |
|
6892 |
#endif |
|
6893 |
#ifdef TARGET_NR_vmsplice |
|
6894 |
case TARGET_NR_vmsplice: |
|
6895 |
{ |
|
6896 |
int count = arg3; |
|
6897 |
struct iovec *vec; |
|
6898 |
|
|
6899 |
vec = alloca(count * sizeof(struct iovec)); |
|
6900 |
if (lock_iovec(VERIFY_READ, vec, arg2, count, 1) < 0) |
|
6901 |
goto efault; |
|
6902 |
ret = get_errno(vmsplice(arg1, vec, count, arg4)); |
|
6903 |
unlock_iovec(vec, arg2, count, 0); |
|
6904 |
} |
|
6905 |
break; |
|
6906 |
#endif |
|
6907 |
#endif /* CONFIG_SPLICE */ |
|
6868 | 6908 |
default: |
6869 | 6909 |
unimplemented: |
6870 | 6910 |
gemu_log("qemu: Unsupported syscall: %d\n", num); |
Also available in: Unified diff