Commit b1e341ebb7fc177434e2fda728174fc0e962578e

Authored by ths
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;
... ...