From ce8db119fa8cec4dda0c76a4e41463afb5c972d2 Mon Sep 17 00:00:00 2001 From: Julio Montes Date: Fri, 8 Jan 2016 19:49:59 -0600 Subject: [PATCH] add function to exec async tasks improve make_dir function to create parent directories (mkdir -p) --- src/lib.c | 26 +++++++++++++++++++++++++- src/lib.h | 1 + 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/lib.c b/src/lib.c index 4cf266d..88ffb8d 100644 --- a/src/lib.c +++ b/src/lib.c @@ -114,10 +114,34 @@ bool exec_task(const gchar* command_line) { return result; } +bool exec_task_async(const gchar* command_line, GChildWatchFunc async_func_watcher, gpointer data) { + GPid pid = 0; + GError *error = NULL; + gchar* command = g_strdup(command_line); + gchar* argvp[] = {SHELL_PATH, "-c", command, NULL }; + + g_spawn_async(NULL, argvp, NULL, + G_SPAWN_DO_NOT_REAP_CHILD, + NULL, NULL, &pid, &error); + + if (error) { + LOG(MOD "Error running async command: %s\n", (char*)error->message); + g_error_free(error); + } + + g_child_watch_add(pid, async_func_watcher, data); + + LOG(MOD "Executing [%d]: %s -c \"%s\"\n", pid, SHELL_PATH, command); + + g_free(command); + + return true; +} + int make_dir(const char* pathname, mode_t mode) { struct stat stats; if (stat(pathname, &stats) != 0) { - if (mkdir(pathname, mode) != 0) { + if (g_mkdir_with_parents(pathname, (gint)mode) != 0) { LOG(MOD "Cannot create directory %s\n", pathname); return -1; } diff --git a/src/lib.h b/src/lib.h index 01b7f36..4956603 100644 --- a/src/lib.h +++ b/src/lib.h @@ -52,6 +52,7 @@ #define __warn_unused_result__ __attribute__ ((warn_unused_result)) bool exec_task(const gchar* command_line); +bool exec_task_async(const gchar* command_line, GChildWatchFunc async_func_watcher, gpointer data); void LOG(const char *fmt, ...) __attribute__((format(printf, 1, 2))); int make_dir(const char* pathname, mode_t mode) __warn_unused_result__; int chown_path(const char* pathname, const char* ownername, const char* groupname) __warn_unused_result__;