From becf1cc858d1590d75f00124b77f04578da7fae0 Mon Sep 17 00:00:00 2001 From: NRK Date: Sun, 7 Aug 2022 19:53:26 +0600 Subject: fix: build failure when _SC_PHYS_PAGES is not defined _SC_PHYS_PAGES isn't POSIX and might not be defined. in such case, just return back `CACHE_SIZE_FALLBACK`. NOTE: POSIX says the `names` in `sysconf()` are "symbolic constants" not necessarily macros. So we might end up returning the fallback in some cases where `_SC_PHYS_PAGES` *was* available, but not defined as a macro. which is not ideal, but nothing fatal. in practice, this shouldn't be an issue since most systems seems to define them to be macros, i've checked Glibc, Musl, OpenBSD, FreeBSD and Haiku. also add a (useful) comment on `config.h` describing the effect higher cache size has. Closes: https://codeberg.org/nsxiv/nsxiv/issues/354 --- image.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'image.c') diff --git a/image.c b/image.c index beedcbd..ad2a254 100644 --- a/image.c +++ b/image.c @@ -49,14 +49,14 @@ enum { DEF_WEBP_DELAY = 75 }; static int calc_cache_size(void) { - int cache; - long pages, page_size; + long cache, pages = -1, page_size = -1; if (CACHE_SIZE_MEM_PERCENTAGE <= 0) return 0; - +#ifdef _SC_PHYS_PAGES /* _SC_PHYS_PAGES isn't POSIX */ pages = sysconf(_SC_PHYS_PAGES); page_size = sysconf(_SC_PAGE_SIZE); +#endif if (pages < 0 || page_size < 0) return CACHE_SIZE_FALLBACK; cache = (pages/100) * CACHE_SIZE_MEM_PERCENTAGE; -- cgit v1.2.3-54-g00ecf