1
0
mirror of https://gitlab.gnome.org/GNOME/glib.git synced 2025-03-11 10:23:36 +01:00

Retrieve cwd and environ in local GApplicationCommandLine

https://bugzilla.gnome.org/show_bug.cgi?id=669689
This commit is contained in:
Jesse van den Kieboom 2012-02-08 17:13:34 +01:00
parent 90dbaca924
commit 1370804f2b

@ -139,9 +139,9 @@ struct _GApplicationCommandLinePrivate
{ {
GVariant *platform_data; GVariant *platform_data;
GVariant *arguments; GVariant *arguments;
GVariant *cwd; gchar *cwd;
const gchar **environ; gchar **environ;
gint exit_status; gint exit_status;
}; };
@ -162,14 +162,14 @@ grok_platform_data (GApplicationCommandLine *cmdline)
if (strcmp (key, "cwd") == 0) if (strcmp (key, "cwd") == 0)
{ {
if (!cmdline->priv->cwd) if (!cmdline->priv->cwd)
cmdline->priv->cwd = g_variant_ref (value); cmdline->priv->cwd = g_variant_dup_bytestring (value, NULL);
} }
else if (strcmp (key, "environ") == 0) else if (strcmp (key, "environ") == 0)
{ {
if (!cmdline->priv->environ) if (!cmdline->priv->environ)
cmdline->priv->environ = cmdline->priv->environ =
g_variant_get_bytestring_array (value, NULL); g_variant_dup_bytestring_array (value, NULL);
} }
} }
@ -250,8 +250,9 @@ g_application_command_line_finalize (GObject *object)
g_variant_unref (cmdline->priv->platform_data); g_variant_unref (cmdline->priv->platform_data);
if (cmdline->priv->arguments) if (cmdline->priv->arguments)
g_variant_unref (cmdline->priv->arguments); g_variant_unref (cmdline->priv->arguments);
if (cmdline->priv->cwd)
g_variant_unref (cmdline->priv->cwd); g_free (cmdline->priv->cwd);
g_strfreev (cmdline->priv->environ);
G_OBJECT_CLASS (g_application_command_line_parent_class) G_OBJECT_CLASS (g_application_command_line_parent_class)
->finalize (object); ->finalize (object);
@ -266,6 +267,22 @@ g_application_command_line_init (GApplicationCommandLine *cmdline)
GApplicationCommandLinePrivate); GApplicationCommandLinePrivate);
} }
static void
g_application_command_line_constructed (GObject *object)
{
GApplicationCommandLine *cmdline = G_APPLICATION_COMMAND_LINE (object);
if (IS_REMOTE (cmdline))
return;
/* In the local case, set cmd and environ */
if (!cmdline->priv->cwd)
cmdline->priv->cwd = g_get_current_dir ();
if (!cmdline->priv->environ)
cmdline->priv->environ = g_get_environ ();
}
static void static void
g_application_command_line_class_init (GApplicationCommandLineClass *class) g_application_command_line_class_init (GApplicationCommandLineClass *class)
{ {
@ -274,6 +291,8 @@ g_application_command_line_class_init (GApplicationCommandLineClass *class)
object_class->get_property = g_application_command_line_get_property; object_class->get_property = g_application_command_line_get_property;
object_class->set_property = g_application_command_line_set_property; object_class->set_property = g_application_command_line_set_property;
object_class->finalize = g_application_command_line_finalize; object_class->finalize = g_application_command_line_finalize;
object_class->constructed = g_application_command_line_constructed;
class->printerr_literal = g_application_command_line_real_printerr_literal; class->printerr_literal = g_application_command_line_real_printerr_literal;
class->print_literal = g_application_command_line_real_print_literal; class->print_literal = g_application_command_line_real_print_literal;
@ -358,10 +377,7 @@ g_application_command_line_get_arguments (GApplicationCommandLine *cmdline,
const gchar * const gchar *
g_application_command_line_get_cwd (GApplicationCommandLine *cmdline) g_application_command_line_get_cwd (GApplicationCommandLine *cmdline)
{ {
if (cmdline->priv->cwd) return cmdline->priv->cwd;
return g_variant_get_bytestring (cmdline->priv->cwd);
else
return NULL;
} }
/** /**
@ -392,7 +408,7 @@ g_application_command_line_get_cwd (GApplicationCommandLine *cmdline)
const gchar * const * const gchar * const *
g_application_command_line_get_environ (GApplicationCommandLine *cmdline) g_application_command_line_get_environ (GApplicationCommandLine *cmdline)
{ {
return cmdline->priv->environ; return (const gchar **)cmdline->priv->environ;
} }
/** /**