refactor(mmime): rustify mailimf_group

This commit is contained in:
dignifiedquire
2019-09-28 14:15:55 -06:00
parent c78753e8fa
commit 8aa1a0cb3a
5 changed files with 47 additions and 42 deletions

View File

@@ -260,9 +260,9 @@ unsafe fn display_group(mut group: *mut mailimf_group) {
let mut cur: *mut clistiter = 0 as *mut clistiter; let mut cur: *mut clistiter = 0 as *mut clistiter;
print!( print!(
"{}: ", "{}: ",
CStr::from_ptr((*group).grp_display_name).to_str().unwrap() CStr::from_ptr((*group).display_name).to_str().unwrap()
); );
cur = (*(*(*group).grp_mb_list).mb_list).first; cur = (*(*(*group).mb_list).mb_list).first;
while !cur.is_null() { while !cur.is_null() {
let mut mb: *mut mailimf_mailbox = 0 as *mut mailimf_mailbox; let mut mb: *mut mailimf_mailbox = 0 as *mut mailimf_mailbox;
mb = (if !cur.is_null() { mb = (if !cur.is_null() {

View File

@@ -41,22 +41,28 @@ pub enum mailimf_address {
Group(*mut mailimf_group), Group(*mut mailimf_group),
} }
/* /// Represents a group.
mailimf_group is a group /// - display_name is the name that will be displayed for this group,
/// for example 'group_name' in
- display_name is the name that will be displayed for this group, /// 'group_name: address1@domain1, address2@domain2;',
for example 'group_name' in /// - mb_list is a list of mailboxes
'group_name: address1@domain1, address2@domain2;', should be allocated #[derive(Clone)]
with malloc()
- mb_list is a list of mailboxes
*/
#[derive(Copy, Clone)]
#[repr(C)]
pub struct mailimf_group { pub struct mailimf_group {
pub grp_display_name: *mut libc::c_char, pub display_name: *mut libc::c_char,
pub grp_mb_list: *mut mailimf_mailbox_list, pub mb_list: *mut mailimf_mailbox_list,
} }
impl Drop for mailimf_group {
fn drop(&mut self) {
unsafe {
if !self.mb_list.is_null() {
mailimf_mailbox_list_free(self.mb_list);
}
mailimf_display_name_free(self.display_name);
}
}
}
/* /*
mailimf_mailbox_list is a list of mailboxes mailimf_mailbox_list is a list of mailboxes
@@ -485,14 +491,14 @@ pub unsafe fn mailimf_address_free(address: *mut mailimf_address) {
} }
} }
#[no_mangle] pub unsafe fn mailimf_group_free(group: *mut mailimf_group) {
pub unsafe fn mailimf_group_free(mut group: *mut mailimf_group) { if group.is_null() {
if !(*group).grp_mb_list.is_null() { return;
mailimf_mailbox_list_free((*group).grp_mb_list);
} }
mailimf_display_name_free((*group).grp_display_name);
free(group as *mut libc::c_void); let group = &Box::from_raw(group);
} }
#[no_mangle] #[no_mangle]
pub unsafe fn mailimf_display_name_free(mut display_name: *mut libc::c_char) { pub unsafe fn mailimf_display_name_free(mut display_name: *mut libc::c_char) {
mailimf_phrase_free(display_name); mailimf_phrase_free(display_name);
@@ -539,20 +545,19 @@ pub unsafe fn mailimf_mailbox_new(
(*mb).mb_addr_spec = mb_addr_spec; (*mb).mb_addr_spec = mb_addr_spec;
return mb; return mb;
} }
#[no_mangle]
pub unsafe fn mailimf_group_new( pub fn mailimf_group_new(
mut grp_display_name: *mut libc::c_char, display_name: *mut libc::c_char,
mut grp_mb_list: *mut mailimf_mailbox_list, mb_list: *mut mailimf_mailbox_list,
) -> *mut mailimf_group { ) -> *mut mailimf_group {
let mut group: *mut mailimf_group = 0 as *mut mailimf_group; let group = mailimf_group {
group = malloc(::std::mem::size_of::<mailimf_group>() as libc::size_t) as *mut mailimf_group; display_name,
if group.is_null() { mb_list,
return 0 as *mut mailimf_group; };
}
(*group).grp_display_name = grp_display_name; Box::into_raw(Box::new(group))
(*group).grp_mb_list = grp_mb_list;
return group;
} }
#[no_mangle] #[no_mangle]
pub unsafe fn mailimf_mailbox_list_new(mut mb_list: *mut clist) -> *mut mailimf_mailbox_list { pub unsafe fn mailimf_mailbox_list_new(mut mb_list: *mut clist) -> *mut mailimf_mailbox_list {
let mut mbl: *mut mailimf_mailbox_list = 0 as *mut mailimf_mailbox_list; let mut mbl: *mut mailimf_mailbox_list = 0 as *mut mailimf_mailbox_list;

View File

@@ -1003,8 +1003,8 @@ unsafe fn mailimf_group_write_driver(
do_write, do_write,
data, data,
col, col,
(*group).grp_display_name, (*group).display_name,
strlen((*group).grp_display_name), strlen((*group).display_name),
); );
if r != MAILIMF_NO_ERROR as libc::c_int { if r != MAILIMF_NO_ERROR as libc::c_int {
return r; return r;
@@ -1019,8 +1019,8 @@ unsafe fn mailimf_group_write_driver(
if r != MAILIMF_NO_ERROR as libc::c_int { if r != MAILIMF_NO_ERROR as libc::c_int {
return r; return r;
} }
if !(*group).grp_mb_list.is_null() { if !(*group).mb_list.is_null() {
r = mailimf_mailbox_list_write_driver(do_write, data, col, (*group).grp_mb_list); r = mailimf_mailbox_list_write_driver(do_write, data, col, (*group).mb_list);
if r != MAILIMF_NO_ERROR as libc::c_int { if r != MAILIMF_NO_ERROR as libc::c_int {
return r; return r;
} }

View File

@@ -1258,8 +1258,8 @@ pub fn mailimf_get_recipients(imffields: *mut mailimf_fields) -> HashSet<String>
mailimf_get_recipients_add_addr(&mut recipients, mailbox); mailimf_get_recipients_add_addr(&mut recipients, mailbox);
} }
mailimf_address::Group(group) => { mailimf_address::Group(group) => {
if !group.is_null() && unsafe { !(*group).grp_mb_list.is_null() } { if !group.is_null() && unsafe { !(*group).mb_list.is_null() } {
for cur3 in unsafe { &(*(*(*group).grp_mb_list).mb_list) } { for cur3 in unsafe { &(*(*(*group).mb_list).mb_list) } {
mailimf_get_recipients_add_addr( mailimf_get_recipients_add_addr(
&mut recipients, &mut recipients,
cur3 as *mut mailimf_mailbox, cur3 as *mut mailimf_mailbox,

View File

@@ -1877,10 +1877,10 @@ unsafe fn dc_add_or_lookup_contacts_by_address_list(
} }
} }
mailimf_address::Group(group) => { mailimf_address::Group(group) => {
if !group.is_null() && !(*group).grp_mb_list.is_null() { if !group.is_null() && !(*group).mb_list.is_null() {
dc_add_or_lookup_contacts_by_mailbox_list( dc_add_or_lookup_contacts_by_mailbox_list(
context, context,
(*group).grp_mb_list, (*group).mb_list,
origin, origin,
ids, ids,
check_self, check_self,