/*
-** Copyright 1998 - 1999 Double Precision, Inc.
+** Copyright 1998 - 2009 Double Precision, Inc.
** See COPYING for distribution information.
*/
/*
-** $Id: rfc822_getaddrs.c,v 1.5 1999/12/06 13:29:49 mrsam Exp $
+** $Id: rfc822_getaddrs.c,v 1.6 2009/11/08 18:14:47 mrsam Exp $
*/
#include "rfc822.h"
#include <stdlib.h>
char *rfc822_getaddrs(const struct rfc822a *rfc)
{
-size_t addrbuflen=0;
-char *addrbuf, *ptr;
+ size_t addrbuflen=0;
+ char *addrbuf, *ptr;
+
+ if (rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen) < 0)
+ return NULL;
- rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen);
if (!(addrbuf=malloc(addrbuflen+1)))
return (0);
ptr=addrbuf;
- rfc822_print(rfc, &saveaddr, &saveaddrsep, &ptr);
+ if (rfc822_print(rfc, &saveaddr, &saveaddrsep, &ptr) < 0)
+ {
+ free(addrbuf);
+ return NULL;
+ }
+
addrbuf[addrbuflen]=0;
return (addrbuf);
}
char *rfc822_getaddrs_wrap(const struct rfc822a *rfc, int w)
{
-size_t addrbuflen=0;
-char *addrbuf, *ptr, *start, *lastnl;
+ size_t addrbuflen=0;
+ char *addrbuf, *ptr, *start, *lastnl;
+
+ if (rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen) < 0)
+ return NULL;
- rfc822_print(rfc, &cntlen, &cntlensep, &addrbuflen);
if (!(addrbuf=malloc(addrbuflen+1)))
return (0);
ptr=addrbuf;
- rfc822_print(rfc, &saveaddr, &saveaddrsep_wrap, &ptr);
+
+ if (rfc822_print(rfc, &saveaddr, &saveaddrsep_wrap, &ptr) < 0)
+ {
+ free(addrbuf);
+ return NULL;
+ }
+
addrbuf[addrbuflen]=0;
for (lastnl=0, start=ptr=addrbuf; *ptr; )