| #include <u.h> |
| #include <libc.h> |
| #include <ctype.h> |
| |
| /* |
| * make an address, add the defaults |
| */ |
| char * |
| netmkaddr(char *linear, char *defnet, char *defsrv) |
| { |
| static char addr[256]; |
| char *cp; |
| |
| /* |
| * dump network name |
| */ |
| cp = strchr(linear, '!'); |
| if(cp == 0){ |
| if(defnet == 0) |
| defnet = "net"; |
| /* allow unix sockets to omit unix! prefix */ |
| if(access(linear, 0) >= 0){ |
| snprint(addr, sizeof(addr), "unix!%s", linear); |
| return addr; |
| } |
| /* allow host:service in deference to Unix convention */ |
| if((cp = strchr(linear, ':')) != nil){ |
| snprint(addr, sizeof(addr), "%s!%.*s!%s", |
| defnet, utfnlen(linear, cp-linear), |
| linear, cp+1); |
| return addr; |
| } |
| if(defsrv) |
| snprint(addr, sizeof(addr), "%s!%s!%s", |
| defnet, linear, defsrv); |
| else |
| snprint(addr, sizeof(addr), "%s!%s", defnet, linear); |
| return addr; |
| } |
| |
| /* |
| * if there is already a service, use it |
| */ |
| cp = strchr(cp+1, '!'); |
| if(cp) |
| return linear; |
| |
| /* |
| * if the network is unix, no service |
| */ |
| if(strncmp(linear, "unix!", 5) == 0) |
| return linear; |
| |
| /* |
| * add default service |
| */ |
| if(defsrv == 0) |
| return linear; |
| |
| snprint(addr, sizeof(addr), "%s!%s", linear, defsrv); |
| return addr; |
| } |