d9898ee8 |
1 | /* |
ac40fd9e |
2 | ** Copyright 1998 - 2008 Double Precision, Inc. |
d9898ee8 |
3 | ** See COPYING for distribution information. |
4 | */ |
5 | |
6 | /* |
d9898ee8 |
7 | */ |
8 | #include "rfc822.h" |
9 | #include <stdlib.h> |
10 | |
11 | static void cntlen(char c, void *p) |
12 | { |
13 | if (c != '\n') |
14 | ++ *(size_t *)p; |
15 | } |
16 | |
17 | static void saveaddr(char c, void *p) |
18 | { |
19 | if (c != '\n') |
20 | { |
21 | char **cp=(char **)p; |
22 | |
23 | *(*cp)++=c; |
24 | } |
25 | } |
26 | |
27 | char *rfc822_getaddr(const struct rfc822a *rfc, int n) |
28 | { |
8d138742 |
29 | return rfc822_display_addr_tobuf(rfc, n, NULL); |
d9898ee8 |
30 | } |
31 | |
32 | char *rfc822_gettok(const struct rfc822token *t) |
33 | { |
34 | size_t addrbuflen=0; |
35 | char *addrbuf, *ptr; |
36 | |
37 | rfc822tok_print(t, &cntlen, &addrbuflen); |
38 | |
39 | if (!(addrbuf=malloc(addrbuflen+1))) |
40 | return (0); |
41 | |
42 | ptr=addrbuf; |
43 | rfc822tok_print(t, &saveaddr, &ptr); |
44 | addrbuf[addrbuflen]=0; |
45 | return (addrbuf); |
46 | } |