This commit is contained in:
Nikita Ivanov 2022-05-24 06:26:02 +05:00
parent 82a82e4a61
commit 6a5fb93850
No known key found for this signature in database
GPG Key ID: 6E656AC5B97B5133
2 changed files with 21 additions and 20 deletions

5
ctpv.c
View File

@ -5,7 +5,6 @@
#include <magic.h> #include <magic.h>
#include "error.h" #include "error.h"
#include "utils.h"
#include "previews.h" #include "previews.h"
#define ANY_TYPE "*" #define ANY_TYPE "*"
@ -104,8 +103,8 @@ static int preview(int argc, char *argv[])
init_previews_v(); init_previews_v();
const char *mimetype = get_mimetype(f); const char *mimetype;
ERRCHK_RET(!mimetype); ERRCHK_RET(!(mimetype = get_mimetype(f)));
PreviewArgs args = { .f = f, .w = w, .h = h, .x = x, .y = y }; PreviewArgs args = { .f = f, .w = w, .h = h, .x = x, .y = y };

View File

@ -11,8 +11,10 @@
static char shell[] = "sh"; static char shell[] = "sh";
static Preview **prevs; static struct {
static size_t prevs_len; size_t len;
Preview **list;
} previews;
static int cmp_previews(const void *p1, const void *p2) static int cmp_previews(const void *p1, const void *p2)
{ {
@ -38,28 +40,28 @@ static int cmp_previews(const void *p1, const void *p2)
void init_previews(Preview *ps, size_t len) void init_previews(Preview *ps, size_t len)
{ {
prevs_len = len; previews.len = len;
prevs = malloc(len * PREVP_SIZE); previews.list = malloc(len * PREVP_SIZE);
if (!prevs) { if (!previews.list) {
PRINTINTERR(FUNCFAILED("malloc"), ERRNOS); PRINTINTERR(FUNCFAILED("malloc"), ERRNOS);
abort(); abort();
} }
for (size_t i = 0; i < len; i++) for (size_t i = 0; i < len; i++)
prevs[i] = &ps[i]; previews.list[i] = &ps[i];
qsort(prevs, len, PREVP_SIZE, cmp_previews); qsort(previews.list, previews.len, PREVP_SIZE, cmp_previews);
} }
void cleanup_previews(void) void cleanup_previews(void)
{ {
if (prevs) { if (!previews.list)
free(prevs); return;
prevs = NULL;
}
prevs_len = 0; free(previews.list);
previews.list = NULL;
previews.len = 0;
} }
static void break_mimetype(char *mimetype, char **type, char **subtype) static void break_mimetype(char *mimetype, char **type, char **subtype)
@ -87,8 +89,8 @@ static Preview *find_preview(char const *mimetype, char const *ext, size_t *i)
strncpy(mimetype_c, mimetype, MIMETYPE_MAX - 1); strncpy(mimetype_c, mimetype, MIMETYPE_MAX - 1);
break_mimetype(mimetype_c, &t, &s); break_mimetype(mimetype_c, &t, &s);
for (; *i < prevs_len; (*i)++) { for (; *i < previews.len; (*i)++) {
p = prevs[*i]; p = previews.list[*i];
if (p->ext && strcmpnull(p->ext, ext) != 0) if (p->ext && strcmpnull(p->ext, ext) != 0)
continue; continue;
@ -107,7 +109,7 @@ static Preview *find_preview(char const *mimetype, char const *ext, size_t *i)
static void check_init_previews(void) static void check_init_previews(void)
{ {
if (!prevs) { if (!previews.list) {
PRINTINTERR("init_previews() not called"); PRINTINTERR("init_previews() not called");
abort(); abort();
} }
@ -189,6 +191,6 @@ run:
Preview **get_previews_list(size_t *len) Preview **get_previews_list(size_t *len)
{ {
check_init_previews(); check_init_previews();
*len = prevs_len; *len = previews.len;
return prevs; return previews.list;
} }