mirror of https://github.com/ericonr/ef.git
Support arbitratily sized search tokens.
This commit is contained in:
parent
dba748f593
commit
68226bc337
18
browser.c
18
browser.c
|
@ -5,6 +5,7 @@
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <malloc.h>
|
||||||
|
|
||||||
#include <curses.h>
|
#include <curses.h>
|
||||||
|
|
||||||
|
@ -90,18 +91,14 @@ int main()
|
||||||
wrefresh(prompt);
|
wrefresh(prompt);
|
||||||
|
|
||||||
struct str_array toks = { 0 };
|
struct str_array toks = { 0 };
|
||||||
size_t n;
|
size_t n, cap;
|
||||||
char *name = NULL;
|
char *name = NULL;
|
||||||
/* listx isn't changed anywhere */
|
/* listx isn't changed anywhere */
|
||||||
int listx = 0, listy = 0;
|
int listx = 0, listy = 0;
|
||||||
for (;;) {
|
for (;;) {
|
||||||
if (!name) {
|
if (!name) {
|
||||||
/* TODO: find way to track allocation size and update it when needed */
|
cap = 1024;
|
||||||
name = malloc(1024);
|
name = xmalloc(cap);
|
||||||
if (!name) {
|
|
||||||
perror("malloc");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
n = 0;
|
n = 0;
|
||||||
name[n] = 0;
|
name[n] = 0;
|
||||||
|
@ -149,6 +146,7 @@ int main()
|
||||||
if (toks.n > 1 && n == 0) {
|
if (toks.n > 1 && n == 0) {
|
||||||
free(pop_entry(&toks));
|
free(pop_entry(&toks));
|
||||||
name = get_entry(&toks, toks.n - 1);
|
name = get_entry(&toks, toks.n - 1);
|
||||||
|
cap = malloc_usable_size(name);
|
||||||
n = strlen(name);
|
n = strlen(name);
|
||||||
name_changed = true;
|
name_changed = true;
|
||||||
break;
|
break;
|
||||||
|
@ -166,9 +164,13 @@ int main()
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
if (n == cap) {
|
||||||
|
cap *= 2;
|
||||||
|
name = xrealloc(name, cap);
|
||||||
|
}
|
||||||
name[n] = c;
|
name[n] = c;
|
||||||
n++;
|
n++;
|
||||||
/* clear chars from previous entries */
|
/* clear chars from previous entries and/or dirty memory */
|
||||||
name[n] = 0;
|
name[n] = 0;
|
||||||
name_changed = true;
|
name_changed = true;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in New Issue