summaryrefslogtreecommitdiff
path: root/sys/src/cmd/nusb/lib/dev.c
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2014-06-28 18:11:04 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2014-06-28 18:11:04 +0200
commit7d9339f75e21ccfaae85b8d460748412831d1e4d (patch)
tree986afee67aba13e00348aadc8f9da22d745af046 /sys/src/cmd/nusb/lib/dev.c
parent9d30b0f32dd9d8219805ed0d3ef04605c5f461cf (diff)
parent4275c49e72544d5b92512e41ddecbd6af5bee6c3 (diff)
merge
Diffstat (limited to 'sys/src/cmd/nusb/lib/dev.c')
-rw-r--r--sys/src/cmd/nusb/lib/dev.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/sys/src/cmd/nusb/lib/dev.c b/sys/src/cmd/nusb/lib/dev.c
index 60d327e87..2eed9490e 100644
--- a/sys/src/cmd/nusb/lib/dev.c
+++ b/sys/src/cmd/nusb/lib/dev.c
@@ -121,6 +121,7 @@ opendev(char *fn)
free(d);
return nil;
}
+ d->hname = nil;
dprint(2, "%s: opendev %#p %s\n", argv0, d, fn);
return d;
}
@@ -323,6 +324,8 @@ closedev(Dev *d)
d->cfd = d->dfd = -1;
free(d->dir);
d->dir = nil;
+ free(d->hname);
+ d->hname = nil;
ud = d->usb;
d->usb = nil;
if(ud != nil){
@@ -509,12 +512,26 @@ devctl(Dev *dev, char *fmt, ...)
}
Dev *
-getdev(int id)
+getdev(char *devid)
{
+ char buf[40], *p;
Dev *d;
- char buf[40];
-
- snprint(buf, sizeof buf, "/dev/usb/ep%d.0", id);
+
+ if(devid[0] == '/' || devid[0] == '#'){
+ snprint(buf, sizeof buf, "%s", devid);
+ p = strrchr(buf, '/');
+ if(p != nil){
+ p = strrchr(buf, ':');
+ if(p != nil)
+ *p = 0;
+ }
+ } else {
+ p = nil;
+ snprint(buf, sizeof buf, "/dev/usb/ep%ld.0", strtol(devid, &p, 10));
+ if(*p != ':')
+ p = nil;
+ }
+
d = opendev(buf);
if(d == nil)
return nil;
@@ -522,5 +539,12 @@ getdev(int id)
closedev(d);
return nil;
}
+
+ if(p == nil){
+ snprint(buf, sizeof buf, ":%d", d->id);
+ p = buf;
+ }
+ d->hname = strdup(p+1);
+
return d;
}