qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH 14/29] vnc: introduce a single label for error r


From: Markus Armbruster
Subject: Re: [Qemu-devel] [PATCH 14/29] vnc: introduce a single label for error returns
Date: Mon, 22 Oct 2012 17:49:47 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.1 (gnu/linux)

Paolo Bonzini <address@hidden> writes:

> Signed-off-by: Paolo Bonzini <address@hidden>
> ---
>  ui/vnc.c | 42 +++++++++++++++++-------------------------
>  1 file modificato, 17 inserzioni(+), 25 rimozioni(-)
>
> diff --git a/ui/vnc.c b/ui/vnc.c
> index 2892fb7..6da265f 100644
> --- a/ui/vnc.c
> +++ b/ui/vnc.c
> @@ -2872,8 +2872,7 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)
>      if (strcmp(display, "none") == 0)
>          return 0;
>  
> -    if (!(vs->display = strdup(display)))
> -        return -1;
> +    vs->display = g_strdup(display);
>      vs->share_policy = VNC_SHARE_POLICY_ALLOW_EXCLUSIVE;
>  
>      options = display;
> @@ -2885,9 +2884,7 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)
>                          "VNC password auth disabled due to FIPS mode, "
>                          "consider using the VeNCrypt or SASL authentication "
>                          "methods as an alternative\n");
> -                g_free(vs->display);
> -                vs->display = NULL;
> -                return -1;
> +                goto fail;
>              }
>              password = 1; /* Require password auth */
>          } else if (strncmp(options, "reverse", 7) == 0) {
> @@ -2919,16 +2916,12 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)
>                  if (vnc_tls_set_x509_creds_dir(vs, path) < 0) {
>                      fprintf(stderr, "Failed to find x509 certificates/keys 
> in %s\n", path);
>                      g_free(path);
> -                    g_free(vs->display);
> -                    vs->display = NULL;
> -                    return -1;
> +                    goto fail;
>                  }
>                  g_free(path);
>              } else {
>                  fprintf(stderr, "No certificate path provided\n");
> -                g_free(vs->display);
> -                vs->display = NULL;
> -                return -1;
> +                goto fail;
>              }
>  #endif
>  #if defined(CONFIG_VNC_TLS) || defined(CONFIG_VNC_SASL)
> @@ -2948,9 +2941,7 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)
>                  vs->share_policy = VNC_SHARE_POLICY_FORCE_SHARED;
>              } else {
>                  fprintf(stderr, "unknown vnc share= option\n");
> -                g_free(vs->display);
> -                vs->display = NULL;
> -                return -1;
> +                goto fail;
>              }
>          }
>      }
> @@ -3053,9 +3044,7 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)
>      if ((saslErr = sasl_server_init(NULL, "qemu")) != SASL_OK) {
>          fprintf(stderr, "Failed to initialize SASL auth %s",
>                  sasl_errstring(saslErr, NULL, NULL));
> -        g_free(vs->display);
> -        vs->display = NULL;
> -        return -1;
> +        goto fail;
>      }
>  #endif
>      vs->lock_key_sync = lock_key_sync;
> @@ -3067,9 +3056,7 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)
>          else
>              vs->lsock = inet_connect(display, NULL);
>          if (vs->lsock < 0) {
> -            g_free(vs->display);
> -            vs->display = NULL;
> -            return -1;
> +            goto fail;
>          } else {
>              int csock = vs->lsock;
>              vs->lsock = -1;
> @@ -3090,13 +3077,18 @@ int vnc_display_open(DisplayState *ds, const char 
> *display)

Note: I'm reordering the quoted diff lines slightly for clarity.

>          }
>          if (vs->lsock < 0) {
>              g_free(dpy);
> -            return -1;
> +            goto fail;

Now additionally executes

       g_free(vs->display);
       vs->display = NULL;

Silent bug fix?

> -        } else {
> -            g_free(vs->display);
> -            vs->display = dpy;
>          }
> +        g_free(vs->display);
> +        vs->display = dpy;
> +        qemu_set_fd_handler2(vs->lsock, NULL, vnc_listen_read, NULL, vs);
>      }
> -    return qemu_set_fd_handler2(vs->lsock, NULL, vnc_listen_read, NULL, vs);
> +    return 0;
> +
> +fail:
> +    g_free(vs->display);
> +    vs->display = NULL;
> +    return -1;
>  }
>  
>  void vnc_display_add_client(DisplayState *ds, int csock, int skipauth)



reply via email to

[Prev in Thread] Current Thread [Next in Thread]