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