mirror of
https://github.com/chatmail/core.git
synced 2026-04-26 09:56:35 +03:00
refactor(mmime): rustify mailbox
This commit is contained in:
@@ -221,13 +221,10 @@ unsafe fn display_orig_date(mut orig_date: *mut mailimf_orig_date) {
|
||||
display_date_time((*orig_date).dt_date_time);
|
||||
}
|
||||
unsafe fn display_mailbox(mut mb: *mut mailimf_mailbox) {
|
||||
if !(*mb).mb_display_name.is_null() {
|
||||
print!(
|
||||
"{}",
|
||||
CStr::from_ptr((*mb).mb_display_name).to_str().unwrap()
|
||||
);
|
||||
if !(*mb).display_name.is_null() {
|
||||
print!("{}", CStr::from_ptr((*mb).display_name).to_str().unwrap());
|
||||
}
|
||||
print!("<{}>", CStr::from_ptr((*mb).mb_addr_spec).to_str().unwrap());
|
||||
print!("<{}>", CStr::from_ptr((*mb).addr_spec).to_str().unwrap());
|
||||
}
|
||||
unsafe fn display_mailbox_list(mut mb_list: *mut mailimf_mailbox_list) {
|
||||
for (i, mb) in (*mb_list).0.iter().enumerate() {
|
||||
|
||||
@@ -75,22 +75,26 @@ impl Drop for mailimf_mailbox_list {
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
mailimf_mailbox is a mailbox
|
||||
|
||||
- display_name is the name that will be displayed for this mailbox,
|
||||
for example 'name' in '"name" <mailbox@domain>,
|
||||
should be allocated with malloc()
|
||||
|
||||
- addr_spec is the mailbox, for example 'mailbox@domain'
|
||||
in '"name" <mailbox@domain>, should be allocated with malloc()
|
||||
*/
|
||||
#[derive(Copy, Clone)]
|
||||
#[repr(C)]
|
||||
/// A single mailbox.
|
||||
#[derive(Clone)]
|
||||
pub struct mailimf_mailbox {
|
||||
pub mb_display_name: *mut libc::c_char,
|
||||
pub mb_addr_spec: *mut libc::c_char,
|
||||
/// The name that will be displayed for this mailbox,
|
||||
/// for example 'name' in '"name" <mailbox@domain>.
|
||||
pub display_name: *mut libc::c_char,
|
||||
/// addr_spec is the mailbox, for example 'mailbox@domain'
|
||||
/// in '"name" <mailbox@domain>.
|
||||
pub addr_spec: *mut libc::c_char,
|
||||
}
|
||||
|
||||
impl Drop for mailimf_mailbox {
|
||||
fn drop(&mut self) {
|
||||
if !self.display_name.is_null() {
|
||||
unsafe { mailimf_display_name_free(self.display_name) };
|
||||
}
|
||||
unsafe { mailimf_addr_spec_free(self.addr_spec) };
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
mailimf_address_list is a list of addresses
|
||||
|
||||
@@ -518,31 +522,28 @@ pub unsafe fn mailimf_mailbox_list_free(mb_list: *mut mailimf_mailbox_list) {
|
||||
let _ = Box::from_raw(mb_list);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe fn mailimf_mailbox_free(mut mailbox: *mut mailimf_mailbox) {
|
||||
if !(*mailbox).mb_display_name.is_null() {
|
||||
mailimf_display_name_free((*mailbox).mb_display_name);
|
||||
pub unsafe fn mailimf_mailbox_free(mailbox: *mut mailimf_mailbox) {
|
||||
if mailbox.is_null() {
|
||||
return;
|
||||
}
|
||||
mailimf_addr_spec_free((*mailbox).mb_addr_spec);
|
||||
free(mailbox as *mut libc::c_void);
|
||||
let _ = Box::from_raw(mailbox);
|
||||
}
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe fn mailimf_addr_spec_free(mut addr_spec: *mut libc::c_char) {
|
||||
free(addr_spec as *mut libc::c_void);
|
||||
}
|
||||
#[no_mangle]
|
||||
pub unsafe fn mailimf_mailbox_new(
|
||||
mut mb_display_name: *mut libc::c_char,
|
||||
mut mb_addr_spec: *mut libc::c_char,
|
||||
|
||||
pub fn mailimf_mailbox_new(
|
||||
display_name: *mut libc::c_char,
|
||||
addr_spec: *mut libc::c_char,
|
||||
) -> *mut mailimf_mailbox {
|
||||
let mut mb: *mut mailimf_mailbox = 0 as *mut mailimf_mailbox;
|
||||
mb = malloc(::std::mem::size_of::<mailimf_mailbox>() as libc::size_t) as *mut mailimf_mailbox;
|
||||
if mb.is_null() {
|
||||
return 0 as *mut mailimf_mailbox;
|
||||
}
|
||||
(*mb).mb_display_name = mb_display_name;
|
||||
(*mb).mb_addr_spec = mb_addr_spec;
|
||||
return mb;
|
||||
let mb = mailimf_mailbox {
|
||||
display_name,
|
||||
addr_spec,
|
||||
};
|
||||
|
||||
Box::into_raw(Box::new(mb))
|
||||
}
|
||||
|
||||
pub fn mailimf_group_new(
|
||||
|
||||
@@ -1084,21 +1084,21 @@ unsafe fn mailimf_mailbox_write_driver(
|
||||
) -> libc::c_int {
|
||||
let mut r: libc::c_int = 0;
|
||||
let mut do_fold: libc::c_int = 0;
|
||||
if !(*mb).mb_display_name.is_null() {
|
||||
if 0 != is_atext((*mb).mb_display_name) {
|
||||
if !(*mb).display_name.is_null() {
|
||||
if 0 != is_atext((*mb).display_name) {
|
||||
r = mailimf_header_string_write_driver(
|
||||
do_write,
|
||||
data,
|
||||
col,
|
||||
(*mb).mb_display_name,
|
||||
strlen((*mb).mb_display_name),
|
||||
(*mb).display_name,
|
||||
strlen((*mb).display_name),
|
||||
);
|
||||
if r != MAILIMF_NO_ERROR as libc::c_int {
|
||||
return r;
|
||||
}
|
||||
} else {
|
||||
if !(*mb).mb_display_name.is_null() {
|
||||
if (*col as libc::size_t).wrapping_add(strlen((*mb).mb_display_name))
|
||||
if !(*mb).display_name.is_null() {
|
||||
if (*col as libc::size_t).wrapping_add(strlen((*mb).display_name))
|
||||
>= 72i32 as libc::size_t
|
||||
{
|
||||
r = mailimf_string_write_driver(
|
||||
@@ -1113,15 +1113,15 @@ unsafe fn mailimf_mailbox_write_driver(
|
||||
}
|
||||
}
|
||||
}
|
||||
if strlen((*mb).mb_display_name) > (998i32 / 2i32) as libc::size_t {
|
||||
if strlen((*mb).display_name) > (998i32 / 2i32) as libc::size_t {
|
||||
return MAILIMF_ERROR_INVAL as libc::c_int;
|
||||
}
|
||||
r = mailimf_quoted_string_write_driver(
|
||||
do_write,
|
||||
data,
|
||||
col,
|
||||
(*mb).mb_display_name,
|
||||
strlen((*mb).mb_display_name),
|
||||
(*mb).display_name,
|
||||
strlen((*mb).display_name),
|
||||
);
|
||||
if r != MAILIMF_NO_ERROR as libc::c_int {
|
||||
return r;
|
||||
@@ -1130,7 +1130,7 @@ unsafe fn mailimf_mailbox_write_driver(
|
||||
do_fold = 0i32;
|
||||
if *col > 1i32 {
|
||||
if (*col as libc::size_t)
|
||||
.wrapping_add(strlen((*mb).mb_addr_spec))
|
||||
.wrapping_add(strlen((*mb).addr_spec))
|
||||
.wrapping_add(3i32 as libc::size_t)
|
||||
>= 72i32 as libc::size_t
|
||||
{
|
||||
@@ -1171,8 +1171,8 @@ unsafe fn mailimf_mailbox_write_driver(
|
||||
do_write,
|
||||
data,
|
||||
col,
|
||||
(*mb).mb_addr_spec,
|
||||
strlen((*mb).mb_addr_spec),
|
||||
(*mb).addr_spec,
|
||||
strlen((*mb).addr_spec),
|
||||
);
|
||||
if r != MAILIMF_NO_ERROR as libc::c_int {
|
||||
return r;
|
||||
@@ -1188,8 +1188,7 @@ unsafe fn mailimf_mailbox_write_driver(
|
||||
return r;
|
||||
}
|
||||
} else {
|
||||
if (*col as libc::size_t).wrapping_add(strlen((*mb).mb_addr_spec)) >= 72i32 as libc::size_t
|
||||
{
|
||||
if (*col as libc::size_t).wrapping_add(strlen((*mb).addr_spec)) >= 72i32 as libc::size_t {
|
||||
r = mailimf_string_write_driver(
|
||||
do_write,
|
||||
data,
|
||||
@@ -1205,8 +1204,8 @@ unsafe fn mailimf_mailbox_write_driver(
|
||||
do_write,
|
||||
data,
|
||||
col,
|
||||
(*mb).mb_addr_spec,
|
||||
strlen((*mb).mb_addr_spec),
|
||||
(*mb).addr_spec,
|
||||
strlen((*mb).addr_spec),
|
||||
);
|
||||
if r != MAILIMF_NO_ERROR as libc::c_int {
|
||||
return r;
|
||||
|
||||
@@ -847,7 +847,7 @@ impl<'a> MimeParser<'a> {
|
||||
.unwrap_or_else(|| ptr::null_mut());
|
||||
|
||||
if !mb.is_null() {
|
||||
let from_addr_norm = addr_normalize(as_str((*mb).mb_addr_spec));
|
||||
let from_addr_norm = addr_normalize(as_str((*mb).addr_spec));
|
||||
let recipients = mailimf_get_recipients(self.header_root);
|
||||
if recipients.len() == 1 {
|
||||
if recipients.contains(from_addr_norm) {
|
||||
@@ -916,8 +916,8 @@ pub fn mailimf_find_first_addr(mb_list: *const mailimf_mailbox_list) -> Option<S
|
||||
|
||||
for mb in unsafe { &(*mb_list).0 } {
|
||||
let mb = *mb;
|
||||
if !mb.is_null() && !unsafe { (*mb).mb_addr_spec.is_null() } {
|
||||
let addr = unsafe { as_str((*mb).mb_addr_spec) };
|
||||
if !mb.is_null() && !unsafe { (*mb).addr_spec.is_null() } {
|
||||
let addr = unsafe { as_str((*mb).addr_spec) };
|
||||
return Some(addr_normalize(addr).to_string());
|
||||
}
|
||||
}
|
||||
@@ -1272,7 +1272,7 @@ pub fn mailimf_get_recipients(imffields: *mut mailimf_fields) -> HashSet<String>
|
||||
|
||||
fn mailimf_get_recipients_add_addr(recipients: &mut HashSet<String>, mb: *mut mailimf_mailbox) {
|
||||
if !mb.is_null() {
|
||||
let addr_norm = addr_normalize(as_str(unsafe { (*mb).mb_addr_spec }));
|
||||
let addr_norm = addr_normalize(as_str(unsafe { (*mb).addr_spec }));
|
||||
recipients.insert(addr_norm.into());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1868,8 +1868,8 @@ unsafe fn dc_add_or_lookup_contacts_by_address_list(
|
||||
if !mb.is_null() {
|
||||
add_or_lookup_contact_by_addr(
|
||||
context,
|
||||
(*mb).mb_display_name,
|
||||
(*mb).mb_addr_spec,
|
||||
(*mb).display_name,
|
||||
(*mb).addr_spec,
|
||||
origin,
|
||||
ids,
|
||||
check_self,
|
||||
@@ -1906,8 +1906,8 @@ unsafe fn dc_add_or_lookup_contacts_by_mailbox_list(
|
||||
if !mb.is_null() {
|
||||
add_or_lookup_contact_by_addr(
|
||||
context,
|
||||
(*mb).mb_display_name,
|
||||
(*mb).mb_addr_spec,
|
||||
(*mb).display_name,
|
||||
(*mb).addr_spec,
|
||||
origin,
|
||||
ids,
|
||||
check_self,
|
||||
|
||||
Reference in New Issue
Block a user