move get_errno() inside do_fcntl()

git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3591 c046a42c-6fe2-441c-8c8c-71466251a162
This commit is contained in:
bellard 2007-11-11 15:11:19 +00:00
parent 03acab6618
commit 9ee1fa2ca9
1 changed files with 25 additions and 35 deletions

View File

@ -2478,7 +2478,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
fl.l_len = tswapl(target_fl->l_len); fl.l_len = tswapl(target_fl->l_len);
fl.l_pid = tswapl(target_fl->l_pid); fl.l_pid = tswapl(target_fl->l_pid);
unlock_user_struct(target_fl, arg, 0); unlock_user_struct(target_fl, arg, 0);
ret = fcntl(fd, cmd, &fl); ret = get_errno(fcntl(fd, cmd, &fl));
if (ret == 0) { if (ret == 0) {
if (!lock_user_struct(VERIFY_WRITE, target_fl, arg, 0)) if (!lock_user_struct(VERIFY_WRITE, target_fl, arg, 0))
return -TARGET_EFAULT; return -TARGET_EFAULT;
@ -2501,7 +2501,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
fl.l_len = tswapl(target_fl->l_len); fl.l_len = tswapl(target_fl->l_len);
fl.l_pid = tswapl(target_fl->l_pid); fl.l_pid = tswapl(target_fl->l_pid);
unlock_user_struct(target_fl, arg, 0); unlock_user_struct(target_fl, arg, 0);
ret = fcntl(fd, cmd, &fl); ret = get_errno(fcntl(fd, cmd, &fl));
break; break;
case TARGET_F_GETLK64: case TARGET_F_GETLK64:
@ -2513,7 +2513,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
fl64.l_len = tswapl(target_fl64->l_len); fl64.l_len = tswapl(target_fl64->l_len);
fl64.l_pid = tswap16(target_fl64->l_pid); fl64.l_pid = tswap16(target_fl64->l_pid);
unlock_user_struct(target_fl64, arg, 0); unlock_user_struct(target_fl64, arg, 0);
ret = fcntl(fd, cmd >> 1, &fl64); ret = get_errno(fcntl(fd, cmd >> 1, &fl64));
if (ret == 0) { if (ret == 0) {
if (!lock_user_struct(VERIFY_WRITE, target_fl64, arg, 0)) if (!lock_user_struct(VERIFY_WRITE, target_fl64, arg, 0))
return -TARGET_EFAULT; return -TARGET_EFAULT;
@ -2524,7 +2524,7 @@ static abi_long do_fcntl(int fd, int cmd, abi_ulong arg)
target_fl64->l_pid = tswapl(fl64.l_pid); target_fl64->l_pid = tswapl(fl64.l_pid);
unlock_user_struct(target_fl64, arg, 1); unlock_user_struct(target_fl64, arg, 1);
} }
break; break;
case TARGET_F_SETLK64: case TARGET_F_SETLK64:
case TARGET_F_SETLKW64: case TARGET_F_SETLKW64:
if (!lock_user_struct(VERIFY_READ, target_fl64, arg, 1)) 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)
fl64.l_len = tswapl(target_fl64->l_len); fl64.l_len = tswapl(target_fl64->l_len);
fl64.l_pid = tswap16(target_fl64->l_pid); fl64.l_pid = tswap16(target_fl64->l_pid);
unlock_user_struct(target_fl64, arg, 0); unlock_user_struct(target_fl64, arg, 0);
ret = fcntl(fd, cmd >> 1, &fl64); ret = get_errno(fcntl(fd, cmd >> 1, &fl64));
break; break;
case F_GETFL: case F_GETFL:
ret = fcntl(fd, cmd, arg); ret = get_errno(fcntl(fd, cmd, arg));
ret = host_to_target_bitmask(ret, fcntl_flags_tbl); if (ret >= 0) {
ret = host_to_target_bitmask(ret, fcntl_flags_tbl);
}
break; break;
case F_SETFL: case F_SETFL:
ret = fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl)); ret = get_errno(fcntl(fd, cmd, target_to_host_bitmask(arg, fcntl_flags_tbl)));
break; break;
default: default:
ret = fcntl(fd, cmd, arg); ret = get_errno(fcntl(fd, cmd, arg));
break; break;
} }
return ret; return ret;
@ -3209,7 +3211,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
ret = do_ioctl(arg1, arg2, arg3); ret = do_ioctl(arg1, arg2, arg3);
break; break;
case TARGET_NR_fcntl: case TARGET_NR_fcntl:
ret = get_errno(do_fcntl(arg1, arg2, arg3)); ret = do_fcntl(arg1, arg2, arg3);
break; break;
#ifdef TARGET_NR_mpx #ifdef TARGET_NR_mpx
case TARGET_NR_mpx: case TARGET_NR_mpx:
@ -4988,10 +4990,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
case TARGET_F_GETLK64: case TARGET_F_GETLK64:
#ifdef TARGET_ARM #ifdef TARGET_ARM
if (((CPUARMState *)cpu_env)->eabi) { if (((CPUARMState *)cpu_env)->eabi) {
if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) { if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1))
ret = -TARGET_EFAULT; goto efault;
goto fail;
}
fl.l_type = tswap16(target_efl->l_type); fl.l_type = tswap16(target_efl->l_type);
fl.l_whence = tswap16(target_efl->l_whence); fl.l_whence = tswap16(target_efl->l_whence);
fl.l_start = tswap64(target_efl->l_start); fl.l_start = tswap64(target_efl->l_start);
@ -5001,10 +5001,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
} else } else
#endif #endif
{ {
if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) { if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1))
ret = -TARGET_EFAULT; goto efault;
goto fail;
}
fl.l_type = tswap16(target_fl->l_type); fl.l_type = tswap16(target_fl->l_type);
fl.l_whence = tswap16(target_fl->l_whence); fl.l_whence = tswap16(target_fl->l_whence);
fl.l_start = tswap64(target_fl->l_start); fl.l_start = tswap64(target_fl->l_start);
@ -5016,10 +5014,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
if (ret == 0) { if (ret == 0) {
#ifdef TARGET_ARM #ifdef TARGET_ARM
if (((CPUARMState *)cpu_env)->eabi) { if (((CPUARMState *)cpu_env)->eabi) {
if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0)) { if (!lock_user_struct(VERIFY_WRITE, target_efl, arg3, 0))
ret = -TARGET_EFAULT; goto efault;
goto fail;
}
target_efl->l_type = tswap16(fl.l_type); target_efl->l_type = tswap16(fl.l_type);
target_efl->l_whence = tswap16(fl.l_whence); target_efl->l_whence = tswap16(fl.l_whence);
target_efl->l_start = tswap64(fl.l_start); target_efl->l_start = tswap64(fl.l_start);
@ -5029,10 +5025,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
} else } else
#endif #endif
{ {
if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0)) { if (!lock_user_struct(VERIFY_WRITE, target_fl, arg3, 0))
ret = -TARGET_EFAULT; goto efault;
goto fail;
}
target_fl->l_type = tswap16(fl.l_type); target_fl->l_type = tswap16(fl.l_type);
target_fl->l_whence = tswap16(fl.l_whence); target_fl->l_whence = tswap16(fl.l_whence);
target_fl->l_start = tswap64(fl.l_start); target_fl->l_start = tswap64(fl.l_start);
@ -5047,10 +5041,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
case TARGET_F_SETLKW64: case TARGET_F_SETLKW64:
#ifdef TARGET_ARM #ifdef TARGET_ARM
if (((CPUARMState *)cpu_env)->eabi) { if (((CPUARMState *)cpu_env)->eabi) {
if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1)) { if (!lock_user_struct(VERIFY_READ, target_efl, arg3, 1))
ret = -TARGET_EFAULT; goto efault;
goto fail;
}
fl.l_type = tswap16(target_efl->l_type); fl.l_type = tswap16(target_efl->l_type);
fl.l_whence = tswap16(target_efl->l_whence); fl.l_whence = tswap16(target_efl->l_whence);
fl.l_start = tswap64(target_efl->l_start); fl.l_start = tswap64(target_efl->l_start);
@ -5060,10 +5052,8 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
} else } else
#endif #endif
{ {
if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1)) { if (!lock_user_struct(VERIFY_READ, target_fl, arg3, 1))
ret = -TARGET_EFAULT; goto efault;
goto fail;
}
fl.l_type = tswap16(target_fl->l_type); fl.l_type = tswap16(target_fl->l_type);
fl.l_whence = tswap16(target_fl->l_whence); fl.l_whence = tswap16(target_fl->l_whence);
fl.l_start = tswap64(target_fl->l_start); fl.l_start = tswap64(target_fl->l_start);
@ -5074,7 +5064,7 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
ret = get_errno(fcntl(arg1, cmd, &fl)); ret = get_errno(fcntl(arg1, cmd, &fl));
break; break;
default: default:
ret = get_errno(do_fcntl(arg1, cmd, arg3)); ret = do_fcntl(arg1, cmd, arg3);
break; break;
} }
break; break;