V10/cmd/upas/smtp/from822addr.c

Compare this file to the similar file:
Show the results in this format:

#include <stdio.h>
#include "string.h"


/*
 *	convert domain to `bang' format. 
 *	   @x,@y:d%c%b@a ->	x!y!a!b!c!d
 *	   d%c%b@a ->	a!b!c!d
 *	   c!d%b@a ->	a!b!uucp!c!d
 */
extern char *
convertaddr(from)
char *from;
{
	static string *buf;
	char *sp, *ep;
	int end;
	int elems=0;

	if(!buf)
		buf = s_new();
	s_restart(buf);

	/*
	 * parse leading @a,@b,@c:
	 */
	while(*from=='@'){
		/* find end of string */
		for(ep= ++from; *ep!=':' && *ep!=',' && *ep!='\0'; ep++)
			;
		end = *ep;
		*ep = '\0';
		s_append(buf, from);
		s_append(buf, "!");
		elems++;
		from = end ? ep+1 : ep;
	}

	/*
	 *  parse the rest (whatever it may be)
	 */
	for (sp = from + strlen(from); sp >= from; sp--) {
		if (*sp == '@') {
			/* hack to get rid of forwarding crap */
			s_append(buf, sp+1);
			s_append(buf, "!");
			elems++;
			*sp = '\0';
		}
	}

	/*
	 *  if the from address was a '!' format address, remember that
	 */
	if(elems && (sp=strchr(from, '!')) && (ep=strchr(from, '.')) && ep<sp)
		s_append(buf, "uucp!");
	s_append(buf, from);

	return s_to_c(buf);
}