jrk

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

commit 28dfbe162b48059c1b3ad99b0c56fb2d9100e8cf
parent 0a62235e16263adfe0be3a90c578a50e3277ed9b
Author: Jake Koroman <jake@jakekoroman.com>
Date:   Tue,  9 Sep 2025 19:31:59 -0400

add jrk_return_defer and remove assert from jrk_da_free.

Diffstat:
Mjrk.h | 23++++++++++++++++++-----
1 file changed, 18 insertions(+), 5 deletions(-)

diff --git a/jrk.h b/jrk.h @@ -6,6 +6,7 @@ * must be a better way of handling things. */ +#include <stdbool.h> #include <stdint.h> #ifdef JRK_IMPLEMENTATION_WITH_SHORTNAMES @@ -29,8 +30,15 @@ typedef double f64; #define JRK_UNUSED(x) (void)x #define JRK_ARRSIZE(arr) (sizeof(arr) / sizeof(arr[0])) +#define jrk_return_defer(value) \ + do { result = value; goto defer; } while(0) + +#define JRK_KILOBYTES(x) ((u64)x*1024) +#define JRK_MEGABYTES(x) (JRK_KILOBYTES((u64)x*1024)) +#define JRK_GIGABYTES(x) (JRK_MEGABYTES((u64)x*1024)) + #define JRK_TMPSTRINGS_ARR_CAPACITY 4 -#define JRK_TMPSTRINGS_STR_CAPACITY 1024 +#define JRK_TMPSTRINGS_STR_CAPACITY JRK_KILOBYTES(1) typedef struct { u8 *data; @@ -135,10 +143,10 @@ char *jrk_tmpstrings_pushf(char *, ...); }; \ typedef struct name name -#define jrk_da_free(da) \ - do { \ - jrk_assert((da).items, "bad free: jrk_da_free da.items is NULL"); \ - free((da).items); \ +#define jrk_da_free(da) \ + do { \ + if ((da).items) \ + free((da).items); \ } while (0) #define jrk_da_foreach(type,it,da) for (type *it = (da)->items; it < (da)->items + (da)->count; ++it) @@ -158,6 +166,11 @@ char *jrk_tmpstrings_pushf(char *, ...); #ifdef JRK_SHORTNAMES #define UNUSED JRK_UNUSED #define ARRSIZE JRK_ARRSIZE + #define KILOBYTES JRK_KILOBYTES + #define MEGABYTES JRK_MEGABYTES + #define GIGABYTES JRK_GIGABYTES + + #define return_defer jrk_return_defer #define Arena jrk_Arena #define StringBuilder jrk_StringBuilder