commit 596c955b7066e375ffda216c818a45f1fd906938
parent fd3d9d083cdfdb4e6aa06e8587ed58f91bd83d1f
Author: Jake Koroman <jake@jakekoroman.com>
Date: Tue, 5 Aug 2025 14:52:58 -0400
add jrk_(e)diev macros. much better error tracing.
Diffstat:
M | jrk.h | | | 35 | ++++++++++++++++++++++++----------- |
1 file changed, 24 insertions(+), 11 deletions(-)
diff --git a/jrk.h b/jrk.h
@@ -1,6 +1,5 @@
/*
* TODO(jake):
- * - variadic die macros to show params of 'dying' functions
* - application shouldn't be dying on all failures, have a way
* to configure that ... just die without calling exit()
*/
@@ -194,12 +193,26 @@ jrk_StringView jrk_sv_from_cstr(char*);
#include <sys/stat.h>
#include <unistd.h>
-#define jrk_die(x) do { fprintf(stderr, "%s:%d: error: "x"\n", __FILE__, __LINE__); exit(69); } while(0)
-#define jrk_edie(x) do { fprintf(stderr, "%s:%d: error: "x": %s\n", __FILE__, __LINE__, strerror(errno)); exit(69); } while(0)
+#define jrk_die(x) \
+ do { \
+ fprintf(stderr, "%s:%d: error: "x" \n", __FILE__, __LINE__); \
+ exit(69); \
+ } while(0)
+
+#define jrk_diev(x, ...) \
+ do { \
+ fprintf(stderr, "%s:%d: error: "x"\n", __FILE__, __LINE__, __VA_ARGS__); \
+ exit(69); \
+ } while(0)
+
+#define jrk_edie(x) jrk_diev(x": %s", strerror(errno))
+#define jrk_ediev(x, ...) jrk_diev(x": %s", __VA_ARGS__, strerror(errno))
#ifdef JRK_SHORTNAMES
#define die jrk_die
+ #define diev jrk_diev
#define edie jrk_edie
+ #define ediev jrk_ediev
#endif // JRK_SHORTNAMES
void *
@@ -208,7 +221,7 @@ jrk_ecalloc(u64 nmemb, u64 size)
void *p;
if (!(p = calloc(nmemb, size)))
- jrk_edie("jrk_ecalloc");
+ jrk_ediev("jrk_ecalloc(%ld, %ld)", nmemb, size);
return p;
}
@@ -218,7 +231,7 @@ jrk_erealloc(void *ptr, u64 size)
void *p;
if (!(p = realloc(ptr, size)))
- jrk_edie("jrk_erealloc");
+ jrk_ediev("jrk_erealloc(%p, %ld)", ptr, size);
return p;
}
@@ -273,7 +286,7 @@ u64 jrk_fd_size(i32 fd)
{
struct stat statbuf = {0};
if (fstat(fd, &statbuf) < 0)
- jrk_edie("jrk_fd_size");
+ jrk_ediev("jrk_fd_size(%d)", fd);
return statbuf.st_size;
}
@@ -284,7 +297,7 @@ jrk_sb_fd_read_all(jrk_StringBuilder *sb, i32 fd)
u64 sz = jrk_fd_size(fd);
jrk_da_reserve(sb, sz);
if (read(fd, sb->items, sz) < 0)
- jrk_edie("jrk_sb_fd_read_all");
+ jrk_ediev("jrk_sb_fd_read_all(%p, %d)", sb, fd);
sb->count = sz;
}
@@ -295,7 +308,7 @@ jrk_sb_fd_write_all(jrk_StringBuilder *sb, i32 fd)
i64 result;
result = write(fd, (void *) sb->items, sb->count);
if (result < 0)
- jrk_edie("jrk_sb_fd_write_all");
+ jrk_ediev("jrk_sb_fd_write_all(%p, %d)", sb, fd);
return result;
}
@@ -328,7 +341,7 @@ jrk_fd_open_read(char *path)
i32 result = open(path, O_RDONLY);
if (result < 0)
- jrk_edie("jrk_fd_open_read");
+ jrk_ediev("jrk_fd_open_read(%s)", path);
return result;
}
@@ -341,7 +354,7 @@ jrk_fd_open_write(char *path)
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (result < 0)
- jrk_edie("jrk_fd_open_write");
+ jrk_ediev("jrk_fd_open_write(%s)", path);
return result;
}
@@ -354,7 +367,7 @@ jrk_fd_open_write_append(char *path)
S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH);
if (result < 0)
- jrk_edie("jrk_fd_open_write_append");
+ jrk_ediev("jrk_fd_open_write_append(%s)", path);
return result;
}