Xinqi Bao's Git
projects
/
dmenu.git
/ diff
summary
|
log
|
commit
|
diff
|
tree
raw
|
patch
|
inline
| side by side (parent:
86019c5
)
use array for items
author
Connor Lane Smith <
[email protected]
>
Sat, 14 May 2011 16:46:20 +0000
(17:46 +0100)
committer
Connor Lane Smith <
[email protected]
>
Sat, 14 May 2011 16:46:20 +0000
(17:46 +0100)
dmenu.c
diff
|
blob
|
history
diff --git
a/dmenu.c
b/dmenu.c
index
6d35430
..
2684c91
100644
(file)
--- a/
dmenu.c
+++ b/
dmenu.c
@@
-1,4
+1,4
@@
-/* See LICENSE file for copy
righ
t and license details. */
+/* See LICENSE file for copy
nex
t and license details. */
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
@@
-19,8
+19,7
@@
typedef struct Item Item;
struct Item {
char *text;
typedef struct Item Item;
struct Item {
char *text;
- Item *next; /* traverses all items */
- Item *left, *right; /* traverses matching items */
+ Item *left, *right;
};
static void appenditem(Item *item, Item **list, Item **last);
};
static void appenditem(Item *item, Item **list, Item **last);
@@
-386,7
+385,7
@@
match(void) {
len = strlen(text);
matches = lexact = lprefix = lsubstr = itemend = exactend = prefixend = substrend = NULL;
len = strlen(text);
matches = lexact = lprefix = lsubstr = itemend = exactend = prefixend = substrend = NULL;
- for(item = items; item
; item = item->next
)
+ for(item = items; item
&& item->text; item++
)
if(!fstrncmp(text, item->text, len + 1))
appenditem(item, &lexact, &exactend);
else if(!fstrncmp(text, item->text, len))
if(!fstrncmp(text, item->text, len + 1))
appenditem(item, &lexact, &exactend);
else if(!fstrncmp(text, item->text, len))
@@
-445,16
+444,17
@@
paste(void) {
void
readstdin(void) {
char buf[sizeof text], *p;
void
readstdin(void) {
char buf[sizeof text], *p;
-
Item *item, **end
;
+
size_t i, size = 0
;
- for(end = &items; fgets(buf, sizeof buf, stdin); *end = item, end = &item->next) {
+ for(i = 0; fgets(buf, sizeof buf, stdin); items[++i].text = NULL) {
+ if(i+1 == size / sizeof *items || !items)
+ if(!(items = realloc(items, (size += BUFSIZ))))
+ eprintf("cannot realloc %u bytes:", size);
if((p = strchr(buf, '\n')))
*p = '\0';
if((p = strchr(buf, '\n')))
*p = '\0';
- if(!(item = calloc(1, sizeof *item)))
- eprintf("cannot malloc %u bytes:", sizeof *item);
- if(!(item->text = strdup(buf)))
+ if(!(items[i].text = strdup(buf)))
eprintf("cannot strdup %u bytes:", strlen(buf)+1);
eprintf("cannot strdup %u bytes:", strlen(buf)+1);
- inputw = MAX(inputw, textw(dc, item
->
text));
+ inputw = MAX(inputw, textw(dc, item
s[i].
text));
}
}
}
}