aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/utils.c54
1 files changed, 13 insertions, 41 deletions
diff --git a/src/utils.c b/src/utils.c
index 56c60c0f..6463698a 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -2900,59 +2900,29 @@ gchar *file_read_stream_to_str(FILE *fp)
gint execute_async(gchar *const argv[])
{
- pid_t pid;
- gint status;
+ g_return_val_if_fail(argv != NULL && argv[0] != NULL, -1);
- if ((pid = fork()) < 0) {
- perror("fork");
+ if (g_spawn_async(NULL, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, FALSE) == FALSE) {
+ g_warning("Can't execute command: %s\n", argv[0]);
return -1;
}
- if (pid == 0) { /* child process */
- pid_t gch_pid;
-
- if ((gch_pid = fork()) < 0) {
- perror("fork");
- _exit(1);
- }
-
- if (gch_pid == 0) { /* grandchild process */
- execvp(argv[0], argv);
-
- perror("execvp");
- _exit(1);
- }
-
- _exit(0);
- }
-
- waitpid(pid, &status, 0);
-
- if (WIFEXITED(status))
- return WEXITSTATUS(status);
- else
- return -1;
+ return 0;
}
gint execute_sync(gchar *const argv[])
{
- pid_t pid;
gint status;
- if ((pid = fork()) < 0) {
- perror("fork");
- return -1;
- }
-
- if (pid == 0) { /* child process */
- execvp(argv[0], argv);
+ g_return_val_if_fail(argv != NULL && argv[0] != NULL, -1);
- perror("execvp");
- _exit(1);
+ if (g_spawn_sync(NULL, (gchar **)argv, NULL, G_SPAWN_SEARCH_PATH,
+ NULL, NULL, NULL, NULL, &status, NULL) == FALSE) {
+ g_warning("Can't execute command: %s\n", argv[0]);
+ return -1;
}
- waitpid(pid, &status, 0);
-
if (WIFEXITED(status))
return WEXITSTATUS(status);
else
@@ -2964,7 +2934,7 @@ gint execute_command_line(const gchar *cmdline, gboolean async)
gchar **argv;
gint ret;
- debug_print("executing: %s\n", cmdline);
+ debug_print("execute_command_line(): executing: %s\n", cmdline);
argv = strsplit_with_quote(cmdline, " ", 0);
@@ -2985,6 +2955,8 @@ gchar *get_command_output(const gchar *cmdline)
g_return_val_if_fail(cmdline != NULL, NULL);
+ debug_print("get_command_output(): executing: %s\n", cmdline);
+
if (g_spawn_command_line_sync(cmdline, &child_stdout, NULL, &status,
NULL) == FALSE) {
g_warning("Can't execute command: %s\n", cmdline);