xref: /plan9/sys/src/libc/port/netmkaddr.c (revision 7dd7cddf99dd7472612f1413b4da293630e6b1bc)
13e12c5d1SDavid du Colombier #include <u.h>
23e12c5d1SDavid du Colombier #include <libc.h>
33e12c5d1SDavid du Colombier #include <ctype.h>
43e12c5d1SDavid du Colombier 
53e12c5d1SDavid du Colombier /*
63e12c5d1SDavid du Colombier  *  make an address, add the defaults
73e12c5d1SDavid du Colombier  */
83e12c5d1SDavid du Colombier char *
netmkaddr(char * linear,char * defnet,char * defsrv)93e12c5d1SDavid du Colombier netmkaddr(char *linear, char *defnet, char *defsrv)
103e12c5d1SDavid du Colombier {
11*7dd7cddfSDavid du Colombier 	static char addr[256];
123e12c5d1SDavid du Colombier 	char *cp;
133e12c5d1SDavid du Colombier 
143e12c5d1SDavid du Colombier 	/*
153e12c5d1SDavid du Colombier 	 *  dump network name
163e12c5d1SDavid du Colombier 	 */
173e12c5d1SDavid du Colombier 	cp = strchr(linear, '!');
183e12c5d1SDavid du Colombier 	if(cp == 0){
193e12c5d1SDavid du Colombier 		if(defnet==0){
203e12c5d1SDavid du Colombier 			if(defsrv)
21*7dd7cddfSDavid du Colombier 				snprint(addr, sizeof(addr), "net!%s!%s",
22*7dd7cddfSDavid du Colombier 					linear, defsrv);
233e12c5d1SDavid du Colombier 			else
24*7dd7cddfSDavid du Colombier 				snprint(addr, sizeof(addr), "net!%s", linear);
25*7dd7cddfSDavid du Colombier 		}
26*7dd7cddfSDavid du Colombier 		else {
273e12c5d1SDavid du Colombier 			if(defsrv)
28*7dd7cddfSDavid du Colombier 				snprint(addr, sizeof(addr), "%s!%s!%s", defnet,
29*7dd7cddfSDavid du Colombier 					linear, defsrv);
303e12c5d1SDavid du Colombier 			else
31*7dd7cddfSDavid du Colombier 				snprint(addr, sizeof(addr), "%s!%s", defnet,
32*7dd7cddfSDavid du Colombier 					linear);
333e12c5d1SDavid du Colombier 		}
343e12c5d1SDavid du Colombier 		return addr;
353e12c5d1SDavid du Colombier 	}
363e12c5d1SDavid du Colombier 
373e12c5d1SDavid du Colombier 	/*
383e12c5d1SDavid du Colombier 	 *  if there is already a service, use it
393e12c5d1SDavid du Colombier 	 */
403e12c5d1SDavid du Colombier 	cp = strchr(cp+1, '!');
413e12c5d1SDavid du Colombier 	if(cp)
423e12c5d1SDavid du Colombier 		return linear;
433e12c5d1SDavid du Colombier 
443e12c5d1SDavid du Colombier 	/*
453e12c5d1SDavid du Colombier 	 *  add default service
463e12c5d1SDavid du Colombier 	 */
473e12c5d1SDavid du Colombier 	if(defsrv == 0)
483e12c5d1SDavid du Colombier 		return linear;
49*7dd7cddfSDavid du Colombier 	snprint(addr, sizeof(addr), "%s!%s", linear, defsrv);
503e12c5d1SDavid du Colombier 
513e12c5d1SDavid du Colombier 	return addr;
523e12c5d1SDavid du Colombier }
53