2 ** Copyright 1998 - 2009 Double Precision, Inc.
3 ** See COPYING for distribution information.
11 static void cntlen(char c
, void *p
)
17 static void cntlensep(const char *p
, void *ptr
)
19 while (*p
) cntlen(*p
++, ptr
);
22 static void saveaddr(char c
, void *ptr
)
27 static void saveaddrsep(const char *p
, void *ptr
)
29 while (*p
) saveaddr(*p
++, ptr
);
32 char *rfc822_getaddrs(const struct rfc822a
*rfc
)
37 if (rfc822_print(rfc
, &cntlen
, &cntlensep
, &addrbuflen
) < 0)
40 if (!(addrbuf
=malloc(addrbuflen
+1)))
44 if (rfc822_print(rfc
, &saveaddr
, &saveaddrsep
, &ptr
) < 0)
50 addrbuf
[addrbuflen
]=0;
54 static void saveaddrsep_wrap(const char *p
, void *ptr
)
65 char *rfc822_getaddrs_wrap(const struct rfc822a
*rfc
, int w
)
68 char *addrbuf
, *ptr
, *start
, *lastnl
;
70 if (rfc822_print(rfc
, &cntlen
, &cntlensep
, &addrbuflen
) < 0)
73 if (!(addrbuf
=malloc(addrbuflen
+1)))
78 if (rfc822_print(rfc
, &saveaddr
, &saveaddrsep_wrap
, &ptr
) < 0)
84 addrbuf
[addrbuflen
]=0;
86 for (lastnl
=0, start
=ptr
=addrbuf
; *ptr
; )
88 while (*ptr
&& *ptr
!= '\n') ptr
++;
91 if (lastnl
) *lastnl
=' ';