Commit 9ee1fa2ca9d925e53f5609b35fe29d719abae980

Authored by bellard
1 parent 03acab66

move get_errno() inside do_fcntl()


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3591 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 25 additions and 35 deletions
linux-user/syscall.c
... ... @@ -2478,7 +2478,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2478 2478 fl.l_len = tswapl(target_fl->l_len);
2479 2479 fl.l_pid = tswapl(target_fl->l_pid);
2480 2480 unlock_user_struct(target_fl, arg, 0);
2481   - ret = fcntl(fd, cmd, &fl);
  2481 + ret = get_errno(fcntl(fd, cmd, &fl));
2482 2482 if (ret == 0) {
2483 2483 if (!lock_user_struct(VERIFY_WRITE, target_fl, arg, 0))
2484 2484 return -TARGET_EFAULT;
... ... @@ -2501,7 +2501,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2501 2501 fl.l_len = tswapl(target_fl->l_len);
2502 2502 fl.l_pid = tswapl(target_fl->l_pid);
2503 2503 unlock_user_struct(target_fl, arg, 0);
2504   - ret = fcntl(fd, cmd, &fl);
  2504 + ret = get_errno(fcntl(fd, cmd, &fl));
2505 2505 break;
2506 2506  
2507 2507 case TARGET_F_GETLK64:
... ... @@ -2513,7 +2513,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2513 2513 fl64.l_len = tswapl(target_fl64->l_len);
2514 2514 fl64.l_pid = tswap16(target_fl64->l_pid);
2515 2515 unlock_user_struct(target_fl64, arg, 0);
2516   - ret = fcntl(fd, cmd >> 1, &fl64);
  2516 + ret = get_errno(fcntl(fd, cmd >> 1, &fl64));
2517 2517 if (ret == 0) {
2518 2518 if (!lock_user_struct(VERIFY_WRITE, target_fl64, arg, 0))
2519 2519 return -TARGET_EFAULT;
... ... @@ -2524,7 +2524,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2524 2524 target_fl64->l_pid = tswapl(fl64.l_pid);
2525 2525 unlock_user_struct(target_fl64, arg, 1);
2526 2526 }
2527   - break;
  2527 + break;
2528 2528 case TARGET_F_SETLK64:
2529 2529 case TARGET_F_SETLKW64:
2530 2530 if (!lock_user_struct(VERIFY_READ, target_fl64, arg, 1))
... ... @@ -2535,20 +2535,22 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2535 2535 fl64.l_len = tswapl(target_fl64->l_len);
2536 2536 fl64.l_pid = tswap16(target_fl64->l_pid);
2537 2537 unlock_user_struct(target_fl64, arg, 0);
2538   - ret = fcntl(fd, cmd >> 1, &fl64);
  2538 + ret = get_errno(fcntl(fd, cmd >> 1, &fl64));
2539 2539 break;
2540 2540  
2541 2541 case F_GETFL:
2542   - ret = fcntl(fd, cmd, arg);
2543   - ret = host_to_target_bitmask(ret, fcntl_flags_tbl);
  2542 + ret = get_errno(fcntl(fd, cmd, arg));
  2543 + if (ret >= 0) {
  2544 + ret = host_to_target_bitmask(ret, fcntl_flags_tbl);
  2545 + }
2544 2546 break;
2545 2547  
2546 2548 case F_SETFL:
2547   - ret = fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl));
  2549 + ret = get_errno(fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl)));
2548 2550 break;
2549 2551  
2550 2552 default:
2551   - ret = fcntl(fd, cmd, arg);
  2553 + ret = get_errno(fcntl(fd, cmd, arg));
2552 2554 break;
2553 2555 }
2554 2556 return ret;
... ... @@ -3209,7 +3211,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
3209 3211 ret = do_ioctl(arg1, arg2, arg3);
3210 3212 break;
3211 3213 case TARGET_NR_fcntl:
3212   - ret = get_errno(do_fcntl(arg1, arg2, arg3));
  3214 + ret = do_fcntl(arg1, arg2, arg3);
