summaryrefslogtreecommitdiff
path: root/sys/src
diff options
context:
space:
mode:
authoraiju <devnull@localhost>2018-03-07 20:44:55 +0000
committeraiju <devnull@localhost>2018-03-07 20:44:55 +0000
commit657f0ed99a23c2ee6872d890c8ca8ef97fed9ac9 (patch)
tree1c49b0bdd9858a1ab57ac034feea2f68e3c40cd4 /sys/src
parent2da5e135dc5d1d50ac2a760fe1bc693b6008087c (diff)
nusb/cam: ctl message fixes
Diffstat (limited to 'sys/src')
-rw-r--r--sys/src/cmd/nusb/cam/cam.c11
-rw-r--r--sys/src/cmd/nusb/cam/ctl.c2
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;
}