Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
John McEleney
/
mailutils
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
Commit
77b342a6
...
77b342a655ce7a8fa59408cac07d0a5a2f32ef39
authored
2003-02-22 22:35:25 +0000
by
Sergey Poznyakoff
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
Moved .*_to_message stuff to mh_stream.c
1 parent
5b8f8d5a
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
0 additions
and
170 deletions
mh/mh_init.c
mh/mh_init.c
View file @
77b342a
...
...
@@ -544,176 +544,6 @@ mh_file_copy (const char *from, const char *to)
return
rc
;
}
int
_mh_delim
(
char
*
str
)
{
if
(
str
[
0
]
==
'-'
)
{
for
(;
*
str
==
'-'
;
str
++
)
;
for
(;
*
str
==
' '
||
*
str
==
'\t'
;
str
++
)
;
}
return
str
[
0
]
==
'\n'
;
}
char
*
skipws
(
char
*
p
,
size_t
off
)
{
int
len
;
for
(
p
+=
off
;
*
p
&&
isspace
(
*
p
);
p
++
)
;
len
=
strlen
(
p
);
if
(
len
>
0
&&
p
[
len
-
1
]
==
'\n'
)
p
[
len
-
1
]
=
0
;
return
p
;
}
struct
msg_envelope
{
char
*
from
;
char
*
date
;
};
static
int
restore_envelope
(
stream_t
str
,
struct
msg_envelope
**
pmenv
)
{
size_t
offset
=
0
;
char
*
from
=
NULL
;
char
*
env_from
=
NULL
;
char
*
env_date
=
NULL
;
int
rc
;
char
buffer
[
80
];
size_t
len
;
while
((
rc
=
stream_readline
(
str
,
buffer
,
sizeof
buffer
,
offset
,
&
len
))
==
0
&&
len
>
0
)
{
if
(
_mh_delim
(
buffer
))
break
;
buffer
[
len
]
=
0
;
offset
+=
len
;
if
(
strncasecmp
(
buffer
,
MU_HEADER_FROM
,
sizeof
(
MU_HEADER_FROM
)
-
1
)
==
0
)
from
=
strdup
(
skipws
(
buffer
,
sizeof
(
MU_HEADER_FROM
)));
else
if
(
strncasecmp
(
buffer
,
MU_HEADER_ENV_SENDER
,
sizeof
(
MU_HEADER_ENV_SENDER
)
-
1
)
==
0
)
env_from
=
strdup
(
skipws
(
buffer
,
sizeof
(
MU_HEADER_ENV_SENDER
)));
else
if
(
strncasecmp
(
buffer
,
MU_HEADER_ENV_DATE
,
sizeof
(
MU_HEADER_ENV_DATE
)
-
1
)
==
0
)
env_date
=
strdup
(
skipws
(
buffer
,
sizeof
(
MU_HEADER_ENV_DATE
)));
}
if
(
!
env_from
)
{
if
(
from
)
{
address_t
addr
;
address_create
(
&
addr
,
from
);
if
(
!
addr
||
address_aget_email
(
addr
,
1
,
&
env_from
))
env_from
=
strdup
(
"GNU-MH"
);
address_destroy
(
&
addr
);
}
else
env_from
=
strdup
(
"GNU-MH"
);
}
if
(
!
env_date
)
{
struct
tm
*
tm
;
time_t
t
;
char
date
[
80
];
time
(
&
t
);
tm
=
gmtime
(
&
t
);
strftime
(
date
,
sizeof
(
date
),
"%a %b %e %H:%M:%S %Y"
,
tm
);
env_date
=
strdup
(
date
);
}
*
pmenv
=
xmalloc
(
sizeof
(
**
pmenv
)
+
strlen
(
env_from
)
+
strlen
(
env_date
)
+
2
);
(
*
pmenv
)
->
from
=
(
char
*
)
(
*
pmenv
+
1
);
(
*
pmenv
)
->
date
=
(
char
*
)
((
*
pmenv
)
->
from
+
strlen
(
env_from
)
+
1
);
strcpy
((
*
pmenv
)
->
from
,
env_from
);
strcpy
((
*
pmenv
)
->
date
,
env_date
);
free
(
env_from
);
free
(
env_date
);
free
(
from
);
return
0
;
}
static
int
_env_msg_date
(
envelope_t
envelope
,
char
*
buf
,
size_t
len
,
size_t
*
pnwrite
)
{
message_t
msg
=
envelope_get_owner
(
envelope
);
struct
msg_envelope
*
env
=
message_get_owner
(
msg
);
if
(
!
env
||
!
env
->
date
)
return
EINVAL
;
strncpy
(
buf
,
env
->
date
,
len
);
buf
[
len
-
1
]
=
0
;
return
0
;
}
static
int
_env_msg_sender
(
envelope_t
envelope
,
char
*
buf
,
size_t
len
,
size_t
*
pnwrite
)
{
message_t
msg
=
envelope_get_owner
(
envelope
);
struct
msg_envelope
*
env
=
message_get_owner
(
msg
);
if
(
!
env
||
!
env
->
from
)
return
EINVAL
;
strncpy
(
buf
,
env
->
from
,
len
);
buf
[
len
-
1
]
=
0
;
return
0
;
}
message_t
mh_stream_to_message
(
stream_t
instream
)
{
struct
msg_envelope
*
mp
;
envelope_t
env
;
message_t
msg
;
stream_t
draftstream
;
int
rc
;
if
((
rc
=
mhdraft_stream_create
(
&
draftstream
,
instream
,
0
)))
{
mh_error
(
_
(
"cannot create draft message stream: %s"
),
mu_strerror
(
rc
));
return
NULL
;
}
if
((
rc
=
stream_open
(
draftstream
)))
{
mh_error
(
_
(
"cannot open draft message stream: %s"
),
mu_strerror
(
rc
));
stream_destroy
(
&
draftstream
,
stream_get_owner
(
draftstream
));
return
NULL
;
}
restore_envelope
(
instream
,
&
mp
);
if
(
message_create
(
&
msg
,
mp
))
return
NULL
;
message_set_stream
(
msg
,
draftstream
,
mp
);
if
(
envelope_create
(
&
env
,
msg
))
return
NULL
;
envelope_set_date
(
env
,
_env_msg_date
,
msg
);
envelope_set_sender
(
env
,
_env_msg_sender
,
msg
);
message_set_envelope
(
msg
,
env
,
mp
);
return
msg
;
}
message_t
mh_file_to_message
(
char
*
folder
,
char
*
file_name
)
{
...
...
Please
register
or
sign in
to post a comment