Bläddra i källkod

Saving users memory.

When the item->label and item->output are the same, XMenu now only
strdup() the item->label and make item->output equal to item->label.
This saves memory when the user do not write a output specification
in the input.
master
phillbush 4 år sedan
förälder
incheckning
15dfafdfb1
1 ändrade filer med 14 tillägg och 8 borttagningar
  1. +14
    -8
      xmenu.c

+ 14
- 8
xmenu.c Visa fil

@@ -86,7 +86,7 @@ static void drawmenu(struct Menu *currmenu);
static struct Item *itemcycle(struct Menu *currmenu, int direction); static struct Item *itemcycle(struct Menu *currmenu, int direction);
static void run(struct Menu *currmenu); static void run(struct Menu *currmenu);
static void freemenu(struct Menu *menu); static void freemenu(struct Menu *menu);
static void cleanup(struct Menu *rootmenu);
static void cleanup(void);
static void usage(void); static void usage(void);


/* global variables (X stuff and geometries) */ /* global variables (X stuff and geometries) */
@@ -145,7 +145,10 @@ main(int argc, char *argv[])
/* run event loop */ /* run event loop */
run(rootmenu); run(rootmenu);


cleanup(rootmenu);
/* freeing stuff */
freemenu(rootmenu);
cleanup();

return 0; return 0;
} }


@@ -254,8 +257,12 @@ allocitem(const char *label, const char *output)
} else { } else {
if ((item->label = strdup(label)) == NULL) if ((item->label = strdup(label)) == NULL)
err(1, "strdup"); err(1, "strdup");
if ((item->output = strdup(output)) == NULL)
err(1, "strdup");
if (label == output) {
item->output = item->label;
} else {
if ((item->output = strdup(output)) == NULL)
err(1, "strdup");
}
} }
item->y = 0; item->y = 0;
item->h = item->label ? geom.itemh : geom.separator; item->h = item->label ? geom.itemh : geom.separator;
@@ -818,7 +825,8 @@ freemenu(struct Menu *menu)
freemenu(item->submenu); freemenu(item->submenu);
tmp = item; tmp = item;
item = item->next; item = item->next;
free(tmp->label);
if (tmp->label != tmp->output)
free(tmp->label);
free(tmp->output); free(tmp->output);
free(tmp); free(tmp);
} }
@@ -831,13 +839,11 @@ freemenu(struct Menu *menu)


/* cleanup and exit */ /* cleanup and exit */
static void static void
cleanup(struct Menu *rootmenu)
cleanup(void)
{ {
XUngrabPointer(dpy, CurrentTime); XUngrabPointer(dpy, CurrentTime);
XUngrabKeyboard(dpy, CurrentTime); XUngrabKeyboard(dpy, CurrentTime);


freemenu(rootmenu);

XftColorFree(dpy, visual, colormap, &dc.normal[ColorBG]); XftColorFree(dpy, visual, colormap, &dc.normal[ColorBG]);
XftColorFree(dpy, visual, colormap, &dc.normal[ColorFG]); XftColorFree(dpy, visual, colormap, &dc.normal[ColorFG]);
XftColorFree(dpy, visual, colormap, &dc.selected[ColorBG]); XftColorFree(dpy, visual, colormap, &dc.selected[ColorBG]);


Laddar…
Avbryt
Spara