Blame


1 fd04aace 2003-11-23 devnull #include <u.h>
2 fd04aace 2003-11-23 devnull #include <libc.h>
3 fd04aace 2003-11-23 devnull #include <ctype.h>
4 fd04aace 2003-11-23 devnull
5 fd04aace 2003-11-23 devnull /*
6 fd04aace 2003-11-23 devnull * make an address, add the defaults
7 fd04aace 2003-11-23 devnull */
8 fd04aace 2003-11-23 devnull char *
9 fd04aace 2003-11-23 devnull netmkaddr(char *linear, char *defnet, char *defsrv)
10 fd04aace 2003-11-23 devnull {
11 fd04aace 2003-11-23 devnull static char addr[256];
12 fd04aace 2003-11-23 devnull char *cp;
13 fd04aace 2003-11-23 devnull
14 fd04aace 2003-11-23 devnull /*
15 fd04aace 2003-11-23 devnull * dump network name
16 fd04aace 2003-11-23 devnull */
17 fd04aace 2003-11-23 devnull cp = strchr(linear, '!');
18 fd04aace 2003-11-23 devnull if(cp == 0){
19 6215fd56 2006-07-23 devnull if(defnet == 0)
20 6215fd56 2006-07-23 devnull defnet = "net";
21 6215fd56 2006-07-23 devnull /* allow unix sockets to omit unix! prefix */
22 6215fd56 2006-07-23 devnull if(access(linear, 0) >= 0){
23 6215fd56 2006-07-23 devnull snprint(addr, sizeof(addr), "unix!%s", linear);
24 6215fd56 2006-07-23 devnull return addr;
25 fd04aace 2003-11-23 devnull }
26 6215fd56 2006-07-23 devnull /* allow host:service in deference to Unix convention */
27 6215fd56 2006-07-23 devnull if((cp = strchr(linear, ':')) != nil){
28 fa325e9b 2020-01-10 cross snprint(addr, sizeof(addr), "%s!%.*s!%s",
29 6215fd56 2006-07-23 devnull defnet, utfnlen(linear, cp-linear),
30 6215fd56 2006-07-23 devnull linear, cp+1);
31 6215fd56 2006-07-23 devnull return addr;
32 fd04aace 2003-11-23 devnull }
33 6215fd56 2006-07-23 devnull if(defsrv)
34 6215fd56 2006-07-23 devnull snprint(addr, sizeof(addr), "%s!%s!%s",
35 6215fd56 2006-07-23 devnull defnet, linear, defsrv);
36 6215fd56 2006-07-23 devnull else
37 6215fd56 2006-07-23 devnull snprint(addr, sizeof(addr), "%s!%s", defnet, linear);
38 fd04aace 2003-11-23 devnull return addr;
39 fd04aace 2003-11-23 devnull }
40 fd04aace 2003-11-23 devnull
41 fd04aace 2003-11-23 devnull /*
42 fd04aace 2003-11-23 devnull * if there is already a service, use it
43 fd04aace 2003-11-23 devnull */
44 fd04aace 2003-11-23 devnull cp = strchr(cp+1, '!');
45 fd04aace 2003-11-23 devnull if(cp)
46 fd04aace 2003-11-23 devnull return linear;
47 fd04aace 2003-11-23 devnull
48 fd04aace 2003-11-23 devnull /*
49 e082105c 2008-06-11 rsc * if the network is unix, no service
50 e082105c 2008-06-11 rsc */
51 e082105c 2008-06-11 rsc if(strncmp(linear, "unix!", 5) == 0)
52 e082105c 2008-06-11 rsc return linear;
53 e082105c 2008-06-11 rsc
54 e082105c 2008-06-11 rsc /*
55 fd04aace 2003-11-23 devnull * add default service
56 fd04aace 2003-11-23 devnull */
57 fd04aace 2003-11-23 devnull if(defsrv == 0)
58 fd04aace 2003-11-23 devnull return linear;
59 fd04aace 2003-11-23 devnull
60 e082105c 2008-06-11 rsc snprint(addr, sizeof(addr), "%s!%s", linear, defsrv);
61 fd04aace 2003-11-23 devnull return addr;
62 fd04aace 2003-11-23 devnull }