it* sacc + cursorline and uri preview Err codevoid.de 70 i Err codevoid.de 70 hgit clone git://git.codevoid.de/sacc-sdk URL:git://git.codevoid.de/sacc-sdk codevoid.de 70 1Log /git/sacc-sdk/log.gph codevoid.de 70 1Files /git/sacc-sdk/files.gph codevoid.de 70 1Refs /git/sacc-sdk/refs.gph codevoid.de 70 1LICENSE /git/sacc-sdk/file/LICENSE.gph codevoid.de 70 i--- Err codevoid.de 70 1commit 5cef355a572cbf96818f75ebb5ad31be19bffb02 /git/sacc-sdk/commit/5cef355a572cbf96818f75ebb5ad31be19bffb02.gph codevoid.de 70 1parent ad655e3c1be072eb6f0d1d61279028707c836a82 /git/sacc-sdk/commit/ad655e3c1be072eb6f0d1d61279028707c836a82.gph codevoid.de 70 hAuthor: Quentin Rameau URL:mailto:quinq@fifth.space codevoid.de 70 iDate: Tue, 12 Sep 2017 02:01:50 +0200 Err codevoid.de 70 i Err codevoid.de 70 iChange the Dir Item pointer array for an Item array Err codevoid.de 70 i Err codevoid.de 70 iWe then allocate all items at once in molddiritem, saving us a lot of Err codevoid.de 70 imalloc calls. Err codevoid.de 70 i Err codevoid.de 70 iDiffstat: Err codevoid.de 70 i M common.h | 2 +- Err codevoid.de 70 i M sacc.c | 28 +++++++++++----------------- Err codevoid.de 70 i M ui_ti.c | 18 +++++++++--------- Err codevoid.de 70 i M ui_txt.c | 8 ++++---- Err codevoid.de 70 i Err codevoid.de 70 i4 files changed, 25 insertions(+), 31 deletions(-) Err codevoid.de 70 i--- Err codevoid.de 70 1diff --git a/common.h b/common.h /git/sacc-sdk/file/common.h.gph codevoid.de 70 it@@ -16,7 +16,7 @@ struct item { Err codevoid.de 70 i }; Err codevoid.de 70 i Err codevoid.de 70 i struct dir { Err codevoid.de 70 i- Item **items; Err codevoid.de 70 i+ Item *items; Err codevoid.de 70 i size_t nitems; Err codevoid.de 70 i size_t printoff; Err codevoid.de 70 i size_t curline; Err codevoid.de 70 1diff --git a/sacc.c b/sacc.c /git/sacc-sdk/file/sacc.c.gph codevoid.de 70 it@@ -101,7 +101,7 @@ static void Err codevoid.de 70 i clearitem(Item *item) Err codevoid.de 70 i { Err codevoid.de 70 i Dir *dir; Err codevoid.de 70 i- Item **items; Err codevoid.de 70 i+ Item *items; Err codevoid.de 70 i char *tag; Err codevoid.de 70 i size_t i; Err codevoid.de 70 i Err codevoid.de 70 it@@ -110,10 +110,8 @@ clearitem(Item *item) Err codevoid.de 70 i Err codevoid.de 70 i if (dir = item->dat) { Err codevoid.de 70 i items = dir->items; Err codevoid.de 70 i- for (i = 0; i < dir->nitems; ++i) { Err codevoid.de 70 i- clearitem(items[i]); Err codevoid.de 70 i- free(items[i]); Err codevoid.de 70 i- } Err codevoid.de 70 i+ for (i = 0; i < dir->nitems; ++i) Err codevoid.de 70 i+ clearitem(&items[i]); Err codevoid.de 70 i free(items); Err codevoid.de 70 i clear(&item->dat); Err codevoid.de 70 i } Err codevoid.de 70 it@@ -222,21 +220,18 @@ invaliditem(char *raw) Err codevoid.de 70 i return (tabs == 3) ? NULL : raw; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i-static Item * Err codevoid.de 70 i-molditem(char **raw) Err codevoid.de 70 i+static void Err codevoid.de 70 i+molditem(Item *item, char **raw) Err codevoid.de 70 i { Err codevoid.de 70 i- Item *item; Err codevoid.de 70 i char *next; Err codevoid.de 70 i Err codevoid.de 70 i if (!*raw) Err codevoid.de 70 i- return NULL; Err codevoid.de 70 i- Err codevoid.de 70 i- item = xcalloc(sizeof(Item)); Err codevoid.de 70 i+ return; Err codevoid.de 70 i Err codevoid.de 70 i if ((next = invaliditem(*raw))) { Err codevoid.de 70 i item->username = *raw; Err codevoid.de 70 i *raw = next; Err codevoid.de 70 i- return item; Err codevoid.de 70 i+ return; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i item->type = *raw[0]++; Err codevoid.de 70 it@@ -246,14 +241,12 @@ molditem(char **raw) Err codevoid.de 70 i item->port = pickfield(raw, '\r'); Err codevoid.de 70 i if (!*raw[0]) Err codevoid.de 70 i ++*raw; Err codevoid.de 70 i- Err codevoid.de 70 i- return item; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i static Dir * Err codevoid.de 70 i molddiritem(char *raw) Err codevoid.de 70 i { Err codevoid.de 70 i- Item **items = NULL; Err codevoid.de 70 i+ Item *items = NULL; Err codevoid.de 70 i char *s, *nl, *p; Err codevoid.de 70 i Dir *dir; Err codevoid.de 70 i size_t i, nitems; Err codevoid.de 70 it@@ -270,10 +263,11 @@ molddiritem(char *raw) Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i dir = xmalloc(sizeof(Dir)); Err codevoid.de 70 i- items = xreallocarray(items, nitems, sizeof(Item*)); Err codevoid.de 70 i+ items = xreallocarray(items, nitems, sizeof(Item)); Err codevoid.de 70 i+ memset(items, 0, nitems * sizeof(Item)); Err codevoid.de 70 i Err codevoid.de 70 i for (i = 0; i < nitems; ++i) Err codevoid.de 70 i- items[i] = molditem(&raw); Err codevoid.de 70 i+ molditem(&items[i], &raw); Err codevoid.de 70 i Err codevoid.de 70 i dir->items = items; Err codevoid.de 70 i dir->nitems = nitems; Err codevoid.de 70 1diff --git a/ui_ti.c b/ui_ti.c /git/sacc-sdk/file/ui_ti.c.gph codevoid.de 70 it@@ -203,7 +203,7 @@ displayuri(Item *item) Err codevoid.de 70 i void Err codevoid.de 70 i uidisplay(Item *entry) Err codevoid.de 70 i { Err codevoid.de 70 i- Item **items; Err codevoid.de 70 i+ Item *items; Err codevoid.de 70 i Dir *dir; Err codevoid.de 70 i size_t i, curln, lastln, nitems, printoff; Err codevoid.de 70 i Err codevoid.de 70 it@@ -232,7 +232,7 @@ uidisplay(Item *entry) Err codevoid.de 70 i putp(tparm(save_cursor)); Err codevoid.de 70 i putp(tparm(enter_standout_mode)); Err codevoid.de 70 i } Err codevoid.de 70 i- printitem(items[i]); Err codevoid.de 70 i+ printitem(&items[i]); Err codevoid.de 70 i putp(tparm(column_address, 0)); Err codevoid.de 70 i if (i == curln) Err codevoid.de 70 i putp(tparm(exit_standout_mode)); Err codevoid.de 70 it@@ -258,7 +258,7 @@ movecurline(Item *item, int l) Err codevoid.de 70 i if (curline < 0 || curline >= nitems) Err codevoid.de 70 i return; Err codevoid.de 70 i Err codevoid.de 70 i- printitem(dir->items[dir->curline]); Err codevoid.de 70 i+ printitem(&dir->items[dir->curline]); Err codevoid.de 70 i dir->curline = curline; Err codevoid.de 70 i Err codevoid.de 70 i if (l > 0) { Err codevoid.de 70 it@@ -268,7 +268,7 @@ movecurline(Item *item, int l) Err codevoid.de 70 i Err codevoid.de 70 i putp(tparm(cursor_address, plines, 0)); Err codevoid.de 70 i putp(tparm(scroll_forward)); Err codevoid.de 70 i- printitem(dir->items[offline]); Err codevoid.de 70 i+ printitem(&dir->items[offline]); Err codevoid.de 70 i Err codevoid.de 70 i putp(tparm(restore_cursor)); Err codevoid.de 70 i dir->printoff += l; Err codevoid.de 70 it@@ -280,7 +280,7 @@ movecurline(Item *item, int l) Err codevoid.de 70 i Err codevoid.de 70 i putp(tparm(cursor_address, 0, 0)); Err codevoid.de 70 i putp(tparm(scroll_reverse)); Err codevoid.de 70 i- printitem(dir->items[offline]); Err codevoid.de 70 i+ printitem(&dir->items[offline]); Err codevoid.de 70 i putchar('\n'); Err codevoid.de 70 i Err codevoid.de 70 i putp(tparm(restore_cursor)); Err codevoid.de 70 it@@ -290,7 +290,7 @@ movecurline(Item *item, int l) Err codevoid.de 70 i Err codevoid.de 70 i putp(tparm(cursor_address, curline - dir->printoff, 0)); Err codevoid.de 70 i putp(tparm(enter_standout_mode)); Err codevoid.de 70 i- printitem(dir->items[curline]); Err codevoid.de 70 i+ printitem(&dir->items[curline]); Err codevoid.de 70 i putp(tparm(exit_standout_mode)); Err codevoid.de 70 i displaystatus(item); Err codevoid.de 70 i fflush(stdout); Err codevoid.de 70 it@@ -349,7 +349,7 @@ nearentry(Item *entry, int direction) Err codevoid.de 70 i item = dir->curline + direction; Err codevoid.de 70 i Err codevoid.de 70 i for (; item >= 0 && item < lastitem; item += direction) { Err codevoid.de 70 i- if (dir->items[item]->type != 'i') Err codevoid.de 70 i+ if (dir->items[item].type != 'i') Err codevoid.de 70 i return item; Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 it@@ -410,7 +410,7 @@ uiselectitem(Item *entry) Err codevoid.de 70 i case '\n': Err codevoid.de 70 i pgnext: Err codevoid.de 70 i if (dir) Err codevoid.de 70 i- return dir->items[dir->curline]; Err codevoid.de 70 i+ return &dir->items[dir->curline]; Err codevoid.de 70 i continue; Err codevoid.de 70 i case _key_lndown: Err codevoid.de 70 i lndown: Err codevoid.de 70 it@@ -452,7 +452,7 @@ uiselectitem(Item *entry) Err codevoid.de 70 i return entry; Err codevoid.de 70 i case _key_uri: Err codevoid.de 70 i if (dir) Err codevoid.de 70 i- displayuri(dir->items[dir->curline]); Err codevoid.de 70 i+ displayuri(&dir->items[dir->curline]); Err codevoid.de 70 i continue; Err codevoid.de 70 i case _key_help: /* FALLTHROUGH */ Err codevoid.de 70 i return help(entry); Err codevoid.de 70 1diff --git a/ui_txt.c b/ui_txt.c /git/sacc-sdk/file/ui_txt.c.gph codevoid.de 70 it@@ -113,7 +113,7 @@ uiprompt(char *fmt, ...) Err codevoid.de 70 i void Err codevoid.de 70 i uidisplay(Item *entry) Err codevoid.de 70 i { Err codevoid.de 70 i- Item **items; Err codevoid.de 70 i+ Item *items; Err codevoid.de 70 i Dir *dir; Err codevoid.de 70 i size_t i, lines, nitems; Err codevoid.de 70 i int nd; Err codevoid.de 70 it@@ -130,7 +130,7 @@ uidisplay(Item *entry) Err codevoid.de 70 i Err codevoid.de 70 i for (i = dir->printoff; i < nitems && i < lines; ++i) { Err codevoid.de 70 i printf("%*zu %s %s\n", Err codevoid.de 70 i- nd, i+1, typedisplay(items[i]->type), items[i]->username); Err codevoid.de 70 i+ nd, i+1, typedisplay(items[i].type), items[i].username); Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i fflush(stdout); Err codevoid.de 70 it@@ -234,7 +234,7 @@ uiselectitem(Item *entry) Err codevoid.de 70 i return entry; Err codevoid.de 70 i case 'u': Err codevoid.de 70 i if (item > 0 && item <= nitems) Err codevoid.de 70 i- printuri(dir->items[item-1], item); Err codevoid.de 70 i+ printuri(&dir->items[item-1], item); Err codevoid.de 70 i continue; Err codevoid.de 70 i case 'h': Err codevoid.de 70 i case '?': Err codevoid.de 70 it@@ -250,7 +250,7 @@ uiselectitem(Item *entry) Err codevoid.de 70 i } Err codevoid.de 70 i Err codevoid.de 70 i if (item > 0) Err codevoid.de 70 i- return dir->items[item-1]; Err codevoid.de 70 i+ return &dir->items[item-1]; Err codevoid.de 70 i Err codevoid.de 70 i return entry->entry; Err codevoid.de 70 i } Err codevoid.de 70 .