things compile

This commit is contained in:
dignifiedquire
2019-09-29 09:06:32 -06:00
parent 475ad0f93a
commit 416a1751a2
11 changed files with 384 additions and 641 deletions

View File

@@ -3833,26 +3833,21 @@ pub unsafe fn mailimf_references_parse(
} else {
r = mailimf_unstrict_crlf_parse(message, length, &mut cur_token);
if r != MAILIMF_NO_ERROR as libc::c_int {
res = r
} else {
// references = mailimf_references_new(msg_id_list);
panic!("implement me correctly");
if references.is_null() {
res = MAILIMF_ERROR_MEMORY as libc::c_int
} else {
*result = references;
*indx = cur_token;
return MAILIMF_NO_ERROR as libc::c_int;
}
}
res = r;
for el in &msg_id_list {
mailimf_msg_id_free(*el);
for el in &msg_id_list {
mailimf_msg_id_free(*el);
}
} else {
references = mailimf_references_new(msg_id_list);
*result = references;
*indx = cur_token;
return MAILIMF_NO_ERROR as libc::c_int;
}
}
}
}
return res;
res
}
pub unsafe fn mailimf_msg_id_list_parse(
@@ -4233,15 +4228,9 @@ unsafe fn mailimf_in_reply_to_parse(
if r != MAILIMF_NO_ERROR as libc::c_int {
res = r
} else {
// in_reply_to = mailimf_in_reply_to_new(msg_id_list);
panic!("implement me correctly");
if in_reply_to.is_null() {
res = MAILIMF_ERROR_MEMORY as libc::c_int
} else {
*result = in_reply_to;
*indx = cur_token;
return MAILIMF_NO_ERROR as libc::c_int;
}
*result = mailimf_in_reply_to_new(msg_id_list);
*indx = cur_token;
return MAILIMF_NO_ERROR as libc::c_int;
}
for el in &msg_id_list {
mailimf_msg_id_free(*el);
@@ -4883,18 +4872,16 @@ pub unsafe fn mailimf_envelope_fields_parse(
current_block = 894413572976700158;
break;
}
match current_block {
2719512138335094285 => {
*result = mailimf_fields_new(list);
*indx = cur_token;
return MAILIMF_NO_ERROR as libc::c_int;
}
_ => {}
}
}
}
}
if current_block == 2719512138335094285 {
*result = mailimf_fields_new(list);
*indx = cur_token;
return MAILIMF_NO_ERROR as libc::c_int;
}
res
}

View File

