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