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,7 +2478,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2478 fl.l_len = tswapl(target_fl->l_len); 2478 fl.l_len = tswapl(target_fl->l_len);
2479 fl.l_pid = tswapl(target_fl->l_pid); 2479 fl.l_pid = tswapl(target_fl->l_pid);
2480 unlock_user_struct(target_fl, arg, 0); 2480 unlock_user_struct(target_fl, arg, 0);
2481 - ret = fcntl(fd, cmd, &fl); 2481 + ret = get_errno(fcntl(fd, cmd, &fl));
2482 if (ret == 0) { 2482 if (ret == 0) {
2483 if (!lock_user_struct(VERIFY_WRITE, target_fl, arg, 0)) 2483 if (!lock_user_struct(VERIFY_WRITE, target_fl, arg, 0))
2484 return -TARGET_EFAULT; 2484 return -TARGET_EFAULT;
@@ -2501,7 +2501,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg) @@ -2501,7 +2501,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2501 fl.l_len = tswapl(target_fl->l_len); 2501 fl.l_len = tswapl(target_fl->l_len);
2502 fl.l_pid = tswapl(target_fl->l_pid); 2502 fl.l_pid = tswapl(target_fl->l_pid);
2503 unlock_user_struct(target_fl, arg, 0); 2503 unlock_user_struct(target_fl, arg, 0);
2504 - ret = fcntl(fd, cmd, &fl); 2504 + ret = get_errno(fcntl(fd, cmd, &fl));
2505 break; 2505 break;
2506 2506
2507 case TARGET_F_GETLK64: 2507 case TARGET_F_GETLK64:
@@ -2513,7 +2513,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg) @@ -2513,7 +2513,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2513 fl64.l_len = tswapl(target_fl64->l_len); 2513 fl64.l_len = tswapl(target_fl64->l_len);
2514 fl64.l_pid = tswap16(target_fl64->l_pid); 2514 fl64.l_pid = tswap16(target_fl64->l_pid);
2515 unlock_user_struct(target_fl64, arg, 0); 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 if (ret == 0) { 2517 if (ret == 0) {
2518 if (!lock_user_struct(VERIFY_WRITE, target_fl64, arg, 0)) 2518 if (!lock_user_struct(VERIFY_WRITE, target_fl64, arg, 0))
2519 return -TARGET_EFAULT; 2519 return -TARGET_EFAULT;
@@ -2524,7 +2524,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg) @@ -2524,7 +2524,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2524 target_fl64->l_pid = tswapl(fl64.l_pid); 2524 target_fl64->l_pid = tswapl(fl64.l_pid);
2525 unlock_user_struct(target_fl64, arg, 1); 2525 unlock_user_struct(target_fl64, arg, 1);
2526 } 2526 }
2527 - break; 2527 + break;
2528 case TARGET_F_SETLK64: 2528 case TARGET_F_SETLK64:
2529 case TARGET_F_SETLKW64: 2529 case TARGET_F_SETLKW64:
2530 if (!lock_user_struct(VERIFY_READ, target_fl64, arg, 1)) 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,20 +2535,22 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
2535 fl64.l_len = tswapl(target_fl64->l_len); 2535 fl64.l_len = tswapl(target_fl64->l_len);
2536 fl64.l_pid = tswap16(target_fl64->l_pid); 2536 fl64.l_pid = tswap16(target_fl64->l_pid);
2537 unlock_user_struct(target_fl64, arg, 0); 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 break; 2539 break;
2540 2540
2541 case F_GETFL: 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 break; 2546 break;
2545 2547
2546 case F_SETFL: 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 break; 2550 break;
2549 2551
2550 default: 2552 default:
2551 - ret = fcntl(fd, cmd, arg); 2553 + ret = get_errno(fcntl(fd, cmd, arg));
2552 break; 2554 break;
2553 } 2555 }
2554 return ret; 2556 return ret;
@@ -3209,7 +3211,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, @@ -3209,7 +3211,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
3209 ret = do_ioctl(arg1, arg2, arg3); 3211 ret = do_ioctl(arg1, arg2, arg3);
3210 break; 3212 break;
3211 case TARGET_NR_fcntl: 3213 case TARGET_NR_fcntl:
3212 - ret = get_errno(do_fcntl(arg1, arg2, arg3)); 3214 + ret = do_fcntl(arg1, arg2, arg3);
3213 break; 3215 break;
3214 #ifdef TARGET_NR_mpx 3216 #ifdef TARGET_NR_mpx
3215 case TARGET_NR_mpx: 3217 case TARGET_NR_mpx:
@@ -4988,10 +4990,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1, @@ -4988,10 +4990,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
4988 case TARGET_F_GETLK64: 4990 case TARGET_F_GETLK64:
4989 #ifdef TARGET_ARM 4991 #ifdef TARGET_ARM
4990 if (((CPUARMState *)cpu_env)->eabi) { 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 fl.l_type = tswap16(target_efl->l_type); 4995 fl.l_type = tswap16(target_efl->l_type);
4996 fl.l_whence = tswap16(target_efl->l_whence); 4996 fl.l_whence = tswap16(target_efl->l_whence);
4997 fl.l_start = tswap64(target_efl->l_start); 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,10 +5001,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5001 } else 5001 } else
5002 #endif 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 fl.l_type = tswap16(target_fl->l_type); 5006 fl.l_type = tswap16(target_fl->l_type);
5009 fl.l_whence = tswap16(target_fl->l_whence); 5007 fl.l_whence = tswap16(target_fl->l_whence);
5010 fl.l_start = tswap64(target_fl->l_start); 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,10 +5014,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5016 if (ret == 0) { 5014 if (ret == 0) {
5017 #ifdef TARGET_ARM 5015 #ifdef TARGET_ARM
5018 if (((CPUARMState *)cpu_env)->eabi) { 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 target_efl->l_type = tswap16(fl.l_type); 5019 target_efl->l_type = tswap16(fl.l_type);
5024 target_efl->l_whence = tswap16(fl.l_whence); 5020 target_efl->l_whence = tswap16(fl.l_whence);
5025 target_efl->l_start = tswap64(fl.l_start); 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,10 +5025,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5029 } else 5025 } else
5030 #endif 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 target_fl->l_type = tswap16(fl.l_type); 5030 target_fl->l_type = tswap16(fl.l_type);
5037 target_fl->l_whence = tswap16(fl.l_whence); 5031 target_fl->l_whence = tswap16(fl.l_whence);
5038 target_fl->l_start = tswap64(fl.l_start); 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,10 +5041,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5047 case TARGET_F_SETLKW64: 5041 case TARGET_F_SETLKW64:
5048 #ifdef TARGET_ARM 5042 #ifdef TARGET_ARM
5049 if (((CPUARMState *)cpu_env)->eabi) { 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 fl.l_type = tswap16(target_efl->l_type); 5046 fl.l_type = tswap16(target_efl->l_type);
5055 fl.l_whence = tswap16(target_efl->l_whence); 5047 fl.l_whence = tswap16(target_efl->l_whence);
5056 fl.l_start = tswap64(target_efl->l_start); 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,10 +5052,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5060 } else 5052 } else
5061 #endif 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 fl.l_type = tswap16(target_fl->l_type); 5057 fl.l_type = tswap16(target_fl->l_type);
5068 fl.l_whence = tswap16(target_fl->l_whence); 5058 fl.l_whence = tswap16(target_fl->l_whence);
5069 fl.l_start = tswap64(target_fl->l_start); 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,7 +5064,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
5074 ret = get_errno(fcntl(arg1, cmd, &fl)); 5064 ret = get_errno(fcntl(arg1, cmd, &fl));
5075 break; 5065 break;
5076 default: 5066 default:
5077 - ret = get_errno(do_fcntl(arg1, cmd, arg3)); 5067 + ret = do_fcntl(arg1, cmd, arg3);
5078 break; 5068 break;
5079 } 5069 }
5080 break; 5070 break;