xenclient/
util.rs

1use crate::error::{Error, Result};
2
3pub fn vbd_blkidx_to_disk_name(blkid: u32) -> Result<String> {
4    let mut name = "xvd".to_string();
5    let mut suffix = String::new();
6    let mut n = blkid;
7    loop {
8        let c = (n % 26) as u8;
9        let c = b'a' + c;
10        let c = char::from_u32(c as u32).ok_or(Error::InvalidBlockIdx)?;
11        suffix.push(c);
12        if n >= 26 {
13            n = (n / 26) - 1;
14            continue;
15        } else {
16            break;
17        }
18    }
19    name.push_str(&suffix.chars().rev().collect::<String>());
20    Ok(name)
21}