aboutsummaryrefslogtreecommitdiff
path: root/src/libdraw/devdraw.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libdraw/devdraw.c')
-rw-r--r--src/libdraw/devdraw.c21
1 files changed, 7 insertions, 14 deletions
diff --git a/src/libdraw/devdraw.c b/src/libdraw/devdraw.c
index 74e10c31..f4a3fd96 100644
--- a/src/libdraw/devdraw.c
+++ b/src/libdraw/devdraw.c
@@ -549,6 +549,8 @@ drawfreedimage(DImage *dimage)
}
ds = dimage->dscreen;
l = dimage->image;
+ dimage->dscreen = nil; /* paranoia */
+ dimage->image = nil;
if(ds){
if(l->data == screenimage->data)
addflush(l->layer->screenr);
@@ -599,23 +601,14 @@ static
int
drawuninstall(Client *client, int id)
{
- DImage *d, *next;
+ DImage *d, **l;
- d = client->dimage[id&HASHMASK];
- if(d == 0)
- return -1;
- if(d->id == id){
- client->dimage[id&HASHMASK] = d->next;
- drawfreedimage(d);
- return 0;
- }
- while(next = d->next){ /* assign = */
- if(next->id == id){
- d->next = next->next;
- drawfreedimage(next);
+ for(l=&client->dimage[id&HASHMASK]; (d=*l) != nil; l=&d->next){
+ if(d->id == id){
+ *l = d->next;
+ drawfreedimage(d);
return 0;
}
- d = next;
}
return -1;
}