summaryrefslogtreecommitdiff
path: root/libkern/netmkaddr.c
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
commit37da2899f40661e3e9631e497da8dc59b971cbd0 (patch)
treecbc6d4680e347d906f5fa7fca73214418741df72 /libkern/netmkaddr.c
parent54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff)
20060303a
Diffstat (limited to 'libkern/netmkaddr.c')
-rw-r--r--libkern/netmkaddr.c50
1 files changed, 50 insertions, 0 deletions
diff --git a/libkern/netmkaddr.c b/libkern/netmkaddr.c
new file mode 100644
index 00000000..1e3b6294
--- /dev/null
+++ b/libkern/netmkaddr.c
@@ -0,0 +1,50 @@
+#include <lib9.h>
+
+/*
+ * make an address, add the defaults
+ */
+char *
+netmkaddr(char *linear, char *defnet, char *defsrv)
+{
+ static char addr[4*(NAMELEN+1)];
+ char *cp;
+
+ /*
+ * dump network name
+ */
+ cp = strchr(linear, '!');
+ if(cp == 0){
+ if(defnet==0){
+ if(defsrv)
+ sprint(addr, "net!%.*s!%.*s", 2*NAMELEN, linear,
+ NAMELEN, defsrv);
+ else
+ sprint(addr, "net!%.*s", 2*NAMELEN, linear);
+ } else {
+ if(defsrv)
+ sprint(addr, "%.*s!%.*s!%.*s", NAMELEN, defnet,
+ 2*NAMELEN, linear, NAMELEN, defsrv);
+ else
+ sprint(addr, "%.*s!%.*s", NAMELEN, defnet,
+ 2*NAMELEN, 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;
+ sprint(addr, "%.*s!%.*s", 3*NAMELEN, linear,
+ NAMELEN, defsrv);
+
+ return addr;
+}