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,15 +3872,27 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
| 3872 | #if TARGET_LONG_BITS == 32 | 3872 | #if TARGET_LONG_BITS == 32 |
| 3873 | case TARGET_NR_fcntl64: | 3873 | case TARGET_NR_fcntl64: |
| 3874 | { | 3874 | { |
| 3875 | + int cmd; | ||
| 3875 | struct flock64 fl; | 3876 | struct flock64 fl; |
| 3876 | struct target_flock64 *target_fl; | 3877 | struct target_flock64 *target_fl; |
| 3877 | #ifdef TARGET_ARM | 3878 | #ifdef TARGET_ARM |
| 3878 | struct target_eabi_flock64 *target_efl; | 3879 | struct target_eabi_flock64 *target_efl; |
| 3879 | #endif | 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 | switch(arg2) { | 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 | if (ret == 0) { | 3896 | if (ret == 0) { |
| 3885 | #ifdef TARGET_ARM | 3897 | #ifdef TARGET_ARM |
| 3886 | if (((CPUARMState *)cpu_env)->eabi) { | 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,8 +3917,8 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
| 3905 | } | 3917 | } |
| 3906 | break; | 3918 | break; |
| 3907 | 3919 | ||
| 3908 | - case F_SETLK64: | ||
| 3909 | - case F_SETLKW64: | 3920 | + case TARGET_F_SETLK64: |
| 3921 | + case TARGET_F_SETLKW64: | ||
| 3910 | #ifdef TARGET_ARM | 3922 | #ifdef TARGET_ARM |
| 3911 | if (((CPUARMState *)cpu_env)->eabi) { | 3923 | if (((CPUARMState *)cpu_env)->eabi) { |
| 3912 | lock_user_struct(target_efl, arg3, 1); | 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,10 +3939,10 @@ long do_syscall(void *cpu_env, int num, long arg1, long arg2, long arg3, | ||
| 3927 | fl.l_pid = tswapl(target_fl->l_pid); | 3939 | fl.l_pid = tswapl(target_fl->l_pid); |
| 3928 | unlock_user_struct(target_fl, arg3, 0); | 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 | break; | 3943 | break; |
| 3932 | default: | 3944 | default: |
| 3933 | - ret = get_errno(do_fcntl(arg1, arg2, arg3)); | 3945 | + ret = get_errno(do_fcntl(arg1, cmd, arg3)); |
| 3934 | break; | 3946 | break; |
| 3935 | } | 3947 | } |
| 3936 | break; | 3948 | break; |