summaryrefslogtreecommitdiffstats
path: root/cat
diff options
context:
space:
mode:
authorRichard W.M. Jones <rjones@redhat.com>2011-01-08 10:15:39 +0000
committerRichard W.M. Jones <rjones@redhat.com>2011-01-08 10:15:39 +0000
commit97339a0f43d687efac6f7edafdf21e4b8d9b35e8 (patch)
tree2d68b0e3c0c98b4b3a94c249a80795d71e51e4a3 /cat
parent7e1114445e713c4a15f3f2cede5842044de1735a (diff)
downloadlibguestfs-97339a0f43d687efac6f7edafdf21e4b8d9b35e8.tar.gz
libguestfs-97339a0f43d687efac6f7edafdf21e4b8d9b35e8.tar.xz
libguestfs-97339a0f43d687efac6f7edafdf21e4b8d9b35e8.zip
virt-filesystems: Ignore errors when getting label and UUID (RHBZ#668112).
If virt-filesystems was pointed to an image that contained bogus or blank filesystems, then calls to vfs-label and/or vfs-uuid could fail, resulting in errors like this: libguestfs: error: vfs_label: /dev/vda1: These errors can be ignored and shouldn't stop virt-filesystems from working.
Diffstat (limited to 'cat')
-rw-r--r--cat/virt-filesystems.c35
1 files changed, 29 insertions, 6 deletions
diff --git a/cat/virt-filesystems.c b/cat/virt-filesystems.c
index 987882d3..cd991e85 100644
--- a/cat/virt-filesystems.c
+++ b/cat/virt-filesystems.c
@@ -33,6 +33,15 @@
#include "guestfs.h"
#include "options.h"
+#define DISABLE_GUESTFS_ERRORS_FOR(stmt) do { \
+ guestfs_error_handler_cb old_error_cb; \
+ void *old_error_data; \
+ old_error_cb = guestfs_get_error_handler (g, &old_error_data); \
+ guestfs_set_error_handler (g, NULL, NULL); \
+ stmt; \
+ guestfs_set_error_handler (g, old_error_cb, old_error_data); \
+ } while (0)
+
/* These globals are shared with options.c. */
guestfs_h *g;
@@ -438,14 +447,28 @@ do_output_filesystems (void)
* otherwise pass them as NULL.
*/
if ((columns & COLUMN_VFS_LABEL)) {
- vfs_label = guestfs_vfs_label (g, fses[i]);
- if (vfs_label == NULL)
- exit (EXIT_FAILURE);
+ DISABLE_GUESTFS_ERRORS_FOR (
+ vfs_label = guestfs_vfs_label (g, fses[i]);
+ );
+ if (vfs_label == NULL) {
+ vfs_label = strdup ("");
+ if (!vfs_label) {
+ perror ("strdup");
+ exit (EXIT_FAILURE);
+ }
+ }
}
if ((columns & COLUMN_UUID)) {
- vfs_uuid = guestfs_vfs_uuid (g, fses[i]);
- if (vfs_uuid == NULL)
- exit (EXIT_FAILURE);
+ DISABLE_GUESTFS_ERRORS_FOR (
+ vfs_uuid = guestfs_vfs_uuid (g, fses[i]);
+ );
+ if (vfs_uuid == NULL) {
+ vfs_uuid = strdup ("");
+ if (!vfs_uuid) {
+ perror ("strdup");
+ exit (EXIT_FAILURE);
+ }
+ }
}
if ((columns & COLUMN_SIZE)) {
size = guestfs_blockdev_getsize64 (g, fses[i]);