build: Use an strv for envp instead of a GPtrArray

tingping/wmclass
Alexander Larsson 2015-05-12 11:05:52 +02:00
parent 6006f8d753
commit 11ec2f6895
3 changed files with 19 additions and 17 deletions

View File

@ -69,7 +69,7 @@ xdg_app_builtin_build (int argc, char **argv, GCancellable *cancellable, GError
g_autoptr (GError) my_error = NULL;
g_autoptr (GError) my_error2 = NULL;
g_autoptr(GPtrArray) argv_array = NULL;
g_autoptr(GPtrArray) env_array = NULL;
glnx_strfreev char **envp = NULL;
gsize metadata_size;
const char *directory = NULL;
const char *command = "/bin/sh";
@ -161,11 +161,9 @@ xdg_app_builtin_build (int argc, char **argv, GCancellable *cancellable, GError
g_ptr_array_add (argv_array, NULL);
env_array = g_ptr_array_new_with_free_func (g_free);
xdg_app_run_setup_minimal_env (env_array, TRUE);
g_ptr_array_add (env_array, NULL);
envp = xdg_app_run_get_minimal_env (TRUE);
if (!execve (HELPER, (char **)argv_array->pdata, (char **)env_array->pdata))
if (!execve (HELPER, (char **)argv_array->pdata, envp))
{
g_set_error (error, G_IO_ERROR, g_io_error_from_errno (errno), "Unable to start app");
goto out;

View File

@ -305,10 +305,10 @@ xdg_app_run_add_environment_args (GPtrArray *argv_array,
}
}
void
xdg_app_run_setup_minimal_env (GPtrArray *env_array,
gboolean devel)
char **
xdg_app_run_get_minimal_env (gboolean devel)
{
GPtrArray *env_array;
static const char const *exports[] = {
"PATH=/self/bin:/usr/bin",
"_LD_LIBRARY_PATH=/self/lib",
@ -358,31 +358,36 @@ xdg_app_run_setup_minimal_env (GPtrArray *env_array,
};
int i;
env_array = g_ptr_array_new_with_free_func (g_free);
for (i = 0; i < G_N_ELEMENTS(exports); i++)
g_ptr_array_add (env_array, g_strdup (exports[i]));
if (devel)
{
for (i = 0; i < G_N_ELEMENTS(exports_devel); i++)
g_ptr_array_add (env_array, g_strdup (exports_devel[i]));
g_ptr_array_add (env_array, g_strdup (exports_devel[i]));
}
for (i = 0; i < G_N_ELEMENTS(copy); i++)
{
const char *current = g_getenv(copy[i]);
if (current)
g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", copy[i], current));
g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", copy[i], current));
}
if (!devel)
{
for (i = 0; i < G_N_ELEMENTS(copy_nodevel); i++)
{
const char *current = g_getenv(copy_nodevel[i]);
if (current)
g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", copy_nodevel[i], current));
}
{
const char *current = g_getenv(copy_nodevel[i]);
if (current)
g_ptr_array_add (env_array, g_strdup_printf ("%s=%s", copy_nodevel[i], current));
}
}
g_ptr_array_add (env_array, NULL);
return (char **)g_ptr_array_free (env_array, FALSE);
}
GFile *

View File

@ -30,8 +30,7 @@ void xdg_app_run_add_environment_args (GPtrArray *argv_array,
GKeyFile *metakey,
const char **allow,
const char **forbid);
void xdg_app_run_setup_minimal_env (GPtrArray *env_array,
gboolean devel);
char ** xdg_app_run_get_minimal_env (gboolean devel);
void xdg_app_run_add_x11_args (GPtrArray *argv_array);
void xdg_app_run_add_no_x11_args (GPtrArray *argv_array);