misc: Add cr_rm()
authorTomas Mlcoch <tmlcoch@redhat.com>
Thu, 28 Nov 2013 16:54:04 +0000 (17:54 +0100)
committerTomas Mlcoch <tmlcoch@redhat.com>
Thu, 28 Nov 2013 16:54:04 +0000 (17:54 +0100)
src/misc.c
src/misc.h

index 7ac4326..86f6eea 100644 (file)
@@ -1133,37 +1133,20 @@ cr_write_to_file(GError **err, gchar *filename, const char *format, ...)
     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
@@ -1173,11 +1156,9 @@ cr_cp(const char *src,
                  &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;
     }
 
@@ -1187,11 +1168,67 @@ cr_cp(const char *src,
         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;
+}
index a3fef9a..ceb3911 100644 (file)
@@ -404,10 +404,11 @@ typedef enum {
 } 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,
@@ -416,6 +417,26 @@ 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