diff options
author | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-04-16 01:20:30 +0200 |
---|---|---|
committer | cinap_lenrek <cinap_lenrek@felloff.net> | 2015-04-16 01:20:30 +0200 |
commit | bcf54c0bfb188214f6097cf02fe60040cf0d6d7f (patch) | |
tree | 6461807d6f88a1db15ccb2f349b8c4847f41a5e9 | |
parent | 46070c3122227f5fc04c9b7a29d0652600fa7074 (diff) |
kernel: pass segio error string by pointer
there's no need to waste space for a error buffer in the Segio
structure, as the segmentio kproc will be waiting for the next
command after an error and will not overwite it until we issue
another command.
-rw-r--r-- | sys/src/9/port/portdat.h | 2 | ||||
-rw-r--r-- | sys/src/9/port/segment.c | 11 |
2 files changed, 6 insertions, 7 deletions
diff --git a/sys/src/9/port/portdat.h b/sys/src/9/port/portdat.h index f2d0a1223..81bafa4f8 100644 --- a/sys/src/9/port/portdat.h +++ b/sys/src/9/port/portdat.h @@ -406,7 +406,7 @@ struct Segio char *addr; int dlen; int cmd; - char err[64]; + char *err; }; enum diff --git a/sys/src/9/port/segment.c b/sys/src/9/port/segment.c index ad3cc0a92..3bf5c1079 100644 --- a/sys/src/9/port/segment.c +++ b/sys/src/9/port/segment.c @@ -797,11 +797,11 @@ cmddone(void *arg) static void docmd(Segio *sio, int cmd) { - sio->err[0] = 0; + sio->err = nil; sio->cmd = cmd; wakeup(&sio->cmdwait); sleep(&sio->replywait, cmddone, sio); - if(sio->err[0]) + if(sio->err != nil) error(sio->err); } @@ -838,10 +838,9 @@ segmentioproc(void *arg) ; for(done = 0; !done;){ sleep(&sio->cmdwait, cmdready, sio); - if(waserror()){ - strncpy(sio->err, up->errstr, sizeof(sio->err)-1); - sio->err[sizeof(sio->err)-1] = 0; - } else { + if(waserror()) + sio->err = up->errstr; + else { if(sio->s != nil && up->seg[sno] != sio->s){ putseg(up->seg[sno]); incref(sio->s); |