comparison src/memory.rs @ 64:bbe84835d6db v0.0.5

More organization; add lots of docs. - moves `PamHandle` to its own module, since it will be used by both modules and clients. - adds a ton of documentation to the `PamModule` trait and reorders methods to most-interesting-first. - adds more flag values from pam_modules.h. - other misc cleanup.
author Paul Fisher <paul@pfish.zone>
date Thu, 22 May 2025 01:52:32 -0400
parents 05cc2c27334f
children
comparison
equal deleted inserted replaced
63:a7aa5ca0d00d 64:bbe84835d6db
1 //! Utility functions for dealing with memory copying and stuff. 1 //! Utility functions for dealing with memory copying and stuff.
2 2
3 use crate::ErrorCode; 3 use crate::constants::{ErrorCode, Result};
4 use libc::c_char; 4 use libc::c_char;
5 use std::ffi::{CStr, CString}; 5 use std::ffi::{CStr, CString};
6 6
7 /// Safely converts a `&str` option to a `CString` option. 7 /// Safely converts a `&str` option to a `CString` option.
8 pub fn option_cstr(prompt: Option<&str>) -> crate::Result<Option<CString>> { 8 pub fn option_cstr(prompt: Option<&str>) -> Result<Option<CString>> {
9 prompt 9 prompt
10 .map(CString::new) 10 .map(CString::new)
11 .transpose() 11 .transpose()
12 .map_err(|_| ErrorCode::ConversationError) 12 .map_err(|_| ErrorCode::ConversationError)
13 } 13 }
20 } 20 }
21 } 21 }
22 22
23 /// Creates an owned copy of a string that is returned from a 23 /// Creates an owned copy of a string that is returned from a
24 /// <code>pam_get_<var>whatever</var></code> function. 24 /// <code>pam_get_<var>whatever</var></code> function.
25 pub fn copy_pam_string(result_ptr: *const c_char) -> crate::Result<String> { 25 pub fn copy_pam_string(result_ptr: *const c_char) -> Result<String> {
26 // We really shouldn't get a null pointer back here, but if we do, return nothing. 26 // We really shouldn't get a null pointer back here, but if we do, return nothing.
27 if result_ptr.is_null() { 27 if result_ptr.is_null() {
28 return Ok(String::new()); 28 return Ok(String::new());
29 } 29 }
30 let bytes = unsafe { CStr::from_ptr(result_ptr) }; 30 let bytes = unsafe { CStr::from_ptr(result_ptr) };