On Mon, May 02, 2022 at 09:20:16AM +0200, Laszlo Ersek wrote: > On 04/29/22 13:04, Richard W.M. Jones wrote: > > For each drive added, return the name. For example calling this with > > index 0 will return the string "/dev/sda". I called it > > guestfs_device_name (not drive_name) for consistency with the existing > > guestfs_device_index function. > > > > You don't really need to call this function. You can follow the > > advice here: > > https://libguestfs.org/guestfs.3.html#block-device-naming > > and assume that drives are added with predictable names like > > "/dev/sda", "/dev/sdb", etc. > > > > However it's useful to expose the internal guestfs_int_drive_name > > function since especially handling names beyond index 26 is tricky > > (https://rwmj.wordpress.com/2011/01/09/how-are-linux-drives-named-beyond-drive-26-devsdz/) > > > > Fixes: https://github.com/libguestfs/libguestfs/issues/80 > > --- > > generator/actions_core.ml | 24 +++++++++++++++++++++++- > > lib/drives.c | 15 +++++++++++++++ > > 2 files changed, 38 insertions(+), 1 deletion(-) > > > > diff --git a/generator/actions_core.ml b/generator/actions_core.ml > > index ce9ee39cca..dc12fdc33e 100644 > > --- a/generator/actions_core.ml > > +++ b/generator/actions_core.ml > > @@ -737,7 +737,29 @@ returns the index of the device in the list of devices. > > Index numbers start from 0. The named device must exist, > > for example as a string returned from C<guestfs_list_devices>. > > > > -See also C<guestfs_list_devices>, C<guestfs_part_to_dev>." }; > > +See also C<guestfs_list_devices>, C<guestfs_part_to_dev>, > > +C<guestfs_device_name>." }; > > + > > + { defaults with > > + name = "device_name"; added = (1, 49, 1); > > + style = RString (RPlainString, "name"), [Int "index"], []; > > + tests = [ > > + InitEmpty, Always, TestResult ( > > + [["device_name"; "0"]], "STREQ (ret, \"/dev/sda\")"), []; > > + InitEmpty, Always, TestResult ( > > + [["device_name"; "1"]], "STREQ (ret, \"/dev/sdb\")"), []; > > + InitEmpty, Always, TestLastFail ( > > + [["device_name"; "99"]]), [] > > + ]; > > + shortdesc = "convert device index to name"; > > + longdesc = "\ > > +This function takes a device index and returns the device > > +name. For example index C<0> will return the string C</dev/sda>. > > + > > +The drive index must have been added to the handle. > > + > > +See also C<guestfs_list_devices>, C<guestfs_part_to_dev>, > > +C<guestfs_device_index>." }; > > > > { defaults with > > name = "shutdown"; added = (1, 19, 16); > > diff --git a/lib/drives.c b/lib/drives.c > > index fd95308d2d..a6179fc367 100644 > > --- a/lib/drives.c > > +++ b/lib/drives.c > > @@ -31,6 +31,7 @@ > > #include <netdb.h> > > #include <arpa/inet.h> > > #include <assert.h> > > +#include <errno.h> > > #include <libintl.h> > > > > #include "c-ctype.h" > > @@ -1084,3 +1085,17 @@ guestfs_impl_device_index (guestfs_h *g, const char > > *device) > > error (g, _("%s: device not found"), device); > > return r; > > } > > + > > +char * > > +guestfs_impl_device_name (guestfs_h *g, int index) > > +{ > > + char drive_name[64]; > > + > > + if (index < 0 || index >= g->nr_drives) { > > + guestfs_int_error_errno (g, EINVAL, _("drive index out of range")); > > + return NULL; > > + } > > + > > + guestfs_int_drive_name (index, drive_name); > > + return safe_asprintf (g, "/dev/sd%s", drive_name); > > +} > > > > Reviewed-by: Laszlo Ersek <[email protected]>
Thanks, pushed as commit ac00e603f8. Rich. -- Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones Read my programming and virtualization blog: http://rwmj.wordpress.com virt-builder quickly builds VMs from scratch http://libguestfs.org/virt-builder.1.html _______________________________________________ Libguestfs mailing list [email protected] https://listman.redhat.com/mailman/listinfo/libguestfs
