diff --git a/generator/actions_core.ml b/generator/actions_core.ml index ce9ee39cc..dc12fdc33 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. -See also C, C." }; +See also C, C, +C." }; + + { 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. + +The drive index must have been added to the handle. + +See also C, C, +C." }; { defaults with name = "shutdown"; added = (1, 19, 16); diff --git a/lib/drives.c b/lib/drives.c index fd95308d2..a6179fc36 100644 --- a/lib/drives.c +++ b/lib/drives.c @@ -31,6 +31,7 @@ #include #include #include +#include #include #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); +}