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