Skip to main content

xen/store/
handle.rs

1use xen_sys::{xs_close, xs_handle, xs_open};
2
3use crate::XenError;
4
5#[derive(Debug, Clone)]
6pub struct XenStoreHandle(pub(crate) *mut xs_handle);
7
8impl XenStoreHandle {
9    pub fn new() -> Result<Self, XenError> {
10        let handle = unsafe { xs_open(0) };
11
12        if handle.is_null() {
13            return Err(XenError::Other("Failed to open xen store"));
14        }
15
16        Ok(Self(handle))
17    }
18}
19
20impl Drop for XenStoreHandle {
21    fn drop(&mut self) {
22        unsafe {
23            xs_close(self.0);
24        }
25    }
26}