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:
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");