=================================================================== RCS file: /cvsrepo/anoncvs/cvs/src/usr.bin/mail/list.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -r1.6 -r1.7 --- src/usr.bin/mail/list.c 1997/07/14 00:24:28 1.6 +++ src/usr.bin/mail/list.c 1997/07/31 02:36:33 1.7 @@ -1,4 +1,4 @@ -/* $OpenBSD: list.c,v 1.6 1997/07/14 00:24:28 millert Exp $ */ +/* $OpenBSD: list.c,v 1.7 1997/07/31 02:36:33 millert Exp $ */ /* $NetBSD: list.c,v 1.7 1997/07/09 05:23:36 mikel Exp $ */ /* @@ -38,7 +38,7 @@ #if 0 static char sccsid[] = "@(#)list.c 8.4 (Berkeley) 5/1/95"; #else -static char rcsid[] = "$OpenBSD: list.c,v 1.6 1997/07/14 00:24:28 millert Exp $"; +static char rcsid[] = "$OpenBSD: list.c,v 1.7 1997/07/31 02:36:33 millert Exp $"; #endif #endif /* not lint */ @@ -398,8 +398,12 @@ { register char c, *cp, *cp2, quotec; int argn; - char linebuf[BUFSIZ]; + char *linebuf; + size_t linebufsize = BUFSIZ; + if ((linebuf = (char *)malloc(linebufsize)) == NULL) + panic("Out of memory"); + argn = 0; cp = line; for (;;) { @@ -414,6 +418,13 @@ cp2 = linebuf; quotec = '\0'; while ((c = *cp) != '\0') { + /* Alloc more space if necessary */ + if (cp2 - linebuf == linebufsize - 1) { + linebufsize += BUFSIZ; + if (!(linebuf = realloc(linebuf, linebufsize))) + panic("Out of memory"); + cp2 = linebuf + (linebufsize - BUFSIZ) - 1; + } cp++; if (quotec != '\0') { if (c == quotec) @@ -479,6 +490,7 @@ argv[argn++] = savestr(linebuf); } argv[argn] = NULL; + (void)free(linebuf); return(argn); }