Mercurial > crates > nonstick
diff src/libpam/conversation.rs @ 89:dd3e9c4bcde3
Simplify memory management in Questions.
When we're sending Questions to the client, we don't need them to be
C-managed, we just need the pointers going to the right place.
This replaces a bunch of Question management cruft with Vecs and Boxes.
author | Paul Fisher <paul@pfish.zone> |
---|---|
date | Fri, 13 Jun 2025 05:22:48 -0400 |
parents | 05291b601f0a |
children | efc2b56c8928 |
line wrap: on
line diff
--- a/src/libpam/conversation.rs Tue Jun 10 05:36:58 2025 -0400 +++ b/src/libpam/conversation.rs Fri Jun 13 05:22:48 2025 -0400 @@ -5,7 +5,8 @@ use crate::libpam::memory::Immovable; use crate::libpam::pam_ffi::AppData; pub use crate::libpam::pam_ffi::LibPamConversation; -use crate::libpam::question::{Indirect, IndirectTrait, Question, Questions}; +use crate::libpam::question::QuestionsTrait; +use crate::libpam::question::{Question, Questions}; use crate::ErrorCode; use crate::Result; use std::ffi::c_int; @@ -38,12 +39,11 @@ .cast::<C>() .as_mut() .ok_or(ErrorCode::ConversationError)?; - let indirect = Indirect::borrow_ptr(questions).ok_or(ErrorCode::ConversationError)?; + let indirect = Questions::borrow_ptr(questions, count as usize); let answers_ptr = answers.as_mut().ok_or(ErrorCode::ConversationError)?; // Build our owned list of Q&As from the questions we've been asked let messages: Vec<OwnedMessage> = indirect - .iter(count as usize) .map(TryInto::try_into) .collect::<Result<_>>() .map_err(|_| ErrorCode::ConversationError)?; @@ -71,7 +71,7 @@ let result = unsafe { (self.callback)( messages.len() as c_int, - questions.indirect(), + questions.ptr(), &mut response_pointer, self.appdata, )