2 ** Copyright 1998 - 2009 Double Precision, Inc.
3 ** See COPYING for distribution information.
7 ** $Id: rfc822_getaddrs.c,v 1.6 2009/11/08 18:14:47 mrsam Exp $
12 static void cntlen(char c
, void *p
)
18 static void cntlensep(const char *p
, void *ptr
)
20 while (*p
) cntlen(*p
++, ptr
);
23 static void saveaddr(char c
, void *ptr
)
28 static void saveaddrsep(const char *p
, void *ptr
)
30 while (*p
) saveaddr(*p
++, ptr
);
33 char *rfc822_getaddrs(const struct rfc822a
*rfc
)
38 if (rfc822_print(rfc
, &cntlen
, &cntlensep
, &addrbuflen
) < 0)
41 if (!(addrbuf
=malloc(addrbuflen
+1)))
45 if (rfc822_print(rfc
, &saveaddr
, &saveaddrsep
, &ptr
) < 0)
51 addrbuf
[addrbuflen
]=0;
55 static void saveaddrsep_wrap(const char *p
, void *ptr
)
66 char *rfc822_getaddrs_wrap(const struct rfc822a
*rfc
, int w
)
69 char *addrbuf
, *ptr
, *start
, *lastnl
;
71 if (rfc822_print(rfc
, &cntlen
, &cntlensep
, &addrbuflen
) < 0)
74 if (!(addrbuf
=malloc(addrbuflen
+1)))
79 if (rfc822_print(rfc
, &saveaddr
, &saveaddrsep_wrap
, &ptr
) < 0)
85 addrbuf
[addrbuflen
]=0;
87 for (lastnl
=0, start
=ptr
=addrbuf
; *ptr
; )
89 while (*ptr
&& *ptr
!= '\n') ptr
++;
92 if (lastnl
) *lastnl
=' ';