diff --git a/lib/launch.c b/lib/launch.c index 7f06c69f8..37ab02492 100644 --- a/lib/launch.c +++ b/lib/launch.c @@ -55,12 +55,27 @@ static struct backend { int guestfs_impl_launch (guestfs_h *g) { + int r; + /* Configured? */ if (g->state != CONFIG) { error (g, _("the libguestfs handle has already been launched")); return -1; } + /* Too many drives? + * + * Some backends such as ‘unix:’ don't allow us to query max_disks. + * Don't fail in this case. + */ + guestfs_push_error_handler (g, NULL, NULL); + r = guestfs_max_disks (g); + guestfs_pop_error_handler (g); + if (r >= 0 && g->nr_drives > (size_t) r) { + error (g, _("too many drives have been added, the current backend only supports %d drives"), r); + return -1; + } + /* Start the clock ... */ gettimeofday (&g->launch_t, NULL); TRACE0 (launch_start);