aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2021-01-12 10:06:25 +0100
committerGerd Hoffmann <kraxel@redhat.com>2021-01-12 10:06:25 +0100
commit017d3fac30a7d6f28046b541e7926b9e151f9d7c (patch)
tree601bfb6ed5231f9c30ad3c821d432f404e6e7aa6
parent77a47135026352736ead592a6dfb0f3d4df5759a (diff)
downloadvconsole-017d3fac30a7d6f28046b541e7926b9e151f9d7c.tar.gz
use gterm if installed
-rw-r--r--meson.build1
-rw-r--r--vconsole.c31
2 files changed, 29 insertions, 3 deletions
diff --git a/meson.build b/meson.build
index bdc03fc..c11c2c8 100644
--- a/meson.build
+++ b/meson.build
@@ -24,7 +24,6 @@ configure_file(output : 'config.h', configuration : config)
add_global_arguments(['-include', 'config.h'], language : 'c')
# build & install
-
stringify = find_program('./stringify.sh')
main_ui = custom_target('main-ui',
input : ['main.ui'],
diff --git a/vconsole.c b/vconsole.c
index 15372ef..79fe70f 100644
--- a/vconsole.c
+++ b/vconsole.c
@@ -341,6 +341,28 @@ static struct vconsole_domain *find_guest(struct vconsole_window *win)
return dom;
}
+static bool is_installed(const char *name)
+{
+ char *path = strdup(getenv("PATH"));
+ char *elem, *binary, *ptr;
+ bool retval = false;
+ int rc;
+
+ for (elem = strtok_r(path, ":", &ptr);
+ elem != NULL;
+ elem = strtok_r(NULL, ":", &ptr)) {
+ binary = g_strdup_printf("%s/%s", elem, name);
+ rc = access(binary, X_OK);
+ g_free(binary);
+ if (rc == 0) {
+ retval = true;
+ break;
+ }
+ }
+ free(path);
+ return retval;
+}
+
static void prepare_exec(void)
{
int i;
@@ -386,11 +408,16 @@ static void run_virsh_edit(struct vconsole_domain *dom)
{
char *argv[32];
int argc = 0;
+ char *app = "xterm";
char *uri;
uri = virConnectGetURI(dom->conn->ptr);
- argv[argc++] = "xterm";
+ if (is_installed("gterm")) {
+ app = "gterm";
+ }
+
+ argv[argc++] = app;
argv[argc++] = "-e";
argv[argc++] = "virsh";
argv[argc++] = "-c";
@@ -407,7 +434,7 @@ static void run_virsh_edit(struct vconsole_domain *dom)
} else {
/* child */
prepare_exec();
- execvp("xterm", argv);
+ execvp(app, argv);
perror("execvp");
exit(1);
}