[Spice-devel] [spice-gtk] Make sure default SpiceSession::shared-dir is not NULL

Marc-André Lureau mlureau at redhat.com
Fri Jan 23 06:45:49 PST 2015


Hi

----- Original Message -----
> Calling spice_session_set_shared_dir() with a NULL argument will trigger
> a runtime warning. g_get_user_special_dir(G_USER_DIRECTORY_PUBLIC_SHARE)
> will return NULL if (for example) ~/.config/user-dirs.dirs is missing,
> and this is the default value for the "shared-dir" property which is set
> upon SpiceSession construction. This means we could end up calling
> spice_session_set_shared_dir() with a NULL parameter when instantiating
> a SpiceSession instance.

I would say it is a fine warning. I am not sure we want to hardcode the Public path here.


> ---
>  gtk/spice-session.c | 17 ++++++++++++++++-
>  1 file changed, 16 insertions(+), 1 deletion(-)
> 
> diff --git a/gtk/spice-session.c b/gtk/spice-session.c
> index 169294d..86891ee 100644
> --- a/gtk/spice-session.c
> +++ b/gtk/spice-session.c
> @@ -287,6 +287,18 @@ session_disconnect(SpiceSession *self, gboolean
> keep_main)
>      spice_session_abort_migration(self);
>  }
>  
> +static char *
> +spice_session_get_default_share_dir(void)
> +{
> +    const char *xdg_shared_dir;
> +    xdg_shared_dir = g_get_user_special_dir(G_USER_DIRECTORY_PUBLIC_SHARE);
> +    if (xdg_shared_dir != NULL) {
> +        return g_strdup(xdg_shared_dir);
> +    }
> +
> +    return g_build_filename(g_get_home_dir(), "Public", NULL);
> +}
> +
>  static void
>  spice_session_dispose(GObject *gobject)
>  {
> @@ -754,6 +766,7 @@ static void spice_session_set_property(GObject
> *gobject,
>  static void spice_session_class_init(SpiceSessionClass *klass)
>  {
>      GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
> +    char *default_share_dir;
>  
>      _wocky_http_proxy_get_type();
>      _wocky_https_proxy_get_type();
> @@ -1310,15 +1323,17 @@ static void
> spice_session_class_init(SpiceSessionClass *klass)
>       *
>       * Since: 0.24
>       **/
> +    default_share_dir = spice_session_get_default_share_dir();
>      g_object_class_install_property
>          (gobject_class, PROP_SHARED_DIR,
>           g_param_spec_string("shared-dir",
>                               "Shared directory",
>                               "Shared directory",
> -
> g_get_user_special_dir(G_USER_DIRECTORY_PUBLIC_SHARE),
> +                             default_share_dir,
>                               G_PARAM_READWRITE |
>                               G_PARAM_CONSTRUCT |
>                               G_PARAM_STATIC_STRINGS));
> +    g_free(default_share_dir);
>  
>      g_type_class_add_private(klass, sizeof(SpiceSessionPrivate));
>  }
> --
> 2.1.0
> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/spice-devel
> 


More information about the Spice-devel mailing list