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);