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-builtins-repo-update.c \
|
||||||
xdg-app-dir.c \
|
xdg-app-dir.c \
|
||||||
xdg-app-dir.h \
|
xdg-app-dir.h \
|
||||||
|
xdg-app-run.c \
|
||||||
|
xdg-app-run.h \
|
||||||
xdg-app-utils.h \
|
xdg-app-utils.h \
|
||||||
xdg-app-utils.c \
|
xdg-app-utils.c \
|
||||||
$(dbus_built_sources) \
|
$(dbus_built_sources) \
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include "xdg-app-builtins.h"
|
#include "xdg-app-builtins.h"
|
||||||
#include "xdg-app-utils.h"
|
#include "xdg-app-utils.h"
|
||||||
|
#include "xdg-app-run.h"
|
||||||
|
|
||||||
static gboolean opt_runtime;
|
static gboolean opt_runtime;
|
||||||
static gboolean opt_network;
|
static gboolean opt_network;
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "xdg-app-builtins.h"
|
#include "xdg-app-builtins.h"
|
||||||
#include "xdg-app-utils.h"
|
#include "xdg-app-utils.h"
|
||||||
#include "xdg-app-dbus.h"
|
#include "xdg-app-dbus.h"
|
||||||
|
#include "xdg-app-run.h"
|
||||||
|
|
||||||
static char *opt_arch;
|
static char *opt_arch;
|
||||||
static char *opt_branch;
|
static char *opt_branch;
|
||||||
|
@ -31,115 +32,6 @@ static GOptionEntry options[] = {
|
||||||
{ NULL }
|
{ 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
|
static void
|
||||||
add_extension_arg (const char *directory,
|
add_extension_arg (const char *directory,
|
||||||
const char *type, const char *extension, const char *arch, const char *branch,
|
const char *type, const char *extension, const char *arch, const char *branch,
|
||||||
|
|
|
@ -49,12 +49,6 @@ BUILTINPROTO(repo_update);
|
||||||
|
|
||||||
#undef BUILTINPROTO
|
#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
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __XDG_APP_BUILTINS_H__ */
|
#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