@@ -165,6 +165,15 @@ pub enum mailimf_field {
OptionalField(*mut mailimf_optional_field),
}
impl mailimf_field {
pub fn is_optional_field(&self) -> bool {
match self {
mailimf_field::OptionalField(_) => true,
_ => false,
}
}
}
impl Drop for mailimf_field {
fn drop(&mut self) {
use mailimf_field::*;
@@ -192,7 +201,6 @@ impl Drop for mailimf_field {
Comments(c) => mailimf_comments_free(*c),
Keywords(k) => mailimf_keywords_free(*k),
OptionalField(o) => mailimf_optional_field_free(*o),
_ => {}
}
}
}
@@ -241,26 +249,31 @@ pub struct mailimf_comments {
pub struct mailimf_subject {
pub sbj_value: *mut libc::c_char,
}
/*
mailimf_references is the parsed References field
- msg_id_list is the list of message identifiers
*/
#[derive(Copy, Clone)]
#[repr(C)]
pub struct mailimf_references {
pub mid_list: *mut clist,
}
/*
mailimf_in_reply_to is the parsed In-Reply-To field
/// List of parsed references.
#[derive(Debug, Clone)]
pub struct mailimf_references(pub Vec<*mut libc::c_char>);
- mid_list is the list of message identifers
*/
#[derive(Copy, Clone)]
#[repr(C)]
pub struct mailimf_in_reply_to {
pub mid_list: *mut clist,
impl Drop for mailimf_references {
fn drop(&mut self) {
for el in &self.0 {
unsafe { mailimf_msg_id_free(*el) };
}
}
}
/// The parsed In-Reply-To field.
#[derive(Debug, Clone)]
pub struct mailimf_in_reply_to(pub Vec<*mut libc::c_char>);
impl Drop for mailimf_in_reply_to {
fn drop(&mut self) {
for el in &self.0 {
unsafe { mailimf_msg_id_free(*el) };
}
}
}
/*
mailimf_message_id is the parsed Message-ID field
@@ -649,34 +662,25 @@ pub unsafe fn mailimf_subject_free(mut subject: *mut mailimf_subject) {
mailimf_unstructured_free((*subject).sbj_value);
free(subject as *mut libc::c_void);
}
#[no_mangle]
pub unsafe fn mailimf_references_free(mut references: *mut mailimf_references) {
clist_foreach(
(*references).mid_list,
::std::mem::transmute::<Option<unsafe fn(_: *mut libc::c_char) -> ()>, clist_func>(Some(
mailimf_msg_id_free,
)),
0 as *mut libc::c_void,
);
clist_free((*references).mid_list);
free(references as *mut libc::c_void);
pub unsafe fn mailimf_references_free(references: *mut mailimf_references) {
if references.is_null() {
return;
}
let _ = Box::from_raw(references);
}
#[no_mangle]
pub unsafe fn mailimf_msg_id_free(mut msg_id: *mut libc::c_char) {
free(msg_id as *mut libc::c_void);
}
#[no_mangle]
pub unsafe fn mailimf_in_reply_to_free(mut in_reply_to: *mut mailimf_in_reply_to) {
clist_foreach(
(*in_reply_to).mid_list,
::std::mem::transmute::<Option<unsafe fn(_: *mut libc::c_char) -> ()>, clist_func>(Some(
mailimf_msg_id_free,
)),
0 as *mut libc::c_void,
);
clist_free((*in_reply_to).mid_list);
free(in_reply_to as *mut libc::c_void);
pub unsafe fn mailimf_in_reply_to_free(in_reply_to: *mut mailimf_in_reply_to) {
if in_reply_to.is_null() {
return;
}
}
#[no_mangle]
pub unsafe fn mailimf_message_id_free(mut message_id: *mut mailimf_message_id) {
if !(*message_id).mid_value.is_null() {
@@ -839,29 +843,17 @@ pub unsafe fn mailimf_message_id_new(mut mid_value: *mut libc::c_char) -> *mut m
(*message_id).mid_value = mid_value;
return message_id;
}
#[no_mangle]
pub unsafe fn mailimf_in_reply_to_new(mut mid_list: *mut clist) -> *mut mailimf_in_reply_to {
let mut in_reply_to: *mut mailimf_in_reply_to = 0 as *mut mailimf_in_reply_to;
in_reply_to = malloc(::std::mem::size_of::<mailimf_in_reply_to>() as libc::size_t)
as *mut mailimf_in_reply_to;
if in_reply_to.is_null() {
return 0 as *mut mailimf_in_reply_to;
}
(*in_reply_to).mid_list = mid_list;
return in_reply_to;
pub unsafe fn mailimf_in_reply_to_new(ids: Vec<*mut libc::c_char>) -> *mut mailimf_in_reply_to {
let irt = mailimf_in_reply_to(ids);
Box::into_raw(Box::new(irt))
}
/* != NULL */
#[no_mangle]
pub unsafe fn mailimf_references_new(mid_list: *mut clist) -> *mut mailimf_references {
let mut ref_0: *mut mailimf_references = 0 as *mut mailimf_references;
ref_0 = malloc(::std::mem::size_of::<mailimf_references>() as libc::size_t)
as *mut mailimf_references;
if ref_0.is_null() {
return 0 as *mut mailimf_references;
}
(*ref_0).mid_list = mid_list;
return ref_0;
pub unsafe fn mailimf_references_new(ids: Vec<*mut libc::c_char>) -> *mut mailimf_references {
let list = mailimf_references(ids);
Box::into_raw(Box::new(list))
}
#[no_mangle]
pub unsafe fn mailimf_subject_new(mut sbj_value: *mut libc::c_char) -> *mut mailimf_subject {
let mut subject: *mut mailimf_subject = 0 as *mut mailimf_subject;

View File

@@ -588,7 +588,7 @@ unsafe fn mailimf_references_write_driver(
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
r = mailimf_msg_id_list_write_driver(do_write, data, col, (*references).mid_list);
r = mailimf_msg_id_list_write_driver(do_write, data, col, &(*references).0);
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
@@ -605,28 +605,19 @@ unsafe fn mailimf_references_write_driver(
return MAILIMF_NO_ERROR as libc::c_int;
}
unsafe fn mailimf_msg_id_list_write_driver(
mut do_write: Option<
do_write: Option<
unsafe fn(_: *mut libc::c_void, _: *const libc::c_char, _: size_t) -> libc::c_int,
>,
mut data: *mut libc::c_void,
mut col: *mut libc::c_int,
mut mid_list: *mut clist,
data: *mut libc::c_void,
col: *mut libc::c_int,
mid_list: &Vec<*mut libc::c_char>,
) -> libc::c_int {
let mut cur: *mut clistiter = 0 as *mut clistiter;
let mut r: libc::c_int = 0;
let mut first: libc::c_int = 0;
first = 1i32;
cur = (*mid_list).first;
while !cur.is_null() {
let mut msgid: *mut libc::c_char = 0 as *mut libc::c_char;
let mut len: size_t = 0;
msgid = (if !cur.is_null() {
(*cur).data
} else {
0 as *mut libc::c_void
}) as *mut libc::c_char;
len = strlen(msgid);
if 0 == first {
let mut r = 0;
let mut first = true;
for msgid in mid_list {
let len = strlen(*msgid);
if !first {
if *col > 1i32 {
if (*col as libc::size_t).wrapping_add(len) >= 72i32 as libc::size_t {
r = mailimf_string_write_driver(
@@ -639,11 +630,11 @@ unsafe fn mailimf_msg_id_list_write_driver(
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
first = 1i32
first = true;
}
}
}
if 0 == first {
if !first {
r = mailimf_string_write_driver(
do_write,
data,
@@ -655,7 +646,7 @@ unsafe fn mailimf_msg_id_list_write_driver(
return r;
}
} else {
first = 0i32
first = false;
}
r = mailimf_string_write_driver(
do_write,
@@ -667,7 +658,7 @@ unsafe fn mailimf_msg_id_list_write_driver(
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
r = mailimf_string_write_driver(do_write, data, col, msgid, len);
r = mailimf_string_write_driver(do_write, data, col, *msgid, len);
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
@@ -681,14 +672,11 @@ unsafe fn mailimf_msg_id_list_write_driver(
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
cur = if !cur.is_null() {
(*cur).next
} else {
0 as *mut clistcell
}
}
return MAILIMF_NO_ERROR as libc::c_int;
MAILIMF_NO_ERROR as libc::c_int
}
unsafe fn mailimf_in_reply_to_write_driver(
mut do_write: Option<
unsafe fn(_: *mut libc::c_void, _: *const libc::c_char, _: size_t) -> libc::c_int,
@@ -708,7 +696,7 @@ unsafe fn mailimf_in_reply_to_write_driver(
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}
r = mailimf_msg_id_list_write_driver(do_write, data, col, (*in_reply_to).mid_list);
r = mailimf_msg_id_list_write_driver(do_write, data, col, &(*in_reply_to).0);
if r != MAILIMF_NO_ERROR as libc::c_int {
return r;
}

View File

@@ -349,17 +349,17 @@ pub unsafe fn mailimf_address_list_add(
other code will be returned otherwise
*/
pub unsafe fn mailimf_fields_new_with_data_all(
mut date: *mut mailimf_date_time,
mut from: *mut mailimf_mailbox_list,
mut sender: *mut mailimf_mailbox,
mut reply_to: *mut mailimf_address_list,
mut to: *mut mailimf_address_list,
mut cc: *mut mailimf_address_list,
mut bcc: *mut mailimf_address_list,
mut message_id: *mut libc::c_char,
mut in_reply_to: *mut clist,
mut references: *mut clist,
mut subject: *mut libc::c_char,
date: *mut mailimf_date_time,
from: *mut mailimf_mailbox_list,
sender: *mut mailimf_mailbox,
reply_to: *mut mailimf_address_list,
to: *mut mailimf_address_list,
cc: *mut mailimf_address_list,
bcc: *mut mailimf_address_list,
message_id: *mut libc::c_char,
in_reply_to: Vec<*mut libc::c_char>,
references: Vec<*mut libc::c_char>,
subject: *mut libc::c_char,
) -> *mut mailimf_fields {
let mut fields: *mut mailimf_fields = 0 as *mut mailimf_fields;
let mut r: libc::c_int = 0;
@@ -406,18 +406,18 @@ pub unsafe fn mailimf_fields_new_with_data_all(
other code will be returned otherwise
*/
pub unsafe fn mailimf_fields_add_data(
mut fields: *mut mailimf_fields,
mut date: *mut mailimf_date_time,
mut from: *mut mailimf_mailbox_list,
mut sender: *mut mailimf_mailbox,
mut reply_to: *mut mailimf_address_list,
mut to: *mut mailimf_address_list,
mut cc: *mut mailimf_address_list,
mut bcc: *mut mailimf_address_list,
mut msg_id: *mut libc::c_char,
mut in_reply_to: *mut clist,
mut references: *mut clist,
mut subject: *mut libc::c_char,
fields: *mut mailimf_fields,
date: *mut mailimf_date_time,
from: *mut mailimf_mailbox_list,
sender: *mut mailimf_mailbox,
reply_to: *mut mailimf_address_list,
to: *mut mailimf_address_list,
cc: *mut mailimf_address_list,
bcc: *mut mailimf_address_list,
msg_id: *mut libc::c_char,
in_reply_to: Vec<*mut libc::c_char>,
references: Vec<*mut libc::c_char>,
subject: *mut libc::c_char,
) -> libc::c_int {
let mut current_block: u64;
let mut imf_date: *mut mailimf_orig_date = 0 as *mut mailimf_orig_date;
@@ -579,63 +579,35 @@ pub unsafe fn mailimf_fields_add_data(
13813460800808168376 => {}
16539016819803454162 => {}
_ => {
if !in_reply_to.is_null() {
imf_in_reply_to =
mailimf_in_reply_to_new(
in_reply_to,
);
if imf_in_reply_to.is_null()
{
current_block
=
16539016819803454162;
} else {
let field
=
mailimf_field::InReplyTo(
imf_in_reply_to,
);
mailimf_fields_add(
fields, field,
);
current_block
=
15587532755333643506;
}
} else {
current_block =
15587532755333643506;
}
imf_in_reply_to =
mailimf_in_reply_to_new(
in_reply_to,
);
let field =
mailimf_field::InReplyTo(
imf_in_reply_to,
);
mailimf_fields_add(
fields, field,
);
current_block =
15587532755333643506;
match current_block {
13813460800808168376 => {}
16539016819803454162 => {}
_ => {
if !references.is_null()
{
imf_references
=
mailimf_references_new(references);
if imf_references
.is_null()
{
current_block
=
16539016819803454162;
} else {
let field
=
mailimf_field::References(
imf_references);
mailimf_fields_add(fields, field);
current_block
=
7301440000599063274;
}
} else {
current_block
=
7301440000599063274;
}
imf_references
=
mailimf_references_new(references);
let field
=
mailimf_field::References(
imf_references);
mailimf_fields_add(
fields, field,
);
current_block =
7301440000599063274;
match current_block
{
13813460800808168376
@@ -746,11 +718,9 @@ unsafe fn detach_free_fields(
mailimf_reply_to_free(reply_to);
}
if !in_reply_to.is_null() {
(*in_reply_to).mid_list = 0 as *mut clist;
mailimf_in_reply_to_free(in_reply_to);
}
if !references.is_null() {
(*references).mid_list = 0 as *mut clist;
mailimf_references_free(references);
}
if !subject.is_null() {