forked from Mirrors/flatpak-builder
Move run helpers from builtin-run to xdg-app-run.c file
parent
0cb23de365
commit
884040dfcc
|
@ -88,6 +88,8 @@ xdg_app_SOURCES = \
|
|||
xdg-app-builtins-repo-update.c \
|
||||
xdg-app-dir.c \
|
||||
xdg-app-dir.h \
|
||||
xdg-app-run.c \
|
||||
xdg-app-run.h \
|
||||
xdg-app-utils.h \
|
||||
xdg-app-utils.c \
|
||||
$(dbus_built_sources) \
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
|
||||
#include "xdg-app-builtins.h"
|
||||
#include "xdg-app-utils.h"
|
||||
#include "xdg-app-run.h"
|
||||
|
||||
static gboolean opt_runtime;
|
||||
static gboolean opt_network;
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
#include "xdg-app-builtins.h"
|
||||
#include "xdg-app-utils.h"
|
||||
#include "xdg-app-dbus.h"
|
||||
#include "xdg-app-run.h"
|
||||
|
||||
static char *opt_arch;
|
||||
static char *opt_branch;
|
||||
|
@ -31,115 +32,6 @@ static GOptionEntry options[] = {
|
|||
{ NULL }
|
||||
};
|
||||
|
||||
static char *
|
||||
extract_unix_path_from_dbus_address (const char *address)
|
||||
{
|
||||
const char *path, *path_end;
|
||||
|
||||
if (address == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!g_str_has_prefix (address, "unix:"))
|
||||
return NULL;
|
||||
|
||||
path = strstr (address, "path=");
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
path += strlen ("path=");
|
||||
path_end = path;
|
||||
while (*path_end != 0 && *path_end != ',')
|
||||
path_end++;
|
||||
|
||||
return g_strndup (path, path_end - path);
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_x11_args (GPtrArray *argv_array)
|
||||
{
|
||||
char *x11_socket = NULL;
|
||||
const char *display = g_getenv ("DISPLAY");
|
||||
|
||||
if (display && display[0] == ':' && g_ascii_isdigit (display[1]))
|
||||
{
|
||||
const char *display_nr = &display[1];
|
||||
const char *display_nr_end = display_nr;
|
||||
gs_free char *d = NULL;
|
||||
|
||||
while (g_ascii_isdigit (*display_nr_end))
|
||||
display_nr_end++;
|
||||
|
||||
d = g_strndup (display_nr, display_nr_end - display_nr);
|
||||
x11_socket = g_strdup_printf ("/tmp/.X11-unix/X%s", d);
|
||||
|
||||
g_ptr_array_add (argv_array, g_strdup ("-x"));
|
||||
g_ptr_array_add (argv_array, x11_socket);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_wayland_args (GPtrArray *argv_array)
|
||||
{
|
||||
char *wayland_socket = g_build_filename (g_get_user_runtime_dir (), "wayland-0", NULL);
|
||||
if (g_file_test (wayland_socket, G_FILE_TEST_EXISTS))
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-y"));
|
||||
g_ptr_array_add (argv_array, wayland_socket);
|
||||
}
|
||||
else
|
||||
g_free (wayland_socket);
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_no_x11_args (GPtrArray *argv_array)
|
||||
{
|
||||
g_unsetenv ("DISPLAY");
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_pulseaudio_args (GPtrArray *argv_array)
|
||||
{
|
||||
char *pulseaudio_socket = g_build_filename (g_get_user_runtime_dir (), "pulse/native", NULL);
|
||||
if (g_file_test (pulseaudio_socket, G_FILE_TEST_EXISTS))
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-p"));
|
||||
g_ptr_array_add (argv_array, pulseaudio_socket);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_system_dbus_args (GPtrArray *argv_array)
|
||||
{
|
||||
const char *dbus_address = g_getenv ("DBUS_SYSTEM_BUS_ADDRESS");
|
||||
char *dbus_system_socket = NULL;
|
||||
|
||||
dbus_system_socket = extract_unix_path_from_dbus_address (dbus_address);
|
||||
if (dbus_system_socket == NULL &&
|
||||
g_file_test ("/var/run/dbus/system_bus_socket", G_FILE_TEST_EXISTS))
|
||||
{
|
||||
dbus_system_socket = g_strdup ("/var/run/dbus/system_bus_socket");
|
||||
}
|
||||
|
||||
if (dbus_system_socket != NULL)
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-D"));
|
||||
g_ptr_array_add (argv_array, dbus_system_socket);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_session_dbus_args (GPtrArray *argv_array)
|
||||
{
|
||||
const char *dbus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS");
|
||||
char *dbus_session_socket = NULL;
|
||||
|
||||
dbus_session_socket = extract_unix_path_from_dbus_address (dbus_address);
|
||||
if (dbus_session_socket != NULL)
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-d"));
|
||||
g_ptr_array_add (argv_array, dbus_session_socket);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
add_extension_arg (const char *directory,
|
||||
const char *type, const char *extension, const char *arch, const char *branch,
|
||||
|
|
|
@ -49,12 +49,6 @@ BUILTINPROTO(repo_update);
|
|||
|
||||
#undef BUILTINPROTO
|
||||
|
||||
void xdg_app_run_add_x11_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_no_x11_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_pulseaudio_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_system_dbus_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_session_dbus_args (GPtrArray *argv_array);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
#endif /* __XDG_APP_BUILTINS_H__ */
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
#include "config.h"
|
||||
|
||||
#include <string.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <gio/gio.h>
|
||||
#include "libgsystem.h"
|
||||
|
||||
#include "xdg-app-run.h"
|
||||
#include "xdg-app-utils.h"
|
||||
|
||||
static char *
|
||||
extract_unix_path_from_dbus_address (const char *address)
|
||||
{
|
||||
const char *path, *path_end;
|
||||
|
||||
if (address == NULL)
|
||||
return NULL;
|
||||
|
||||
if (!g_str_has_prefix (address, "unix:"))
|
||||
return NULL;
|
||||
|
||||
path = strstr (address, "path=");
|
||||
if (path == NULL)
|
||||
return NULL;
|
||||
path += strlen ("path=");
|
||||
path_end = path;
|
||||
while (*path_end != 0 && *path_end != ',')
|
||||
path_end++;
|
||||
|
||||
return g_strndup (path, path_end - path);
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_x11_args (GPtrArray *argv_array)
|
||||
{
|
||||
char *x11_socket = NULL;
|
||||
const char *display = g_getenv ("DISPLAY");
|
||||
|
||||
if (display && display[0] == ':' && g_ascii_isdigit (display[1]))
|
||||
{
|
||||
const char *display_nr = &display[1];
|
||||
const char *display_nr_end = display_nr;
|
||||
gs_free char *d = NULL;
|
||||
|
||||
while (g_ascii_isdigit (*display_nr_end))
|
||||
display_nr_end++;
|
||||
|
||||
d = g_strndup (display_nr, display_nr_end - display_nr);
|
||||
x11_socket = g_strdup_printf ("/tmp/.X11-unix/X%s", d);
|
||||
|
||||
g_ptr_array_add (argv_array, g_strdup ("-x"));
|
||||
g_ptr_array_add (argv_array, x11_socket);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_wayland_args (GPtrArray *argv_array)
|
||||
{
|
||||
char *wayland_socket = g_build_filename (g_get_user_runtime_dir (), "wayland-0", NULL);
|
||||
if (g_file_test (wayland_socket, G_FILE_TEST_EXISTS))
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-y"));
|
||||
g_ptr_array_add (argv_array, wayland_socket);
|
||||
}
|
||||
else
|
||||
g_free (wayland_socket);
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_no_x11_args (GPtrArray *argv_array)
|
||||
{
|
||||
g_unsetenv ("DISPLAY");
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_pulseaudio_args (GPtrArray *argv_array)
|
||||
{
|
||||
char *pulseaudio_socket = g_build_filename (g_get_user_runtime_dir (), "pulse/native", NULL);
|
||||
if (g_file_test (pulseaudio_socket, G_FILE_TEST_EXISTS))
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-p"));
|
||||
g_ptr_array_add (argv_array, pulseaudio_socket);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_system_dbus_args (GPtrArray *argv_array)
|
||||
{
|
||||
const char *dbus_address = g_getenv ("DBUS_SYSTEM_BUS_ADDRESS");
|
||||
char *dbus_system_socket = NULL;
|
||||
|
||||
dbus_system_socket = extract_unix_path_from_dbus_address (dbus_address);
|
||||
if (dbus_system_socket == NULL &&
|
||||
g_file_test ("/var/run/dbus/system_bus_socket", G_FILE_TEST_EXISTS))
|
||||
{
|
||||
dbus_system_socket = g_strdup ("/var/run/dbus/system_bus_socket");
|
||||
}
|
||||
|
||||
if (dbus_system_socket != NULL)
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-D"));
|
||||
g_ptr_array_add (argv_array, dbus_system_socket);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
xdg_app_run_add_session_dbus_args (GPtrArray *argv_array)
|
||||
{
|
||||
const char *dbus_address = g_getenv ("DBUS_SESSION_BUS_ADDRESS");
|
||||
char *dbus_session_socket = NULL;
|
||||
|
||||
dbus_session_socket = extract_unix_path_from_dbus_address (dbus_address);
|
||||
if (dbus_session_socket != NULL)
|
||||
{
|
||||
g_ptr_array_add (argv_array, g_strdup ("-d"));
|
||||
g_ptr_array_add (argv_array, dbus_session_socket);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
#ifndef __XDG_APP_RUN_H__
|
||||
#define __XDG_APP_RUN_H__
|
||||
|
||||
void xdg_app_run_add_x11_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_no_x11_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_wayland_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_pulseaudio_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_system_dbus_args (GPtrArray *argv_array);
|
||||
void xdg_app_run_add_session_dbus_args (GPtrArray *argv_array);
|
||||
|
||||
#endif /* __XDG_APP_RUN_H__ */
|
Loading…
Reference in New Issue