summaryrefslogtreecommitdiffstats
path: root/vendor/schannel/src/context_buffer.rs
blob: 99a8f59ae337fa3d2d62c38a0fe338d63d3e6fea (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
use std::ops::Deref;
use std::slice;

use windows_sys::Win32::Security::Authentication::Identity;

pub struct ContextBuffer(pub Identity::SecBuffer);

impl Drop for ContextBuffer {
    fn drop(&mut self) {
        unsafe {
            Identity::FreeContextBuffer(self.0.pvBuffer);
        }
    }
}

impl Deref for ContextBuffer {
    type Target = [u8];

    fn deref(&self) -> &[u8] {
        if self.0.cbBuffer == 0 {
            return &[];
        }
        
        unsafe { slice::from_raw_parts(self.0.pvBuffer as *const _, self.0.cbBuffer as usize) }
    }
}