mirror of
https://github.com/libguestfs/libguestfs.git
synced 2026-03-21 22:53:37 +00:00
daemon: Reimplement ‘device_index’ API in OCaml.
This commit is contained in:
@@ -33,27 +33,6 @@
|
||||
#include "daemon.h"
|
||||
#include "actions.h"
|
||||
|
||||
int
|
||||
do_device_index (const char *device)
|
||||
{
|
||||
size_t i;
|
||||
int ret = -1;
|
||||
CLEANUP_FREE_STRING_LIST char **devices = do_list_devices ();
|
||||
|
||||
if (devices == NULL)
|
||||
return -1;
|
||||
|
||||
for (i = 0; devices[i] != NULL; ++i) {
|
||||
if (STREQ (device, devices[i]))
|
||||
ret = (int) i;
|
||||
}
|
||||
|
||||
if (ret == -1)
|
||||
reply_with_error ("device not found");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define GUESTFSDIR "/dev/disk/guestfs"
|
||||
|
||||
char **
|
||||
|
||||
@@ -113,3 +113,14 @@ let is_whole_device device =
|
||||
|
||||
try ignore (stat devpath); true
|
||||
with Unix_error ((ENOENT|ENOTDIR), _, _) -> false
|
||||
|
||||
let device_index device =
|
||||
(* This is the algorithm which was used by the C version. Why
|
||||
* can't we use drive_index from C_utils? XXX
|
||||
*)
|
||||
let rec loop i = function
|
||||
| [] -> failwithf "%s: device not found" device
|
||||
| dev :: devices when dev = device -> i
|
||||
| _ :: devices -> loop (i+1) devices
|
||||
in
|
||||
loop 0 (list_devices ())
|
||||
|
||||
@@ -18,10 +18,8 @@
|
||||
|
||||
val list_devices : unit -> string list
|
||||
val list_partitions : unit -> string list
|
||||
|
||||
val nr_devices : unit -> int
|
||||
|
||||
val part_to_dev : string -> string
|
||||
val part_to_partnum : string -> int
|
||||
|
||||
val is_whole_device : string -> bool
|
||||
val nr_devices : unit -> int
|
||||
val device_index : string -> int
|
||||
|
||||
@@ -7419,6 +7419,7 @@ instead of, or after calling C<guestfs_zero_free_space>." };
|
||||
{ defaults with
|
||||
name = "device_index"; added = (1, 19, 7);
|
||||
style = RInt "index", [String (Device, "device")], [];
|
||||
impl = OCaml "Devsparts.device_index";
|
||||
tests = [
|
||||
InitEmpty, Always, TestResult (
|
||||
[["device_index"; "/dev/sda"]], "ret == 0"), []
|
||||
|
||||
Reference in New Issue
Block a user