diff -ru wm-select-0.2.orig/wm-select.c wm-select-0.2/wm-select.c --- wm-select-0.2.orig/wm-select.c 2005-11-18 00:34:40 +0300 +++ wm-select-0.2/wm-select.c 2005-11-18 01:10:11 +0300 @@ -355,37 +355,37 @@ for (i = 0; i < n; ++i) { - wm_entry entry; + wm_entry* entry = malloc(sizeof(wm_entry)); char *fname; if (asprintf (&fname, "%s/%s", WM_DIR, namelist[i]->d_name) < 0) error (EXIT_FAILURE, errno, "asprintf"); - ReadWMConfig (fname, &entry); - if (!entry.name || !entry.icon || !entry.exec) + ReadWMConfig (fname, entry); + if (!entry->name || !entry->icon || !entry->exec) { error (EXIT_SUCCESS, 0, "%s: config incomplete", fname); free (fname); - if (entry.name) - free (entry.name); - if (entry.icon) - free (entry.icon); - if (entry.exec) - free (entry.exec); - entry.valid = 0; + if (entry->name) + free (entry->name); + if (entry->icon) + free (entry->icon); + if (entry->exec) + free (entry->exec); + entry->valid = 0; memcpy (namelist[i]->d_name, (const char *) &entry, sizeof (entry)); continue; } free (fname); - entry.valid = 1; + entry->valid = 1; memcpy (namelist[i]->d_name, (const char *) &entry, sizeof (entry)); ++total; if (!preferred) - preferred = entry.exec; + preferred = entry->exec; } if (total <= 6) @@ -400,7 +400,7 @@ // error (EXIT_SUCCESS, 0, "total=%d, wrap_limit=%d", total, wrap_limit); for (i = 0; i < n; ++i) { - wm_entry *entry = (wm_entry *) (namelist[i]->d_name); + wm_entry *entry = *((wm_entry **) (namelist[i]->d_name)); if (!entry->valid) continue; @@ -417,6 +417,7 @@ hbox = gtk_hbox_new (1, 0); wrap_i = 0; } + free(entry); } free (namelist); if (wrap_i)