diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-06-28 18:11:04 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2014-06-28 18:11:04 +0200 |
commit | 7d9339f75e21ccfaae85b8d460748412831d1e4d (patch) | |
tree | 986afee67aba13e00348aadc8f9da22d745af046 /sys/src/cmd/nusb/lib/dev.c | |
parent | 9d30b0f32dd9d8219805ed0d3ef04605c5f461cf (diff) | |
parent | 4275c49e72544d5b92512e41ddecbd6af5bee6c3 (diff) |
merge
Diffstat (limited to 'sys/src/cmd/nusb/lib/dev.c')
-rw-r--r-- | sys/src/cmd/nusb/lib/dev.c | 32 |
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; } |