M port/devdraw.c => port/devdraw.c +1 -1
@@ 1531,9 1531,9 @@ drawmesg(Client *client, void *av, int n)
drawrectangle(&r, a+5);
if(!rectinrect(r, i->r))
error(Ereadoutside);
- free(client->readdata);
c = bytesperline(r, i->ldepth);
c *= Dy(r);
+ free(client->readdata);
client->readdata = mallocz(c, 0);
if(client->readdata == nil)
error("readimage malloc failed");
M port/devproc.c => port/devproc.c +4 -0
@@ 361,6 361,8 @@ procread(Chan *c, void *va, long n, ulong offset)
rptr = (uchar*)&p->fpsave;
rsize = sizeof(FPsave);
regread:
+ if(rptr == 0)
+ error(Enoreg);
if(offset >= rsize)
return 0;
if(offset+n > rsize)
@@ 566,6 568,8 @@ procwrite(Chan *c, void *va, long n, ulong offset)
return 0;
if(offset+n > sizeof(Ureg))
n = sizeof(Ureg) - offset;
+ if(p->dbgreg == 0)
+ error(Enoreg);
setregisters(p->dbgreg, (char*)(p->dbgreg)+offset, va, n);
break;
M port/error.h => port/error.h +1 -1
@@ 51,6 51,6 @@ extern char Esoverlap[]; /* segments overlap */
extern char Emouseset[]; /* mouse type already set */
extern char Erecover[]; /* failed to recover fd */
extern char Eshort[]; /* i/o count too small */
-extern char Enobitstore[]; /* out of screen memory */
extern char Egreg[]; /* ken scheduled it */
extern char Ebadspec[]; /* bad attach specifier */
+extern char Enoreg[]; /* process has no saved registers */