diff mbox series

[v2,7/7] linux-user: Tidy TARGET_NR_rt_sigaction

Message ID 20210422230227.314751-8-richard.henderson@linaro.org
State Superseded
Headers show
Series linux-user: sigaction fixes/cleanups | expand

Commit Message

Richard Henderson April 22, 2021, 11:02 p.m. UTC
Initialize variables instead of elses.
Use an else instead of a goto.
Add braces.

Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

---
 linux-user/syscall.c | 32 +++++++++++++-------------------
 1 file changed, 13 insertions(+), 19 deletions(-)

-- 
2.25.1

Comments

Philippe Mathieu-Daudé April 23, 2021, 10:24 a.m. UTC | #1
On 4/23/21 1:02 AM, Richard Henderson wrote:
> Initialize variables instead of elses.

> Use an else instead of a goto.

> Add braces.

> 

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

> ---

>  linux-user/syscall.c | 32 +++++++++++++-------------------

>  1 file changed, 13 insertions(+), 19 deletions(-)


Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
Alex Bennée April 23, 2021, 3:10 p.m. UTC | #2
Richard Henderson <richard.henderson@linaro.org> writes:

> Initialize variables instead of elses.

> Use an else instead of a goto.

> Add braces.

>

> Signed-off-by: Richard Henderson <richard.henderson@linaro.org>

> ---

>  linux-user/syscall.c | 32 +++++++++++++-------------------

>  1 file changed, 13 insertions(+), 19 deletions(-)

>

> diff --git a/linux-user/syscall.c b/linux-user/syscall.c

> index 9bcd485423..c7c3257f40 100644

> --- a/linux-user/syscall.c

> +++ b/linux-user/syscall.c

> @@ -9060,32 +9060,26 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,

>              target_ulong sigsetsize = arg4;

>              target_ulong restorer = 0;

>  #endif

> -            struct target_sigaction *act;

> -            struct target_sigaction *oact;

> +            struct target_sigaction *act = NULL;

> +            struct target_sigaction *oact = NULL;

>  

>              if (sigsetsize != sizeof(target_sigset_t)) {

>                  return -TARGET_EINVAL;

>              }

> -            if (arg2) {

> -                if (!lock_user_struct(VERIFY_READ, act, arg2, 1)) {

> -                    return -TARGET_EFAULT;

> -                }

> -            } else {

> -                act = NULL;

> +            if (arg2 && !lock_user_struct(VERIFY_READ, act, arg2, 1)) {

> +                return -TARGET_EFAULT;

>              }

> -            if (arg3) {

> -                if (!lock_user_struct(VERIFY_WRITE, oact, arg3, 0)) {

> -                    ret = -TARGET_EFAULT;

> -                    goto rt_sigaction_fail;

> +            if (arg3 && !lock_user_struct(VERIFY_WRITE, oact, arg3, 0)) {

> +                ret = -TARGET_EFAULT;

> +            } else {

> +                ret = get_errno(do_sigaction(arg1, act, oact, restorer));

> +                if (oact) {

> +                    unlock_user_struct(oact, arg3, 1);

>                  }


This does make me idly wonder if there is a way to handle unlocking in a
similar way to our autofree and LOCK_GUARD stuff. But that's not getting
in the way of approving of this improvement.

Reviewed-by: Alex Bennée <alex.bennee@linaro.org>


-- 
Alex Bennée
diff mbox series

Patch

diff --git a/linux-user/syscall.c b/linux-user/syscall.c
index 9bcd485423..c7c3257f40 100644
--- a/linux-user/syscall.c
+++ b/linux-user/syscall.c
@@ -9060,32 +9060,26 @@  static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
             target_ulong sigsetsize = arg4;
             target_ulong restorer = 0;
 #endif
-            struct target_sigaction *act;
-            struct target_sigaction *oact;
+            struct target_sigaction *act = NULL;
+            struct target_sigaction *oact = NULL;
 
             if (sigsetsize != sizeof(target_sigset_t)) {
                 return -TARGET_EINVAL;
             }
-            if (arg2) {
-                if (!lock_user_struct(VERIFY_READ, act, arg2, 1)) {
-                    return -TARGET_EFAULT;
-                }
-            } else {
-                act = NULL;
+            if (arg2 && !lock_user_struct(VERIFY_READ, act, arg2, 1)) {
+                return -TARGET_EFAULT;
             }
-            if (arg3) {
-                if (!lock_user_struct(VERIFY_WRITE, oact, arg3, 0)) {
-                    ret = -TARGET_EFAULT;
-                    goto rt_sigaction_fail;
+            if (arg3 && !lock_user_struct(VERIFY_WRITE, oact, arg3, 0)) {
+                ret = -TARGET_EFAULT;
+            } else {
+                ret = get_errno(do_sigaction(arg1, act, oact, restorer));
+                if (oact) {
+                    unlock_user_struct(oact, arg3, 1);
                 }
-            } else
-                oact = NULL;
-            ret = get_errno(do_sigaction(arg1, act, oact, restorer));
-	rt_sigaction_fail:
-            if (act)
+            }
+            if (act) {
                 unlock_user_struct(act, arg2, 0);
-            if (oact)
-                unlock_user_struct(oact, arg3, 1);
+            }
         }
         return ret;
 #ifdef TARGET_NR_sgetmask /* not on alpha */