Add aug-ls command (non-generated code).
authorRichard Jones <rjones@redhat.com>
Thu, 9 Apr 2009 18:35:16 +0000 (19:35 +0100)
committerRichard Jones <rjones@redhat.com>
Thu, 9 Apr 2009 18:35:16 +0000 (19:35 +0100)
daemon/augeas.c
src/generator.ml

index 2b27387..04c4a7a 100644 (file)
@@ -276,3 +276,46 @@ do_aug_load (void)
 
   return 0;
 }
+
+/* Simpler version of aug-match, which also sorts the output. */
+char **
+do_aug_ls (const char *path)
+{
+  char **matches;
+  char *buf;
+  int len;
+
+  NEED_AUG (NULL);
+
+  ABS_PATH (path, NULL);
+
+  len = strlen (path);
+
+  if (len > 1 &&
+      (path[len-1] == '/' || path[len-1] == ']' || path[len-1] == '*')) {
+    reply_with_error ("don't use aug-ls with a path that ends with / ] *");
+    return NULL;
+  }
+
+  if (len == 1)
+    /* we know path must be "/" because of ABS_PATH above */
+    matches = do_aug_match ("/");
+  else {
+    len += 3;                  /* / * + terminating \0 */
+    buf = malloc (len);
+    if (buf == NULL) {
+      reply_with_perror ("malloc");
+      return NULL;
+    }
+
+    snprintf (buf, len, "%s/*", path);
+    matches = do_aug_match (buf);
+    free (buf);
+  }
+
+  if (matches == NULL)
+    return NULL;               /* do_aug_match has already sent the error */
+
+  sort_strings (matches, count_strings (matches));
+  return matches;              /* Caller frees. */
+}
index 4279c0d..c8809e4 100755 (executable)
@@ -473,6 +473,12 @@ Load files into the tree.
 
 See C<aug_load> in the Augeas documentation for the full gory
 details.");
+
+  ("aug_ls", (RStringList "matches", P1 (String "path")), 28, [],
+   "list Augeas nodes under a path",
+   "\
+This is just a shortcut for listing C<guestfs_aug_match>
+C<path/*> and sorting the files into alphabetical order.");
 ]
 
 let all_functions = non_daemon_functions @ daemon_functions