| #include <stdlib.h> |
| #include <sys/types.h> |
| #include <string.h> |
| #include <fcntl.h> |
| #include <stdio.h> |
| #include <unistd.h> |
| |
| /* truncate functionality for now. No lib/ndb. |
| #include <libnet.h> |
| */ |
| |
| /* |
| * make an address, add the defaults |
| * |
| * if you pass in only one ! in linear, this assumes this ! was between the net |
| * and the host. if you pass in no !s, we'll build one from defnet/defsrv. |
| */ |
| char * |
| netmkaddr(char *linear, char *defnet, char *defsrv) |
| { |
| /* TODO: this isn't threadsafe */ |
| static char addr[256]; |
| char *cp; |
| |
| /* |
| * dump network name |
| */ |
| cp = strchr(linear, '!'); |
| if(cp == 0){ |
| if(defnet==0){ |
| if(defsrv) |
| snprintf(addr, sizeof(addr), "net!%s!%s", |
| linear, defsrv); |
| else |
| snprintf(addr, sizeof(addr), "net!%s", linear); |
| } |
| else { |
| if(defsrv) |
| snprintf(addr, sizeof(addr), "%s!%s!%s", defnet, |
| linear, defsrv); |
| else |
| snprintf(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; |
| |
| /* |
| * add default service |
| */ |
| if(defsrv == 0) |
| return linear; |
| snprintf(addr, sizeof(addr), "%s!%s", linear, defsrv); |
| |
| return addr; |
| } |