summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcinap_lenrek <cinap_lenrek@felloff.net>2015-04-16 01:20:30 +0200
committercinap_lenrek <cinap_lenrek@felloff.net>2015-04-16 01:20:30 +0200
commitbcf54c0bfb188214f6097cf02fe60040cf0d6d7f (patch)
tree6461807d6f88a1db15ccb2f349b8c4847f41a5e9
parent46070c3122227f5fc04c9b7a29d0652600fa7074 (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.h2
-rw-r--r--sys/src/9/port/segment.c11
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);