aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2006-07-23 02:56:37 +0000
committerrsc <devnull@localhost>2006-07-23 02:56:37 +0000
commit6215fd56f1c9d9392806efd1ac499f91c8ae83fb (patch)
treed1e089619e07beb3c41d2c68879708bb1d5e9348
parent73a5509ae929e41ca0047254a880c8efd4aa72a1 (diff)
downloadplan9port-6215fd56f1c9d9392806efd1ac499f91c8ae83fb.tar.gz
plan9port-6215fd56f1c9d9392806efd1ac499f91c8ae83fb.tar.bz2
plan9port-6215fd56f1c9d9392806efd1ac499f91c8ae83fb.zip
experiment: translation from standard notations to plan 9 in netmkaddr
-rw-r--r--man/man3/dial.316
-rw-r--r--src/lib9/dial.c3
-rw-r--r--src/lib9/netmkaddr.c30
3 files changed, 36 insertions, 13 deletions
diff --git a/man/man3/dial.3 b/man/man3/dial.3
index 7177e53e..5c645287 100644
--- a/man/man3/dial.3
+++ b/man/man3/dial.3
@@ -162,6 +162,22 @@ It takes an address along with a default network and service to use
if they are not specified in the address.
It returns a pointer to static data holding the actual address to use.
.PP
+.I Netmkaddr
+also translates Unix conventions into Plan 9 syntax.
+If
+.I addr
+is the name of a local file or Unix domain socket,
+.I netmkaddr
+will return
+.IB unix ! addr \fR.
+If
+.I addr
+is of the form
+.IB host : port \fR,
+.I netmkaddr
+will return
+.IB net ! host ! port \fR.
+.PP
.I Dialparse
parses a network address as described above
into a network name, a Unix domain socket address,
diff --git a/src/lib9/dial.c b/src/lib9/dial.c
index dcbdc0b8..88dcf564 100644
--- a/src/lib9/dial.c
+++ b/src/lib9/dial.c
@@ -118,6 +118,9 @@ Unix:
free(buf);
return -1;
}
+ /* Allow regular files in addition to Unix sockets. */
+ if((s = open(unix, ORDWR)) >= 0)
+ return s;
memset(&su, 0, sizeof su);
su.sun_family = AF_UNIX;
if(strlen(unix)+1 > sizeof su.sun_path){
diff --git a/src/lib9/netmkaddr.c b/src/lib9/netmkaddr.c
index fd53f468..b476516d 100644
--- a/src/lib9/netmkaddr.c
+++ b/src/lib9/netmkaddr.c
@@ -16,21 +16,25 @@ netmkaddr(char *linear, char *defnet, char *defsrv)
*/
cp = strchr(linear, '!');
if(cp == 0){
- if(defnet==0){
- if(defsrv)
- snprint(addr, sizeof(addr), "net!%s!%s",
- linear, defsrv);
- else
- snprint(addr, sizeof(addr), "net!%s", linear);
+ 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;
}
- else {
- if(defsrv)
- snprint(addr, sizeof(addr), "%s!%s!%s", defnet,
- linear, defsrv);
- else
- snprint(addr, sizeof(addr), "%s!%s", defnet,
- linear);
+ /* 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;
}