xref: /inferno-os/libkern/netmkaddr.c (revision 37da2899f40661e3e9631e497da8dc59b971cbd0)
1*37da2899SCharles.Forsyth #include <lib9.h>
2*37da2899SCharles.Forsyth 
3*37da2899SCharles.Forsyth /*
4*37da2899SCharles.Forsyth  *  make an address, add the defaults
5*37da2899SCharles.Forsyth  */
6*37da2899SCharles.Forsyth char *
netmkaddr(char * linear,char * defnet,char * defsrv)7*37da2899SCharles.Forsyth netmkaddr(char *linear, char *defnet, char *defsrv)
8*37da2899SCharles.Forsyth {
9*37da2899SCharles.Forsyth 	static char addr[4*(NAMELEN+1)];
10*37da2899SCharles.Forsyth 	char *cp;
11*37da2899SCharles.Forsyth 
12*37da2899SCharles.Forsyth 	/*
13*37da2899SCharles.Forsyth 	 *  dump network name
14*37da2899SCharles.Forsyth 	 */
15*37da2899SCharles.Forsyth 	cp = strchr(linear, '!');
16*37da2899SCharles.Forsyth 	if(cp == 0){
17*37da2899SCharles.Forsyth 		if(defnet==0){
18*37da2899SCharles.Forsyth 			if(defsrv)
19*37da2899SCharles.Forsyth 				sprint(addr, "net!%.*s!%.*s", 2*NAMELEN, linear,
20*37da2899SCharles.Forsyth 					NAMELEN, defsrv);
21*37da2899SCharles.Forsyth 			else
22*37da2899SCharles.Forsyth 				sprint(addr, "net!%.*s", 2*NAMELEN, linear);
23*37da2899SCharles.Forsyth 		} else {
24*37da2899SCharles.Forsyth 			if(defsrv)
25*37da2899SCharles.Forsyth 				sprint(addr, "%.*s!%.*s!%.*s", NAMELEN, defnet,
26*37da2899SCharles.Forsyth 					2*NAMELEN, linear, NAMELEN, defsrv);
27*37da2899SCharles.Forsyth 			else
28*37da2899SCharles.Forsyth 				sprint(addr, "%.*s!%.*s", NAMELEN, defnet,
29*37da2899SCharles.Forsyth 					2*NAMELEN, linear);
30*37da2899SCharles.Forsyth 		}
31*37da2899SCharles.Forsyth 		return addr;
32*37da2899SCharles.Forsyth 	}
33*37da2899SCharles.Forsyth 
34*37da2899SCharles.Forsyth 	/*
35*37da2899SCharles.Forsyth 	 *  if there is already a service, use it
36*37da2899SCharles.Forsyth 	 */
37*37da2899SCharles.Forsyth 	cp = strchr(cp+1, '!');
38*37da2899SCharles.Forsyth 	if(cp)
39*37da2899SCharles.Forsyth 		return linear;
40*37da2899SCharles.Forsyth 
41*37da2899SCharles.Forsyth 	/*
42*37da2899SCharles.Forsyth 	 *  add default service
43*37da2899SCharles.Forsyth 	 */
44*37da2899SCharles.Forsyth 	if(defsrv == 0)
45*37da2899SCharles.Forsyth 		return linear;
46*37da2899SCharles.Forsyth 	sprint(addr, "%.*s!%.*s", 3*NAMELEN, linear,
47*37da2899SCharles.Forsyth 		NAMELEN, defsrv);
48*37da2899SCharles.Forsyth 
49*37da2899SCharles.Forsyth 	return addr;
50*37da2899SCharles.Forsyth }
51