photomosaics

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit a0dcf1a108208ead97c12fb1a78f5ae6cb39906c
parent 188e1179ed6fcbc5a3d8b335c343f1c5607b2830
Author: Wilson Gheen <wilson@wilsonrgheen.com>
Date:   Tue, 17 Jan 2023 15:28:27 -0600

Replace `try` with a macro that aborts, and set a default `cache_max_size`

Diffstat:
Mphotomosaics.c | 24+++++++++++-------------
1 file changed, 11 insertions(+), 13 deletions(-)

diff --git a/photomosaics.c b/photomosaics.c @@ -13,9 +13,10 @@ #include <unistd.h> #include <MagickCore/MagickCore.h> -#define DIE(rc, fmt, ...) { fprintf(stderr, "FATAL: "fmt"\n", __VA_ARGS__); exit(rc); } -#define WARN(fmt, ...) { fprintf(stderr, "WARN: " fmt"\n", __VA_ARGS__); } -#define assert_error(expression, s) if(!expression) { perror(s); abort(); } +#define DIE(rc, fmt, ...) { fprintf(stderr, "FATAL: "fmt"\n", __VA_ARGS__); exit(rc); } +#define WARN(fmt, ...) { fprintf(stderr, "WARN: " fmt"\n", __VA_ARGS__); } +#define assert_error(expression, s) if(!expression) { perror(s); abort(); } +#define assert_call_succeeds(exit_code, s) if(exit_code != 0) { perror(s); abort(); } typedef struct { unsigned int r, g, b; @@ -28,7 +29,7 @@ typedef enum { L, UL, XU, XUL, F } NUM_TYPES; static const char *cache_filename = "/home/wilson/.cache/photomosaics/avgs"; static char *cache_buf = NULL; -static size_t cache_max_size; +static size_t cache_max_size = 0; static ssize_t initial_cache_size = 1; static ssize_t cache_size = 0; static time_t cache_mtime; @@ -39,9 +40,6 @@ static char **inner_cache_tmp_files; static char **files_inner_cached = NULL; static size_t files_inner_cached_ind = 0; -static void try(int exit_code, char *function_name) { - if(exit_code != 0) perror(function_name); -} static size_t slen(const char *s, size_t maxlen) { char *pos = memchr(s, '\0', maxlen); return pos ? (size_t)(pos - s) : maxlen; @@ -138,7 +136,7 @@ static ssize_t cache_grep(char *key) { perror("fopen"); } else { - try(fclose(tmp_cache_file), "fclose"); + assert_call_succeeds(fclose(tmp_cache_file), "fclose"); if(stat(cache_filename, &cache_st) != 0) { WARN("Could not stat cache file '%s'", cache_filename); perror("stat"); @@ -165,7 +163,7 @@ static ssize_t cache_grep(char *key) { cache_buf[cache_size] = 0; /* For the initial strncat later */ assert(cache_size == cache_file_size); - try(fclose(cache_file), "fclose"); + assert_call_succeeds(fclose(cache_file), "fclose"); } if(cache_size == 0) return -1; @@ -197,7 +195,7 @@ static ssize_t cache_grep(char *key) { assert(fn_len); if(!strncmp(filename, key, fn_len)) { //Already exists in cache - try(stat(filename, &file_st), "stat"); + assert_call_succeeds(stat(filename, &file_st), "stat"); //The sole use of `initial_...`. Prevents the caller from re- and recaching newly-added files if(i > initial_cache_size - 1 || file_st.st_mtime < cache_mtime) { /* Cache entry is up to date */ @@ -368,7 +366,7 @@ static Image *photomosaic(Image *image, const size_t each_width, const size_t ea FILE *f = popen("find $(find ~/pics -type d | grep -vE 'redacted|not_real') -maxdepth 1 -type f -print0", "r"); char buf[IMG_LIST_MAX_SIZE]; size_t bytes_read = fread(buf, 1, IMG_LIST_MAX_SIZE, f); - try(pclose(f), "pclose"); + assert_call_succeeds(pclose(f), "pclose"); assert(ExportImagePixels(image, 0, 0, image->columns, image->rows, "RGB", CharPixel, pixels, exception)); @@ -472,11 +470,11 @@ int main(int argc, char **argv) { /* Teardown */ if(files_inner_cached) { for(size_t i=0; i < files_inner_cached_ind; i++) { - try(remove(inner_cache_tmp_files[i]), "remove"); + assert_call_succeeds(remove(inner_cache_tmp_files[i]), "remove"); free(inner_cache_tmp_files[i]); free(files_inner_cached[i]); } - try(remove(temp_dirname), "remove"); + assert_call_succeeds(remove(temp_dirname), "remove"); } if(cache_buf) { FILE *cache = fopen(cache_filename, "w");