From e8408fe3c32f65e31e5eaf020478265543e5e981 Mon Sep 17 00:00:00 2001 From: Pino Toscano Date: Wed, 2 Mar 2016 14:42:02 +0100 Subject: [PATCH] daemon: do not fail list-disk-labels w/o labels set If there are no labels set for the disks, the directory with the symlinks will not even exists, causing list-disk-labels to fail with ENOENT. In this situation, act as if the directory was there, but empty. --- daemon/devsparts.c | 7 +++++++ generator/actions.ml | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/daemon/devsparts.c b/daemon/devsparts.c index 7b92bf6c8..7c690f82b 100644 --- a/daemon/devsparts.c +++ b/daemon/devsparts.c @@ -316,6 +316,13 @@ do_list_disk_labels (void) dir = opendir (GUESTFSDIR); if (!dir) { + if (errno == ENOENT) { + /* The directory does not exist, and usually this happens when + * there are no labels set. In this case, act as if the directory + * was empty. + */ + return empty_list (); + } reply_with_perror ("opendir: %s", GUESTFSDIR); return NULL; } diff --git a/generator/actions.ml b/generator/actions.ml index 9c34463f3..287d7f58e 100644 --- a/generator/actions.ml +++ b/generator/actions.ml @@ -11336,6 +11336,18 @@ silently create an ext2 filesystem instead." }; name = "list_disk_labels"; added = (1, 19, 49); style = RHashtable "labels", [], []; proc_nr = Some 369; + tests = [ + (* The test disks have no labels, so we can be sure there are + * no labels. See in tests/disk-labels/ for tests checking + * for actual disk labels. + * + * Also, we make use of the assumption that RHashtable is a + * char*[] in C, so an empty hash has just a NULL element. + *) + InitScratchFS, Always, TestResult ( + [["list_disk_labels"]], + "is_string_list (ret, 0)"), []; + ]; shortdesc = "mapping of disk labels to devices"; longdesc = "\ If you add drives using the optional C