return buf;
}
-static gint execute_async(gchar *const argv[])
+static gint execute_async(gchar *const argv[], const gchar *working_directory)
{
cm_return_val_if_fail(argv != NULL && argv[0] != NULL, -1);
- if (g_spawn_async(NULL, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH,
+ if (g_spawn_async(working_directory, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, FALSE) == FALSE) {
g_warning("couldn't execute command: %s", argv[0]);
return -1;
return 0;
}
-static gint execute_sync(gchar *const argv[])
+static gint execute_sync(gchar *const argv[], const gchar *working_directory)
{
gint status;
cm_return_val_if_fail(argv != NULL && argv[0] != NULL, -1);
#ifdef G_OS_UNIX
- if (g_spawn_sync(NULL, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH,
+ if (g_spawn_sync(working_directory, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, NULL, &status, NULL) == FALSE) {
g_warning("couldn't execute command: %s", argv[0]);
return -1;
else
return -1;
#else
- if (g_spawn_sync(NULL, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH|
- G_SPAWN_CHILD_INHERITS_STDIN|G_SPAWN_LEAVE_DESCRIPTORS_OPEN,
+ if (g_spawn_sync(working_directory, (gchar **)argv, NULL,
+ G_SPAWN_SEARCH_PATH|
+ G_SPAWN_CHILD_INHERITS_STDIN|
+ G_SPAWN_LEAVE_DESCRIPTORS_OPEN,
NULL, NULL, NULL, NULL, &status, NULL) == FALSE) {
g_warning("couldn't execute command: %s", argv[0]);
return -1;
#endif
}
-gint execute_command_line(const gchar *cmdline, gboolean async)
+gint execute_command_line(const gchar *cmdline, gboolean async,
+ const gchar *working_directory)
{
gchar **argv;
gint ret;
argv = strsplit_with_quote(cmdline, " ", 0);
if (async)
- ret = execute_async(argv);
+ ret = execute_async(argv, working_directory);
else
- ret = execute_sync(argv);
+ ret = execute_sync(argv, working_directory);
g_strfreev(argv);
g_snprintf(buf, sizeof(buf), DEFAULT_BROWSER_CMD, encoded_uri);
}
- execute_command_line(buf, TRUE);
+ execute_command_line(buf, TRUE, NULL);
#else
ShellExecute(NULL, "open", uri, NULL, NULL, SW_SHOW);
#endif
g_snprintf(buf, sizeof(buf), DEFAULT_EDITOR_CMD, filepath);
}
- execute_command_line(buf, TRUE);
+ execute_command_line(buf, TRUE, NULL);
return 0;
}