Move run helpers from builtin-run to xdg-app-run.c file

tingping/wmclass
Alexander Larsson 2015-02-13 10:29:41 +01:00
parent 0cb23de365
commit 884040dfcc
6 changed files with 135 additions and 115 deletions

View File

@ -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) \

View File

@ -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;

View File

@ -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,

View File

@ -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__ */

120
xdg-app-run.c 100644
View File

@ -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);
}
}

11
xdg-app-run.h 100644
View File

@ -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__ */