mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
New API: guestfs_device_name returning the drive name
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 Reviewed-by: Laszlo Ersek <lersek@redhat.com>
This commit is contained in:
@@ -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);
|
||||
|
||||
15
lib/drives.c
15
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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user