diff options
| -rw-r--r-- | dmenu.c | 20 |
1 files changed, 10 insertions, 10 deletions
| @@ -1,4 +1,4 @@ | |||
| 1 | /* See LICENSE file for copyright and license details. */ | 1 | /* See LICENSE file for copynext and license details. */ |
| 2 | #include <ctype.h> | 2 | #include <ctype.h> |
| 3 | #include <stdio.h> | 3 | #include <stdio.h> |
| 4 | #include <stdlib.h> | 4 | #include <stdlib.h> |
| @@ -19,8 +19,7 @@ | |||
| 19 | typedef struct Item Item; | 19 | typedef struct Item Item; |
| 20 | struct Item { | 20 | struct Item { |
| 21 | char *text; | 21 | char *text; |
| 22 | Item *next; /* traverses all items */ | 22 | Item *left, *right; |
| 23 | Item *left, *right; /* traverses matching items */ | ||
| 24 | }; | 23 | }; |
| 25 | 24 | ||
| 26 | static void appenditem(Item *item, Item **list, Item **last); | 25 | static void appenditem(Item *item, Item **list, Item **last); |
| @@ -386,7 +385,7 @@ match(void) { | |||
| 386 | 385 | ||
| 387 | len = strlen(text); | 386 | len = strlen(text); |
| 388 | matches = lexact = lprefix = lsubstr = itemend = exactend = prefixend = substrend = NULL; | 387 | matches = lexact = lprefix = lsubstr = itemend = exactend = prefixend = substrend = NULL; |
| 389 | for(item = items; item; item = item->next) | 388 | for(item = items; item && item->text; item++) |
| 390 | if(!fstrncmp(text, item->text, len + 1)) | 389 | if(!fstrncmp(text, item->text, len + 1)) |
| 391 | appenditem(item, &lexact, &exactend); | 390 | appenditem(item, &lexact, &exactend); |
| 392 | else if(!fstrncmp(text, item->text, len)) | 391 | else if(!fstrncmp(text, item->text, len)) |
| @@ -445,16 +444,17 @@ paste(void) { | |||
| 445 | void | 444 | void |
| 446 | readstdin(void) { | 445 | readstdin(void) { |
| 447 | char buf[sizeof text], *p; | 446 | char buf[sizeof text], *p; |
| 448 | Item *item, **end; | 447 | size_t i, size = 0; |
| 449 | 448 | ||
| 450 | for(end = &items; fgets(buf, sizeof buf, stdin); *end = item, end = &item->next) { | 449 | for(i = 0; fgets(buf, sizeof buf, stdin); items[++i].text = NULL) { |
| 450 | if(i+1 == size / sizeof *items || !items) | ||
| 451 | if(!(items = realloc(items, (size += BUFSIZ)))) | ||
| 452 | eprintf("cannot realloc %u bytes:", size); | ||
| 451 | if((p = strchr(buf, '\n'))) | 453 | if((p = strchr(buf, '\n'))) |
| 452 | *p = '\0'; | 454 | *p = '\0'; |
| 453 | if(!(item = calloc(1, sizeof *item))) | 455 | if(!(items[i].text = strdup(buf))) |
| 454 | eprintf("cannot malloc %u bytes:", sizeof *item); | ||
| 455 | if(!(item->text = strdup(buf))) | ||
| 456 | eprintf("cannot strdup %u bytes:", strlen(buf)+1); | 456 | eprintf("cannot strdup %u bytes:", strlen(buf)+1); |
| 457 | inputw = MAX(inputw, textw(dc, item->text)); | 457 | inputw = MAX(inputw, textw(dc, items[i].text)); |
| 458 | } | 458 | } |
| 459 | } | 459 | } |
| 460 | 460 | ||
