diff options
author | Richard Jones <rjones@redhat.com> | 2009-04-09 19:35:16 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2009-04-09 19:35:16 +0100 |
commit | 0677b12f2273ed266da9dd276c129342d6a939a2 (patch) | |
tree | efa954d880456b00f00adead4a4e6ffd0afb654e /daemon/augeas.c | |
parent | 42643f08970c2efa5cb71a92166fbe323474c203 (diff) | |
download | libguestfs-0677b12f2273ed266da9dd276c129342d6a939a2.tar.gz libguestfs-0677b12f2273ed266da9dd276c129342d6a939a2.tar.xz libguestfs-0677b12f2273ed266da9dd276c129342d6a939a2.zip |
Add aug-ls command (non-generated code).
Diffstat (limited to 'daemon/augeas.c')
-rw-r--r-- | daemon/augeas.c | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/daemon/augeas.c b/daemon/augeas.c index 2b273875..04c4a7a6 100644 --- a/daemon/augeas.c +++ b/daemon/augeas.c @@ -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. */ +} |