Commit b1e341ebb7fc177434e2fda728174fc0e962578e
1 parent
dc3c9d21
fcntl64 fix, by Kirill A. Shutemov.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2517 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
18 additions
and
6 deletions
linux-user/syscall.c
| ... | ... | @@ -3872,15 +3872,27 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
| 3872 | 3872 | #if TARGET_LONG_BITS == 32 |
| 3873 | 3873 | case TARGET_NR_fcntl64: |
| 3874 | 3874 | { |
| 3875 | + int cmd; | |
| 3875 | 3876 | struct flock64 fl; |
| 3876 | 3877 | struct target_flock64 *target_fl; |
| 3877 | 3878 | #ifdef TARGET_ARM |
| 3878 | 3879 | struct target_eabi_flock64 *target_efl; |
| 3879 | 3880 | #endif |
| 3880 | 3881 | |
| 3882 | + switch(arg2){ | |
| 3883 | + case TARGET_F_GETLK64: | |
| 3884 | + cmd = F_GETLK64; | |
| 3885 | + case TARGET_F_SETLK64: | |
| 3886 | + cmd = F_SETLK64; | |
| 3887 | + case TARGET_F_SETLKW64: | |
| 3888 | + cmd = F_SETLK64; | |
| 3889 | + default: | |
| 3890 | + cmd = arg2; | |
| 3891 | + } | |
| 3892 | + | |
| 3881 | 3893 | switch(arg2) { |
| 3882 | - case F_GETLK64: | |
| 3883 | - ret = get_errno(fcntl(arg1, arg2, &fl)); | |
| 3894 | + case TARGET_F_GETLK64: | |
| 3895 | + ret = get_errno(fcntl(arg1, cmd, &fl)); | |
| 3884 | 3896 | if (ret == 0) { |
| 3885 | 3897 | #ifdef TARGET_ARM |
| 3886 | 3898 | if (((CPUARMState *)cpu_env)->eabi) { |
| ... | ... | @@ -3905,8 +3917,8 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
| 3905 | 3917 | } |
| 3906 | 3918 | break; |
| 3907 | 3919 | |
| 3908 | - case F_SETLK64: | |
| 3909 | - case F_SETLKW64: | |
| 3920 | + case TARGET_F_SETLK64: | |
| 3921 | + case TARGET_F_SETLKW64: | |
| 3910 | 3922 | #ifdef TARGET_ARM |
| 3911 | 3923 | if (((CPUARMState *)cpu_env)->eabi) { |
| 3912 | 3924 | lock_user_struct(target_efl, arg3, 1); |
| ... | ... | @@ -3927,10 +3939,10 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, |
| 3927 | 3939 | fl.l_pid = tswapl(target_fl->l_pid); |
| 3928 | 3940 | unlock_user_struct(target_fl, arg3, 0); |
| 3929 | 3941 | } |
| 3930 | - ret = get_errno(fcntl(arg1, arg2, &fl)); | |
| 3942 | + ret = get_errno(fcntl(arg1, cmd, &fl)); | |
| 3931 | 3943 | break; |
| 3932 | 3944 | default: |
| 3933 | - ret = get_errno(do_fcntl(arg1, arg2, arg3)); | |
| 3945 | + ret = get_errno(do_fcntl(arg1, cmd, arg3)); | |
| 3934 | 3946 | break; |
| 3935 | 3947 | } |
| 3936 | 3948 | break; | ... | ... |