2 ** Copyright 1998 - 1999 Double Precision, Inc.
3 ** See COPYING for distribution information.
7 ** $Id: rfc822_getaddrs.c,v 1.5 1999/12/06 13:29:49 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 rfc822_print(rfc
, &cntlen
, &cntlensep
, &addrbuflen
);
39 if (!(addrbuf
=malloc(addrbuflen
+1)))
43 rfc822_print(rfc
, &saveaddr
, &saveaddrsep
, &ptr
);
44 addrbuf
[addrbuflen
]=0;
48 static void saveaddrsep_wrap(const char *p
, void *ptr
)
59 char *rfc822_getaddrs_wrap(const struct rfc822a
*rfc
, int w
)
62 char *addrbuf
, *ptr
, *start
, *lastnl
;
64 rfc822_print(rfc
, &cntlen
, &cntlensep
, &addrbuflen
);
65 if (!(addrbuf
=malloc(addrbuflen
+1)))
69 rfc822_print(rfc
, &saveaddr
, &saveaddrsep_wrap
, &ptr
);
70 addrbuf
[addrbuflen
]=0;
72 for (lastnl
=0, start
=ptr
=addrbuf
; *ptr
; )
74 while (*ptr
&& *ptr
!= '\n') ptr
++;
77 if (lastnl
) *lastnl
=' ';