SCCS-vsn: usr.bin/mail/aux.c 5.4
-static char *sccsid = "@(#)aux.c 5.3 (Berkeley) %G%";
+static char *sccsid = "@(#)aux.c 5.4 (Berkeley) %G%";
#endif not lint
#include "rcv.h"
#endif not lint
#include "rcv.h"
- * Skin an arpa net address according to the RFC 733 interpretation
+ * Skin an arpa net address according to the RFC 822 interpretation
* of "host-phrase."
*/
char *
* of "host-phrase."
*/
char *
{
register int c;
register char *cp, *cp2;
{
register int c;
register char *cp, *cp2;
int gotlt, lastsp;
char nbuf[BUFSIZ];
int nesting;
int gotlt, lastsp;
char nbuf[BUFSIZ];
int nesting;
return(name);
gotlt = 0;
lastsp = 0;
return(name);
gotlt = 0;
lastsp = 0;
- for (cp = name, cp2 = nbuf; c = *cp++; ) {
+ bufend = nbuf;
+ for (cp = name, cp2 = bufend; c = *cp++; ) {
+ /*
+ * Start of a "comment".
+ * Ignore it.
+ */
- while (*cp != '\0') {
- switch (*cp++) {
+ while ((c = *cp) != 0) {
+ cp++;
+ switch (c) {
+ case '\\':
+ if (*cp == 0)
+ goto outcm;
+ cp++;
+ break;
case '(':
nesting++;
break;
case '(':
nesting++;
break;
if (nesting <= 0)
break;
}
if (nesting <= 0)
break;
}
+ outcm:
+ lastsp = 0;
+ break;
+
+ case '"':
+ /*
+ * Start of a "quoted-string".
+ * Copy it in its entirety.
+ */
+ while ((c = *cp) != 0) {
+ cp++;
+ switch (c) {
+ case '\\':
+ if ((c = *cp) == 0)
+ goto outqs;
+ cp++;
+ break;
+ case '"':
+ goto outqs;
+ }
+ *cp2++ = c;
+ }
+ outqs:
gotlt++;
lastsp = 0;
break;
case '>':
gotlt++;
lastsp = 0;
break;
case '>':
- if (gotlt)
- goto done;
+ if (gotlt) {
+ gotlt = 0;
+ while (*cp != ',' && *cp != 0)
+ cp++;
+ if (*cp == 0 )
+ goto done;
+ *cp2++ = ',';
+ *cp2++ = ' ';
+ bufend = cp2;
+ break;
+ }