libkrb5 0.0.3

[UNMAINTAINED] Rust bindings for MIT Kerberos 5
Documentation
use std::ffi::{CStr, CString};
use std::os::raw::c_char;

use crate::error::Krb5Error;

pub(crate) fn c_string_to_string(c_string: *const c_char) -> Result<String, Krb5Error> {
    if c_string.is_null() {
        return Err(Krb5Error::NullPointerDereference);
    }

    match unsafe { CStr::from_ptr(c_string) }.to_owned().into_string() {
        Ok(string) => Ok(string),
        Err(error) => Err(error.into()),
    }
}

pub(crate) fn string_to_c_string(string: &str) -> Result<*const c_char, Krb5Error> {
    let cstring = match CString::new(string) {
        Ok(value) => value,
        Err(_) => return Err(Krb5Error::StringConversion { error: None }),
    };

    Ok(cstring.as_ptr())
}