V10/cmd/upas/smtp/from822addr.c
#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);
}