return ret;
}
-gboolean
-cr_cp(const char *src,
- const char *dst,
- cr_CpFlags flags,
- const char *working_directory,
- GError **err)
+static gboolean
+cr_run_command(char **cmd, const char *working_dir, GError **err)
{
- assert(src);
- assert(dst);
+ assert(cmd);
assert(!err || *err == NULL);
- GPtrArray *argv_array = g_ptr_array_new();
- g_ptr_array_add(argv_array, "cp");
- if (flags & CR_CP_RECURSIVE)
- g_ptr_array_add(argv_array, "-r");
- if (flags & CR_CP_PRESERVE_ALL) {
- g_ptr_array_add(argv_array, "--preserve=all");
- }
- g_ptr_array_add(argv_array, (char *) src);
- g_ptr_array_add(argv_array, (char *) dst);
- g_ptr_array_add(argv_array, (char *) NULL);
-
GError *tmp_err = NULL;
gint status = 0;
+ gchar *error_str = NULL;
int spawn_flags = G_SPAWN_SEARCH_PATH
| G_SPAWN_STDOUT_TO_DEV_NULL;
- gchar *error_str = NULL;
-
- g_spawn_sync(working_directory,
- (char **) argv_array->pdata,
+ g_spawn_sync(working_dir,
+ cmd,
NULL, // envp
spawn_flags,
NULL, // child setup function
&status,
&tmp_err);
- g_ptr_array_free(argv_array, TRUE);
-
if (tmp_err) {
g_free(error_str);
- g_propagate_prefixed_error(err, tmp_err, "Error during copying: ");
+ g_propagate_error(err, tmp_err);
return FALSE;
}
for (char *ptr = error_str; *ptr; ptr++)
if (*ptr == '\n') *ptr = ' ';
- g_propagate_prefixed_error(err, tmp_err, "Error during copying: %s: ",
- error_str);
+ g_propagate_prefixed_error(err, tmp_err, "%s: ", error_str);
}
g_free(error_str);
return ret;
}
+
+gboolean
+cr_cp(const char *src,
+ const char *dst,
+ cr_CpFlags flags,
+ const char *working_dir,
+ GError **err)
+{
+ assert(src);
+ assert(dst);
+ assert(!err || *err == NULL);
+
+ GPtrArray *argv_array = g_ptr_array_new();
+ g_ptr_array_add(argv_array, "cp");
+ if (flags & CR_CP_RECURSIVE)
+ g_ptr_array_add(argv_array, "-r");
+ if (flags & CR_CP_PRESERVE_ALL)
+ g_ptr_array_add(argv_array, "--preserve=all");
+ g_ptr_array_add(argv_array, (char *) src);
+ g_ptr_array_add(argv_array, (char *) dst);
+ g_ptr_array_add(argv_array, (char *) NULL);
+
+ gboolean ret = cr_run_command((char **) argv_array->pdata,
+ working_dir,
+ err);
+
+ g_ptr_array_free(argv_array, TRUE);
+
+ return ret;
+}
+
+gboolean
+cr_rm(const char *path,
+ cr_RmFlags flags,
+ const char *working_dir,
+ GError **err)
+{
+ assert(path);
+ assert(!err || *err == NULL);
+
+ GPtrArray *argv_array = g_ptr_array_new();
+ g_ptr_array_add(argv_array, "rm");
+ if (flags & CR_RM_RECURSIVE)
+ g_ptr_array_add(argv_array, "-r");
+ if (flags & CR_RM_FORCE)
+ g_ptr_array_add(argv_array, "-f");
+ g_ptr_array_add(argv_array, (char *) path);
+ g_ptr_array_add(argv_array, (char *) NULL);
+
+ gboolean ret = cr_run_command((char **) argv_array->pdata,
+ working_dir,
+ err);
+
+ g_ptr_array_free(argv_array, TRUE);
+
+ return ret;
+}
} cr_CpFlags;
/** Recursive copy of directory (works on files as well)
- * @param src Source (supports wildcards)
- * @param dst Destination (supports wildcards)
- * @param flags Flags
- * @param working_directory Working directory
+ * @param src Source (supports wildcards)
+ * @param dst Destination (supports wildcards)
+ * @param flags Flags
+ * @param working_dir Working directory
+ * @param err GError **
*/
gboolean
cr_cp(const char *src,
const char *working_directory,
GError **err);
+typedef enum {
+ CR_RM_DEFAULT = (1<<0), /*!<
+ No attributes - default */
+ CR_RM_RECURSIVE = (1<<1), /*!<
+ Copy directories recursively */
+ CR_RM_FORCE = (1<<2), /*!<
+ Use force */
+} cr_RmFlags;
+
+/** Wrapper over rm command
+ * @param path Path (supports wildcards)
+ * @param flags Flags
+ * @param working_dir Working directory
+ * @param err GError **
+ */
+gboolean
+cr_rm(const char *path,
+ cr_RmFlags flags,
+ const char *working_dir,
+ GError **err);
/** @} */
#ifdef __cplusplus