commit 939677d2f0a9ad558c55cc8440fa7732ffcc4a68
parent 87b1782a0440cfed13d896b255c1301be897b1f4
Author: Anselm R. Garbe <garbeam@wmii.de>
Date: Mon, 1 May 2006 20:53:30 +0200
fixed the mem leak (hopefully) noticed by Icarus, adding an exit(1) to destroy_area, if its frame.size > 0 (should never happen, but we'll see)
Diffstat:
3 files changed, 59 insertions(+), 56 deletions(-)
diff --git a/cmd/wm/area.c b/cmd/wm/area.c
@@ -64,8 +64,10 @@ destroy_area(Area *a)
{
unsigned int i;
View *v = a->view;
- if(a->frame.size)
- return;
+ if(a->frame.size) {
+ fprintf(stderr, "%s", "wmiiwm: fatal, destroying non-empty area\n");
+ exit(1);
+ }
if(a->frame.data)
free(a->frame.data);
if(v->revert == idx_of_area(a))
diff --git a/cmd/wm/bar.c b/cmd/wm/bar.c
@@ -9,55 +9,56 @@
#include "wm.h"
static int
-comp_bar_intern(const void *l1, const void *l2)
+comp_bar_intern(const void *b1, const void *b2)
{
- Bar *ll1 = *(Bar **)l1;
- Bar *ll2 = *(Bar **)l2;
- if(ll1->intern && !ll2->intern)
+ Bar *bb1 = *(Bar **)b1;
+ Bar *bb2 = *(Bar **)b2;
+ if(bb1->intern && !bb2->intern)
return -1;
- if(!ll1->intern && ll2->intern)
+ if(!bb1->intern && bb2->intern)
return 1;
return 0;
}
static int
-comp_bar_name(const void *l1, const void *l2)
+comp_bar_name(const void *b1, const void *b2)
{
- Bar *ll1 = *(Bar **)l1;
- Bar *ll2 = *(Bar **)l2;
- return strcmp(ll1->name, ll2->name);
+ Bar *bb1 = *(Bar **)b1;
+ Bar *bb2 = *(Bar **)b2;
+ return strcmp(bb1->name, bb2->name);
}
static Vector *
-vector_of_bars(BarVector *lv)
+vector_of_bars(BarVector *bv)
{
- return (Vector *) lv;
+ return (Vector *) bv;
}
Bar *
create_bar(char *name, Bool intern)
{
static unsigned int id = 1;
- Bar *l = bar_of_name(name);
-
- if(l)
- return l;
- l = cext_emallocz(sizeof(Bar));
- l->id = id++;
- l->intern = intern;
- cext_strlcpy(l->name, name, sizeof(l->name));
- cext_strlcpy(l->colstr, def.selcolor, sizeof(l->colstr));
- l->color = def.sel;
- cext_vattach(vector_of_bars(&bar), l);
+ Bar *b = bar_of_name(name);
+
+ if(b)
+ return b;
+ b = cext_emallocz(sizeof(Bar));
+ b->id = id++;
+ b->intern = intern;
+ cext_strlcpy(b->name, name, sizeof(b->name));
+ cext_strlcpy(b->colstr, def.selcolor, sizeof(b->colstr));
+ b->color = def.sel;
+ cext_vattach(vector_of_bars(&bar), b);
qsort(bar.data, bar.size, sizeof(Bar *), comp_bar_name);
qsort(bar.data, bar.size, sizeof(Bar *), comp_bar_intern);
- return l;
+ return b;
}
void
-destroy_bar(Bar *l)
+destroy_bar(Bar *b)
{
- cext_vdetach(vector_of_bars(&bar), l);
+ cext_vdetach(vector_of_bars(&bar), b);
+ free(b);
}
unsigned int
@@ -100,7 +101,7 @@ draw_bar()
unsigned int i = 0, w = 0;
int exp = -1;
BlitzDraw d = { 0 };
- Bar *l = nil;
+ Bar *b = nil;
d.gc = bargc;
d.drawable = barpmap;
@@ -116,28 +117,28 @@ draw_bar()
return;
for(i = 0; (i < bar.size) && (w < brect.width); i++) {
- l = bar.data[i];
- if(l->intern) {
- if(view.size && !strncmp(l->name, view.data[sel]->name, sizeof(l->name)))
- l->color = def.sel;
+ b = bar.data[i];
+ if(b->intern) {
+ if(view.size && !strncmp(b->name, view.data[sel]->name, sizeof(b->name)))
+ b->color = def.sel;
else
- l->color = def.norm;
+ b->color = def.norm;
}
- l->rect.x = 0;
- l->rect.y = 0;
- l->rect.width = brect.height;
- if(strlen(l->data))
- l->rect.width += blitz_textwidth(dpy, &blitzfont, l->data);
- l->rect.height = brect.height;
- w += l->rect.width;
+ b->rect.x = 0;
+ b->rect.y = 0;
+ b->rect.width = brect.height;
+ if(strlen(b->data))
+ b->rect.width += blitz_textwidth(dpy, &blitzfont, b->data);
+ b->rect.height = brect.height;
+ w += b->rect.width;
}
if(i != bar.size) { /* give all bars same width */
w = brect.width / bar.size;
for(i = 0; i < bar.size; i++) {
- l = bar.data[i];
- l->rect.x = i * w;
- l->rect.width = w;
+ b = bar.data[i];
+ b->rect.x = i * w;
+ b->rect.width = w;
}
}
else { /* expand bar properly */
@@ -151,10 +152,10 @@ draw_bar()
}
for(i = 0; i < bar.size; i++) {
- l = bar.data[i];
- d.color = l->color;
- d.rect = l->rect;
- d.data = l->data;
+ b = bar.data[i];
+ d.color = b->color;
+ d.rect = b->rect;
+ d.data = b->data;
if(i == exp)
d.align = EAST;
else
@@ -167,11 +168,11 @@ draw_bar()
}
int
-idx_of_bar(Bar *l)
+idx_of_bar(Bar *b)
{
int i;
for(i = 0; i < bar.size; i++)
- if(bar.data[i] == l)
+ if(bar.data[i] == b)
return i;
return -1;
}
@@ -203,18 +204,18 @@ void
update_view_bars()
{
unsigned int i;
- Bar *l = nil;
+ Bar *b = nil;
for(i = 0; (i < bar.size) && bar.data[i]->intern; i++) {
- l = bar.data[i];
- if(!view_of_name(l->name)) {
- destroy_bar(l);
+ b = bar.data[i];
+ if(!view_of_name(b->name)) {
+ destroy_bar(b);
i--;
}
}
for(i = 0; i < view.size; i++) {
- l = create_bar(view.data[i]->name, True);
- cext_strlcpy(l->data, view.data[i]->name, sizeof(l->data));
+ b = create_bar(view.data[i]->name, True);
+ cext_strlcpy(b->data, view.data[i]->name, sizeof(b->data));
}
draw_bar();
diff --git a/cmd/wm/wm.h b/cmd/wm/wm.h
@@ -207,7 +207,7 @@ int idx_of_bar_id(unsigned short id);
void resize_bar();
unsigned int height_of_bar();
Bar *bar_of_name(const char *name);
-int idx_of_bar(Bar *l);
+int idx_of_bar(Bar *b);
void update_view_bars();
/* client.c */