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}