<div dir="ltr"><div>This was copied and barely modified from the implementation of <span class="gmail-pl-en">connect::Connect::list_all_storage_pools</span></div><div><br><span class="gmail-pl-en"></span><span class="gmail-pl-en"></span></div><div><div><div dir="ltr" class="gmail_signature" data-smartmail="gmail_signature">--<br>Sage Imel <<a href="mailto:sage@cat.pdx.edu" target="_blank">sage@cat.pdx.edu</a>><br>Maseeh College of Engineering and Computer Science<br>Computer Action Team <<a href="http://www.cat.pdx.edu" target="_blank">www.cat.pdx.edu</a>><br></div></div><br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 29, 2019 at 2:05 AM Sage Imel <<a href="mailto:sage@cat.pdx.edu">sage@cat.pdx.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">From: Sage Imel <<a href="mailto:sage@sagenite.net" target="_blank">sage@sagenite.net</a>><br>
<br>
Always returns the full list of volumes,<br>
can't just ask it how many volumes are in the pool<br>
<br>
Signed-off-by: Sage Imel <<a href="mailto:sage@cat.pdx.edu" target="_blank">sage@cat.pdx.edu</a>><br>
---<br>
 src/<a href="http://storage_pool.rs" rel="noreferrer" target="_blank">storage_pool.rs</a> | 29 ++++++++++++++++++++++++++++-<br>
 1 file changed, 28 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/<a href="http://storage_pool.rs" rel="noreferrer" target="_blank">storage_pool.rs</a> b/src/<a href="http://storage_pool.rs" rel="noreferrer" target="_blank">storage_pool.rs</a><br>
index 38676c2..e8ed21c 100644<br>
--- a/src/<a href="http://storage_pool.rs" rel="noreferrer" target="_blank">storage_pool.rs</a><br>
+++ b/src/<a href="http://storage_pool.rs" rel="noreferrer" target="_blank">storage_pool.rs</a><br>
@@ -18,7 +18,7 @@<br>
<br>
 extern crate libc;<br>
<br>
-use std::str;<br>
+use std::{str, ptr};<br>
<br>
 use connect::sys::virConnectPtr;<br>
 use storage_vol::sys::virStorageVolPtr;<br>
@@ -57,6 +57,10 @@ extern "C" {<br>
                                xml: *const libc::c_char,<br>
                                flags: libc::c_uint)<br>
                                -> sys::virStoragePoolPtr;<br>
+    fn virStoragePoolListAllVolumes(ptr: sys::virStoragePoolPtr,<br>
+                                    vols: *mut *mut virStorageVolPtr,<br>
+                                    flags:libc::c_uint)<br>
+                                    -> libc::c_int;<br>
     fn virStoragePoolLookupByID(c: virConnectPtr, id: libc::c_int) -> sys::virStoragePoolPtr;<br>
     fn virStoragePoolLookupByName(c: virConnectPtr,<br>
                                   id: *const libc::c_char)<br>
@@ -103,6 +107,8 @@ pub const STORAGE_POOL_CREATE_WITH_BUILD: StoragePoolCreateFlags = 1 << 0;<br>
 pub const STORAGE_POOL_CREATE_WITH_BUILD_OVERWRITE: StoragePoolCreateFlags = 1 << 1;<br>
 pub const STORAGE_POOL_CREATE_WITH_BUILD_NO_OVERWRITE: StoragePoolCreateFlags = 1 << 2;<br>
<br>
+pub type VirStoragePoolListAllVolumesFlags = self::libc::c_uint;<br>
+<br>
 pub type StoragePoolState = self::libc::c_uint;<br>
 pub const VIR_STORAGE_POOL_INACTIVE: StoragePoolState = 0;<br>
 pub const VIR_STORAGE_POOL_BUILDING: StoragePoolState = 1;<br>
@@ -201,6 +207,27 @@ impl StoragePool {<br>
         }<br>
     }<br>
<br>
+    pub fn list_all_volumes(&self,<br>
+                                  flags: VirStoragePoolListAllVolumesFlags)<br>
+                                  -> Result<Vec<StorageVol>, Error> {<br>
+        unsafe {<br>
+            let mut volumes: *mut virStorageVolPtr = ptr::null_mut();<br>
+            let size =<br>
+                virStoragePoolListAllVolumes(self.as_ptr(), &mut volumes, flags as libc::c_uint);<br>
+            if size == -1 {<br>
+                return Err(Error::new());<br>
+            }<br>
+<br>
+            let mut array: Vec<StorageVol> = Vec::new();<br>
+            for x in 0..size as isize {<br>
+                array.push(StorageVol::new(*volumes.offset(x)));<br>
+            }<br>
+            libc::free(volumes as *mut libc::c_void);<br>
+<br>
+            return Ok(array);<br>
+        }<br>
+    }<br>
+<br>
     pub fn lookup_by_id(conn: &Connect, id: u32) -> Result<StoragePool, Error> {<br>
         unsafe {<br>
             let ptr = virStoragePoolLookupByID(conn.as_ptr(), id as libc::c_int);<br>
-- <br>
2.17.1<br>
<br>
</blockquote></div>