jrk

my own c stdlib to keep myself sane
git clone git://git.jakekoroman.com/jrk
Log | Files | Refs

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:
Mjrk.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; }