3213 3215 break;
3214 3216 #ifdef TARGET_NR_mpx
3215 3217 case TARGET_NR_mpx:
... ... @@ -4988,10 +4990,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
4988 4990 case TARGET_F_GETLK64:
4989 4991 #ifdef TARGET_ARM
4990 4992 if (((CPUARMState *)cpu_env)->eabi) {
4991   - if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) {
4992   - ret = -TARGET_EFAULT;
4993   - goto fail;
4994   - }
  4993 + if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1))
  4994 + goto efault;
4995 4995 fl.l_type = tswap16(target_efl->l_type);
4996 4996 fl.l_whence = tswap16(target_efl->l_whence);
4997 4997 fl.l_start = tswap64(target_efl->l_start);
... ... @@ -5001,10 +5001,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5001 5001 } else
5002 5002 #endif
5003 5003 {
5004   - if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) {
5005   - ret = -TARGET_EFAULT;
5006   - goto fail;
5007   - }
  5004 + if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1))
  5005 + goto efault;
5008 5006 fl.l_type = tswap16(target_fl->l_type);
5009 5007 fl.l_whence = tswap16(target_fl->l_whence);
5010 5008 fl.l_start = tswap64(target_fl->l_start);
... ... @@ -5016,10 +5014,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5016 5014 if (ret == 0) {
5017 5015 #ifdef TARGET_ARM
5018 5016 if (((CPUARMState *)cpu_env)->eabi) {
5019   - if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) {
5020   - ret = -TARGET_EFAULT;
5021   - goto fail;
5022   - }
  5017 + if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0))
  5018 + goto efault;
5023 5019 target_efl->l_type = tswap16(fl.l_type);
5024 5020 target_efl->l_whence = tswap16(fl.l_whence);
5025 5021 target_efl->l_start = tswap64(fl.l_start);
... ... @@ -5029,10 +5025,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5029 5025 } else
5030 5026 #endif
5031 5027 {
5032   - if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) {
5033   - ret = -TARGET_EFAULT;
5034   - goto fail;
5035   - }
  5028 + if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0))
  5029 + goto efault;
5036 5030 target_fl->l_type = tswap16(fl.l_type);
5037 5031 target_fl->l_whence = tswap16(fl.l_whence);
5038 5032 target_fl->l_start = tswap64(fl.l_start);
... ... @@ -5047,10 +5041,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5047 5041 case TARGET_F_SETLKW64:
5048 5042 #ifdef TARGET_ARM
5049 5043 if (((CPUARMState *)cpu_env)->eabi) {
5050   - if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) {
5051   - ret = -TARGET_EFAULT;
5052   - goto fail;
5053   - }
  5044 + if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1))
  5045 + goto efault;
5054 5046 fl.l_type = tswap16(target_efl->l_type);
5055 5047 fl.l_whence = tswap16(target_efl->l_whence);
5056 5048 fl.l_start = tswap64(target_efl->l_start);
... ... @@ -5060,10 +5052,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5060 5052 } else
5061 5053 #endif
5062 5054 {
5063   - if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) {
5064   - ret = -TARGET_EFAULT;
5065   - goto fail;
5066   - }
  5055 + if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1))
  5056 + goto efault;
5067 5057 fl.l_type = tswap16(target_fl->l_type);
5068 5058 fl.l_whence = tswap16(target_fl->l_whence);
5069 5059 fl.l_start = tswap64(target_fl->l_start);
... ... @@ -5074,7 +5064,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5074 5064 ret = get_errno(fcntl(arg1, cmd, &fl));
5075 5065 break;
5076 5066 default:
5077   - ret = get_errno(do_fcntl(arg1, cmd, arg3));
  5067 + ret = do_fcntl(arg1, cmd, arg3);
5078 5068 break;
5079 5069 }
5080 5070 break;
... ...