diff options
author | aiju <devnull@localhost> | 2018-03-07 20:44:55 +0000 |
---|---|---|
committer | aiju <devnull@localhost> | 2018-03-07 20:44:55 +0000 |
commit | 657f0ed99a23c2ee6872d890c8ca8ef97fed9ac9 (patch) | |
tree | 1c49b0bdd9858a1ab57ac034feea2f68e3c40cd4 /sys/src | |
parent | 2da5e135dc5d1d50ac2a760fe1bc693b6008087c (diff) |
nusb/cam: ctl message fixes
Diffstat (limited to 'sys/src')
-rw-r--r-- | sys/src/cmd/nusb/cam/cam.c | 11 | ||||
-rw-r--r-- | sys/src/cmd/nusb/cam/ctl.c | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/sys/src/cmd/nusb/cam/cam.c b/sys/src/cmd/nusb/cam/cam.c index a1da6e213..c2cc07eea 100644 --- a/sys/src/cmd/nusb/cam/cam.c +++ b/sys/src/cmd/nusb/cam/cam.c @@ -202,6 +202,11 @@ strread(Req *req, char *str, int len) { ReadState *rs; + if(req->fid->aux != nil){ + free(((ReadState*)req->fid->aux)->buf); + free(req->fid->aux); + req->fid->aux = nil; + } if(str == nil) return; rs = emallocz(sizeof(ReadState), 1); @@ -223,7 +228,7 @@ fsread(Req *req) } f = req->fid->file; c = f->aux; - if(req->fid->aux == nil) + if(req->fid->aux == nil || req->ifcall.offset == 0) if(f == c->formatsfile) strread(req, formatread(c), -1); else if(f == c->ctlfile) @@ -267,8 +272,10 @@ err: respond(req, "the front fell off"); werrstr("invalid argument"); if(ctlwrite(c, s) < 0) responderror(req); - else + else{ + req->ofcall.count = req->ifcall.count; respond(req, nil); + } free(s); } diff --git a/sys/src/cmd/nusb/cam/ctl.c b/sys/src/cmd/nusb/cam/ctl.c index 4cdafc6ae..88398c6e0 100644 --- a/sys/src/cmd/nusb/cam/ctl.c +++ b/sys/src/cmd/nusb/cam/ctl.c @@ -507,7 +507,7 @@ ctlwrite(Cam *c, char *msg) p = findparam(f[1]); if(p == nil) return -1; - if((uint)uid >= nunit || unit[uid] == nil){ + if(p->type != PARAMSPEC && ((uint)uid >= nunit || unit[uid] == nil)){ werrstr("no such unit"); return -1; } |