diff options
author | Richard Jones <rjones@redhat.com> | 2010-05-25 11:28:09 +0100 |
---|---|---|
committer | Richard Jones <rjones@redhat.com> | 2010-05-25 11:31:11 +0100 |
commit | c9f1a45334efca844c8918b9f0de373f16fd9766 (patch) | |
tree | c373c8568a8d58cd23478a4f9d86212f3b733b78 /fish/supported.c | |
parent | 1bd1f9b85f45275b1600d148530bc1877ff15213 (diff) | |
download | libguestfs-c9f1a45334efca844c8918b9f0de373f16fd9766.tar.gz libguestfs-c9f1a45334efca844c8918b9f0de373f16fd9766.tar.xz libguestfs-c9f1a45334efca844c8918b9f0de373f16fd9766.zip |
fish: New command: 'supported'
This checks all available optional groups and prints out which
ones are supported by the daemon. Note you must launch the appliance
first.
Example:
><fs> supported
augeas yes
inotify yes
linuxfsuuid yes
linuxmodules yes
linuxxattrs yes
lvm2 yes
mknod yes
ntfs3g yes
ntfsprogs yes
realpath yes
scrub yes
selinux yes
xz yes
zerofree yes
Diffstat (limited to 'fish/supported.c')
-rw-r--r-- | fish/supported.c | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/fish/supported.c b/fish/supported.c new file mode 100644 index 00000000..c97af143 --- /dev/null +++ b/fish/supported.c @@ -0,0 +1,81 @@ +/* guestfish - the filesystem interactive shell + * Copyright (C) 2010 Red Hat Inc. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include "fish.h" + +int +do_supported (const char *cmd, int argc, char *argv[]) +{ + char **groups; + + /* As a side-effect this also checks that we've called 'launch'. */ + groups = guestfs_available_all_groups (g); + if (groups == NULL) + return -1; + + /* Temporarily replace the error handler so that messages don't get + * printed to stderr while we are issuing commands. + */ + guestfs_error_handler_cb old_error_cb; + void *old_error_cb_data; + old_error_cb = guestfs_get_error_handler (g, &old_error_cb_data); + guestfs_set_error_handler (g, NULL, NULL); + + /* Work out the max string length of any group name. */ + size_t i; + size_t len = 0; + for (i = 0; groups[i] != NULL; ++i) { + size_t l = strlen (groups[i]); + if (l > len) + len = l; + } + + for (i = 0; groups[i] != NULL; ++i) { + size_t l = strlen (groups[i]); + size_t j; + for (j = 0; j < len-l; ++j) + putchar (' '); + printf ("%s", groups[i]); + putchar (' '); + + char *gg[] = { groups[i], NULL }; + int r = guestfs_available (g, gg); + if (r == 0) + printf ("%s", _("yes")); + else + printf ("%s", _("no")); + putchar ('\n'); + } + + /* Free groups list. */ + for (i = 0; groups[i] != NULL; ++i) + free (groups[i]); + free (groups); + + /* Restore error handler. */ + guestfs_set_error_handler (g, old_error_cb, old_error_cb_data); + + return 0; +} |