[awesome-menu] Fix infinite loop on bad completion
This commit is contained in:
parent
a5f0df0c95
commit
5b2e9c0139
|
@ -268,6 +268,7 @@ item_list_fill_file(const char *directory)
|
||||||
static void
|
static void
|
||||||
complete(Bool reverse)
|
complete(Bool reverse)
|
||||||
{
|
{
|
||||||
|
int loop = 2;
|
||||||
item_t *item = NULL;
|
item_t *item = NULL;
|
||||||
item_t *(*item_iter)(item_t **, item_t *) = item_list_next_cycle;
|
item_t *(*item_iter)(item_t **, item_t *) = item_list_next_cycle;
|
||||||
|
|
||||||
|
@ -277,14 +278,10 @@ complete(Bool reverse)
|
||||||
if(globalconf.item_selected)
|
if(globalconf.item_selected)
|
||||||
item = item_iter(&globalconf.items, globalconf.item_selected);
|
item = item_iter(&globalconf.items, globalconf.item_selected);
|
||||||
else
|
else
|
||||||
for(item = globalconf.items; item; item = item_iter(&globalconf.items, item))
|
item = globalconf.items;
|
||||||
if(item->match)
|
|
||||||
{
|
|
||||||
globalconf.item_selected = item;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(; item; item = item_iter(&globalconf.items, item))
|
for(; item && loop; item = item_iter(&globalconf.items, item))
|
||||||
|
{
|
||||||
if(item->match)
|
if(item->match)
|
||||||
{
|
{
|
||||||
/* XXX sizeof wrong */
|
/* XXX sizeof wrong */
|
||||||
|
@ -292,6 +289,15 @@ complete(Bool reverse)
|
||||||
globalconf.item_selected = item;
|
globalconf.item_selected = item;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* Since loop is 2, it will be 1 at first iter, and then 0 if we
|
||||||
|
* get back before matching an item (i.e. no items match) to the
|
||||||
|
* first elem: so it will break the loop, otherwise it loops for
|
||||||
|
* ever
|
||||||
|
*/
|
||||||
|
if(item == globalconf.items)
|
||||||
|
loop--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
Loading…
Reference in New Issue